LoginSignup
3
5

More than 5 years have passed since last update.

AVPlayer で再生できない

Last updated at Posted at 2019-04-07

数十秒の音声を再生したいとおもって、下記コードで試しても再生できなく、エラーが出ることもなく、困っていました。

再生されないコード
@IBAction private func tappedButton(_ sender: UIButton) {
    let url = URL(string: "https://sample.com/music.mp3")!
    let player = AVPlayer(url: url)
    player.play()
}

いろいろ調べてもわからず、結局自分でひらめいて解決しました。

再生できるコード
var player: AVPlayer?

@IBAction private func tappedButton(_ sender: UIButton) {
    let url = URL(string: "https://sample.com/music.mp3")!
    player = AVPlayer(url: url)
    player?.play()
}

function 内で生成したインスタンスがすぐ開放されてしまっていたということですね。
インスタンスを保持しておけるよう、変数を function の外に出して解決しました。
ARC のおかげで日々メモリを意識せずコーディングできてますが、その弊害が出てしまった感じでしょう。

おまけ: ストリーミング再生は AVAudioPlayer ではない

音声再生する場合 AVAudioPlayer を使ってしまいそうになりますが、これはローカルのファイルを扱う物らしいので、
ストリーミング再生したい場合は AVPlayer を使います。

参照: https://stackoverflow.com/a/17007441

環境

  • Swift 4.2
  • Xcode 10.1
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5