2016-11-09 6 views
2

私はStarboardでメディアハンドラを実装しています。私はCobaltのクライアントアプリケーションがコンテンツを積極的にバッファリングしていない状況に陥っています。この結果、空のバッファでアイドル状態になります。プラットフォームのバッファが使い果たされたときに起動する適切なStarboardイベントは何ですか?何らかのエラーが発生した場合、またはクライアントアプリケーションにさらにデータを要求する旨の信号がありますか?バッファアンダーランを処理する最良の方法は?

答えて

5

アンダーランがある場合、プレーヤーの実装はビデオの再生を内部的に一時停止することによってそれを処理する必要があります。エンドユーザには、メディアスタックの状態が「再生中」と見なされている間、メディア再生が一時停止されます。これにより、再生を再開する前に、ビデオデータを受信する機会がプレーヤーに与えられます。リファレンス実装では、PlayerWorkerはオーディオ再生を一時停止することでこれを実現します。メディアの時間とビデオの再生がオーディオ時間にリンクされると、プレーヤー全体が一時停止されます。

新しいデータが来たら、プレイヤーは自動的に再生を再開する必要があります。プレイヤーの実装は、将来のアンダーランを避けるために、プリロール/レジュームに必要なバッファー量を増やすことも選択できますが、これは通常は必要ありません。

あなたのアプリは常にアンダーランになると述べました。アンダーランが適切に処理できる場合でも、これを解決してより良いユーザーエクスペリエンスを実現することは素晴らしいことです。

最初に確認するのは、テスト環境には要求されたビデオ品質に十分なネットワーク帯域幅があるということです。アプリが非常に貧弱なネットワークの市場をターゲットにしている場合、より多くのメディアデータをバッファリングすることを検討してください。

ネットワーク帯域幅が十分にある場合にアプリケーションの実行がアンダーランすると、メディアデータが十分に高速に処理されないことが示されます。良い方法は、kSbPlayerDecoderStateNeedsDataが頻繁に起動され、SbPlayerWriteSample()がStarBoardの境界を越えてメディアデータを移動する唯一の場所であるため、あまり遅れなく呼び出されるかどうかを確認することです。

関連する問題