2017-04-17 4 views
6

JavaScriptでMPEG-DASHプレーヤーを構築する。しかし、シークを実装する際に問題が発生しており、MSEとそれに対応するSource Bufferオブジェクトを使用して処理する方法の参考資料が多くないようです。MPEG-DASHセグメントをシーケンシャルにシークするためにロードする

セグメントが適切にエンコードされていれば(私はSegmentTemplateを介してバイト範囲ではなく個々のm4sファイルを使用しています)、必要な任意のポイントのセグメントを追加するだけでよい10秒のマーク)、VideoElementのcurrentTimeパラメータをマークに設定します。このすべてがうまくいけば、エラーなくセグメントバッファを確認でき、セグメントの最初のフレームはVideoElement内で視覚的に読み込まれます。ただし、再生されず、スクラビングはできません。エラーもありません。より多くのデータを待っているように機能します。

これは、以前のすべてのセグメントを任意のポイントまで追加することで解決しますが、これは実用的ではありません。例えば、dash.jsはそれをしません(しかし、正確なシークを可能にするために異なってやっていることを正確にピン止めすることはできません)。私は動的にsidx、mfhd、および/またはtfdtのボックスを何とか変更しなければならないと思っています。ブラウザを真似して、セグメントを順次ロードしていると騙してしまいます。

断片化されたMP4セグメントをMSEソースバッファに供給する際に、任意のポイントにジャンプして再生を続ける方法を知っていますか?

答えて

0

解決済み。 Iフレームが正しく整列されている

A):

が、これはとても長いよう、自動的に動作しますが判明します。 (これらはありましたが、この場合は、エンコードまたはその実装によってエラーが発生した場合には、このようなことを伝えるのが難しい場合があります)B)セグメントはシークポイントに読み込まれます。したがって、10秒のマークを探す場合は、セグメントの読み込みが10秒のマークから開始し、それ以降は続行する必要があります。

奇妙なことに、以前は何度かこの設定をしていましたが、正常に再生できなかったり、レンダリングのヒザを多数紹介しました。しかし、私が知る限り、これらはセグメントのインポート/バッファールーチンのマイナーな実装エラーが原因でした。

関連する問題