0

HLSを使ったiOSアプリを開発しています。私たちのビデオプラットフォームでは、Nginx proxy_passモジュールを使用して、1つのオリジンが使用できなくなったときに1つのオリジンから別のオリジンにリダイレクトします(2つのオリジンがあります)。オリジンの切り替えはクライアントにとって透過的であり、バランサーによって維持されます。クライアントのプレイリストURIは変更されないままです。

QuickTimeにも表示されるこのような切り替えワークフローでAVPlayerの問題に直面しました。ネットワークログによると、次のことが起こります。

切り替えの時点で、AVPlayerはライブプレイリストを再度要求し、切り替え前にロードされたチャンクの再生が終了すると、プレイリストの次のチャンクではなく最初のチャンクの再生を開始します。また、AVPlayer currentTimeプロパティに変更はなく、最初のチャンクの切り替えがなかったように変化し続け(通常、プレイリストの開始時にcurrentTimeは0になります)、プレーヤーアイテムのステータスは変更されず、通知はスローされません。アクセスログに特別な、エラーログはまったく空です。そのため、ユーザーインターフェイス(つまり、シークバー)を更新したり、ライブストリートの別の時間にリダイレクトされたユーザーを変更したりすることはできません。また、特定のブロードキャストの範囲外のライブストリームをユーザーに表示してはならないという状況では、問題はさらに悪化します。

これを解決する方法について何か提案はありますか?それとも、AVPlayerのコアバグですか(この問題がQuicktimeにも表示される限り)?

4

1 に答える 1

0

解決策は次のとおりです。1) 異なるオリジンのプレイリストに異なる名前を使用する、2) 無効なオリジンからプレイリストを更新しようとすると、クライアント 404 または別のエラーに返送する、3) プレイリストでフォールバックを使用する - 2 番目のオリジンから 2 番目の代替プレイリストを追加するマルチビットレートプレイリストで。HLSのドキュメントに記載されています。AVPlayer がプレイリストの更新中にエラーを受け取ると、フォールバック プレイリストから更新を試みます 4) 手動で品質を選択できるようにするため、特定の品質のプレイリストをマスター プレイリストとフォールバック プレイリストで中間バリアント プレイリストにラップする必要がありました。ライブストリームからプレイリストを生成するために使用する FMS ではそれができないため、Nginx 側でバリアント プレイリストを生成する必要がありました。

その結果、自動および手動の品質選択で動作するマスターとスレーブ (第 2) オリジン間の透過的な切り替えを備えたフォールト トレラントなビデオ プラットフォームが実現します。

于 2012-08-14T14:12:47.177 に答える