Starboard でメディア ハンドラーを実装していますが、Cobalt のクライアント アプリケーションがコンテンツを積極的にバッファリングしない状況に遭遇しています。これにより、空のバッファでアイドル状態になります。プラットフォームのバッファが枯渇したときにトリガーする適切な Starboard イベントは何ですか? どういうわけかエラーを発生させる必要がありますか、それともクライアント アプリに追加のデータを要求するための信号を与えることができますか?
1 に答える
アンダーランが発生した場合、プレーヤーの実装はビデオの再生を内部で一時停止することによって処理する必要があります。エンド ユーザーにとって、メディア スタックの状態がまだ「再生中」と見なされている間、メディアの再生は一時停止されます。これにより、プレーヤーは再生を再開する前にビデオ データを受信する機会が与えられます。リファレンス実装では、PlayerWorker はオーディオの再生を一時停止することでこれを実現します。メディア時間とビデオ再生がオーディオ時間にリンクされるため、プレーヤー全体が一時停止します。
新しいデータが来ると、プレーヤーは自動的に再生を再開する必要があります。プレーヤーの実装では、将来のアンダーランを回避するために、プリロール/再開に必要なバッファーの量を増やすことも選択できますが、これは通常は必要ありません。
あなたが言及したように、アプリは常にアンダーランに遭遇します。アンダーランを適切に処理できたとしても、これを解決してユーザー エクスペリエンスを向上させることは素晴らしいことです。
最初に確認することは、要求されたビデオ品質に十分なネットワーク帯域幅がテスト環境にあることです。アプリがネットワークが非常に貧弱な市場をターゲットにしている場合は、より多くのメディア データをバッファすることを検討してください。
十分なネットワーク帯域幅があるときにアプリがアンダーランする場合は、メディア データが十分な速度で処理されていないことを示しています。kSbPlayerDecoderStateNeedsData が十分な頻度で起動され、SbPlayerWriteSample() がそれほど遅延なく呼び出されているかどうかを確認することをお勧めします。これは、Starboard 境界を越えてメディア データを移動する唯一の場所だからです。