LoginSignup
2
3

More than 3 years have passed since last update.

iOS14で動画再生中、バックグラウンド移行時に一時停止されてしまう問題への対応

Posted at

対応

  • playerView.player = nil
  • playerView.player = player

の実行タイミングを変更する

@objc func applicationWillResignActive(_ notification: NSNotification?) {
   playerView.player = nil
}

@objc func applicationDidBecomeActive(_ notification: NSNotification?) {
   playerView.player = player
}

経緯

  • ユーザー「iOS14にアップデートしたらバックグラウンド再生がおかしい。なんとかしろ:rage::bangbang:
  • ワタクシ「:sob:

対応前

  • applicationDidEnterBackgroundplayerView.player = nil していた ※Appleさんの公開しているドキュメントの記載内容に従ったもの

調査

  • 何もしてないのに動かなくなった ⇒ OSの仕様変わったな?
  • バックグラウンドに行ったら一時停止 ⇒ layerにplayer設定したままの動作と同じだな?

検証

  1. 動画再生中、バックグラウンド移行前に、手動で playerView.player = nil する
  2. バックグラウンドへ移行する

「再生が継続された!」

導き出される結論は…
「layer に player があるかどうかチェックしているタイミング変わったんじゃね?」

再検証

  1. applicationDidEnterBackground より前に実行される applicationWillResignActiveplayerView.player = nil するよう変更
  2. applicationWillResignActiveに対となるのが applicationDidBecomeActive となるため、そこで playerView.player = player するよう変更

「再生が継続された!」

※iOS11-14、iPadOS13,14で動作することも確認しました

まとめ

  • Appleさんのドキュメントのままに書いても動作しないため、OS不具合の可能性が高いです
    • iOS 14.2 beta2 で、この不具合が修正されているとの噂です

その他

  • iOS14がリリースされてしばらく経ちましたが、この対応方法を見かけなかったため記事を投稿します

参考文献

  1. Apple : Playing media while in the background using AV Foundation on iOS
  2. Apple : Playing Audio from a Video Asset in the Background
  3. @KenNagami : iOSアプリのライフサイクル
  4. @bosteri_bon : iOS14で「バックグラウンド再生」が出来ない不具合への対処
2
3
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
2
3