0

avformat ライブラリと HTML5 ビデオと MSE を使用して、断片化された基本的な mp4ブロードキャスト プログラムを実行したいと考えていました。

これはライブ ストリームで、avformat を使用して h264 データを mp4 フラグメントにコピーします。

ストリームにアタッチするクライアントの基本的な図を次に示します。

ここに画像の説明を入力

だから、言葉で:

  1. C1J: 最初のクライアントが参加:
    • avformat プロセスの開始
    • ftyp、moov、moof、mdat ボックスが Client1 に提供されます
    • ftyp と moov アトムは両方とも、後で再利用するために保存されます
  2. C2J: 2 番目のクライアントが参加します (後で):
    • avformat プロセスは進行中です (クライアント 1 の moof および mdat ボックスをまだ提供しているため)
    • 以前に保存された ftyp および moov ボックスが最初に Client2 に提供されます
    • ftyp と moov ボックスが提供された後、Client2 は次の moof ボックスでストリームに参加します。

両方のクライアントから mp4 ファイルをディスクに保存しました。

両方のファイル内のアトムの順序は適切に見えます: ftype、moov、moof、mdat、moof、mdat...

どちらのファイルも、メディア プレーヤー (VLC など) で再生したり、ブラウザー (Opera) で直接再生したりできます。

Client1 はブラウザ (Opera) で MSE 経由でも再生できますが、Client2 のストリームは MSE (Opera) で表示されません。

JS コンソールにエラーはなく、media-internals も問題ないようです (少なくとも Client1 のものと同等です)。

ここで、すべての moof ボックスにフィールド付きの mfhd ボックス (ヘッダー) が含まれていることに気付きましたsequenceNumber

もちろん、Client1 の最初の moof ボックスでは、この sequenceNumber は1. ただし、後で参加した Client2 の最初の moof ボックスでは、この sequenceNumber は常に >= です1(私の場合は です16)。

最初から有効な fmp4 を使用するには、Client2 の moof ボックスで何を変更する必要がありますか?

SequenceNumber が 1 から始まらない場合、Opera の HTML5 ビデオは気に入らないと思いますが、それが有効であるための要件は他にもあります。

4

2 に答える 2

0

すべてのmoofボックスには、プレイする順番に関する情報が含まれています。MSE は、デフォルトでビデオが時間 0 で開始されることを期待しています。

この問題の簡単な解決策の 1 つはHTMLMediaElement.currentTime、最初のバッファーを追加した後でプロパティを高い値に設定することです。または、MSE 仕様をサポートするmoofには、MSE バッファーにフィードする最初のボックスにfirst_sample_flags_presetフラグが存在する必要があります。

于 2021-09-10T19:00:06.613 に答える