動画を再生するアプリがあります。iOS 11、12、およびiOS 13と互換性があります。iOS11および12では、どちらか、AVPlayerViewController
またはを使用しても、ビデオ再生は正常に機能しますAVPlayerLayer
。
しかし、iOS 13では、iOSを更新したときにかなりの数のユーザーに対して突然ビデオが読み込まれなかった(またはオーディオのみが読み込まれる、または最初のフレームのみが読み込まれる)というレポートが届き始めました。私はそれを複製するのに本当に苦労しましたが、一部はネットワークの接続不良が原因で発生したと述べ、ネットワークリンクコンディショナーでそれを再現することができたと確信しています。
これは特にHLSビデオに影響します(たとえば、Redditが使用するファンシーライブストリーム互換のもの)。MP4でも問題なく動作します。失敗したURLの例を次に示します。https://v.redd.it/gl3chx2kd4v31/HLSPlaylist.m3u8
これをトリガーするネットワークリンクコンディショナープロファイルは次のとおりです。https://i.imgur.com/XWsKUeM.jpg
これをトリガーするサンプルプロジェクトは、AVPlayerViewControllerとAVPlayerの両方を示しています(ダウンロードがヒットし、Googleは奇妙です):https ://drive.google.com/file/d/1RS5DvUypdOLFCYJe1Pt2Ig0fQljZDLs2/view
AVPlayerViewControllerでそれを披露するサンプルコードを次に示します。
let assetURL = URL(string: "https://v.redd.it/gl3chx2kd4v31/HLSPlaylist.m3u8")!
// The following MP4 URL *does* work, for instance
// let assetURL = URL(string: "https://giant.gfycat.com/DependentFreshKissingbug.mp4")!
let player = AVPlayer(url: assetURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}
iOS 12デバイスでまったく同じコードを試すと、完全に機能します。
誰かがそれを修正する方法について何か提案がありますか?先頭にスクラブすると、ビデオを適切に再生できる場合がありますが、一見してソリューションを構築できるほどの信頼性はありません。iOSの開発では、ビデオに関するものは間違いなく私の強みではないので、少し頭を悩ませ始めています。ご協力いただければ幸いです。
注:これはiOSのバグである可能性が高いことを十分に認識しており、レーダーを提出しますが、今でも対処する必要があります。