avformat ライブラリと HTML5 ビデオと MSE を使用して、断片化された基本的な mp4ブロードキャスト プログラムを実行したいと考えていました。
これはライブ ストリームで、avformat を使用して h264 データを mp4 フラグメントにコピーします。
ストリームにアタッチするクライアントの基本的な図を次に示します。
だから、言葉で:
- C1J: 最初のクライアントが参加:
- avformat プロセスの開始
- ftyp、moov、moof、mdat ボックスが Client1 に提供されます
- ftyp と moov アトムは両方とも、後で再利用するために保存されます
- 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 ビデオは気に入らないと思いますが、それが有効であるための要件は他にもあります。