iOS14で動画再生中、バックグラウンド移行時に一時停止されてしまう問題への対応
対応
playerView.player = nil
playerView.player = player
playerView.player = nil
playerView.player = player
の実行タイミングを変更する
@objc func applicationWillResignActive(_ notification: NSNotification?) {
playerView.player = nil
}
@objc func applicationDidBecomeActive(_ notification: NSNotification?) {
playerView.player = player
}
経緯
- ユーザー「iOS14にアップデートしたらバックグラウンド再生がおかしい。なんとかしろ」
- ワタクシ「」
対応前
-
applicationDidEnterBackground
で playerView.player = nil
していた ※Appleさんの公開しているドキュメントの記載内容に従ったもの
調査
- 何もしてないのに動かなくなった ⇒ OSの仕様変わったな?
- バックグラウンドに行ったら一時停止 ⇒ layerにplayer設定したままの動作と同じだな?
検証
- 動画再生中、バックグラウンド移行前に、手動で
playerView.player = nil
する
- バックグラウンドへ移行する
-
applicationDidEnterBackground
でplayerView.player = nil
していた ※Appleさんの公開しているドキュメントの記載内容に従ったもの
調査
- 何もしてないのに動かなくなった ⇒ OSの仕様変わったな?
- バックグラウンドに行ったら一時停止 ⇒ layerにplayer設定したままの動作と同じだな?
検証
- 動画再生中、バックグラウンド移行前に、手動で
playerView.player = nil
する
- バックグラウンドへ移行する
- 動画再生中、バックグラウンド移行前に、手動で
playerView.player = nil
する - バックグラウンドへ移行する
⇒「再生が継続された!」
導き出される結論は…
「layer に player があるかどうかチェックしているタイミング変わったんじゃね?」
再検証
-
applicationDidEnterBackground
より前に実行される applicationWillResignActive
で playerView.player = nil
するよう変更
-
applicationWillResignActive
に対となるのが applicationDidBecomeActive
となるため、そこで playerView.player = player
するよう変更
applicationDidEnterBackground
より前に実行される applicationWillResignActive
で playerView.player = nil
するよう変更applicationWillResignActive
に対となるのが applicationDidBecomeActive
となるため、そこで playerView.player = player
するよう変更⇒「再生が継続された!」
※iOS11-14、iPadOS13,14で動作することも確認しました
まとめ
- Appleさんのドキュメントのままに書いても動作しないため、OS不具合の可能性が高いです
- iOS 14.2 beta2 で、この不具合が修正されているとの噂です
その他
- iOS14がリリースされてしばらく経ちましたが、この対応方法を見かけなかったため記事を投稿します
参考文献
- iOS 14.2 beta2 で、この不具合が修正されているとの噂です
- iOS14がリリースされてしばらく経ちましたが、この対応方法を見かけなかったため記事を投稿します
参考文献
Author And Source
この問題について(iOS14で動画再生中、バックグラウンド移行時に一時停止されてしまう問題への対応), 我々は、より多くの情報をここで見つけました https://qiita.com/perohas/items/a50fc9fe8434b9370df8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .