JavaScript で MPEG-TS から変換して MP4 ファイル (h.264 ビデオと AAC オーディオを含む) を生成し、blob URL を介してブラウザーで再生します。Chrome ではすべて正常に動作し、開発者コンソールから BLOB の URL を取得してダウンロードすると、生成されたファイルは Windows Media Player でも正常に再生されます。ただし、Firefox は、それらが破損していると主張しています。
問題をオーディオ メタデータの ESDS ボックスの問題に絞り込みました。ソース MPEG-TS ファイルを他の手段 (ffmpeg など) で再パッケージ化し、生成したファイルを 16 進エディターで手動編集して、他のソフトウェアで生成された同等のファイルから ESDS ボックスに貼り付けると、Firefox は問題なく動作します。
ESDS ボックスを構築する私のコード。(そして、私は問題を追跡しています)
私はかなり単純な MPEG 仕様からの書き起こしプロセスによってそれを書き込もうとしましたが、それは私がそれを台無しにしなかったという保証はありません。Chrome と Windows Media は私のファイルを問題なく再生するので、それが実際に私のファイルのエラーであり、何らかの形で無視できるのか、それとも Firefox の問題なのかはわかりません。私は前者を疑っていますが、よくわかりません。
適切な ESDS ボックスを構築する方法について、誰かが何らかの洞察、またはおそらく簡単で理解しやすいリファレンスを手に入れましたか?
EDIT : 同じ入力ファイルに対して生成されたいくつかの異なる ESDS セクションを次に示します (16 進バイトとして、私の 16 進エディタからコピー):
私の:
00 00 00 27 65 73 64 73 00 00 00 00 03 22 00 00
02 04 14 40 15 00 00 00 00 00 3a f1 00 00 2d e6
05 02 12 10 06 01 02
mpegts :
00 00 00 33 65 73 64 73 00 00 00 00 03 80 80 80
22 00 02 00 04 80 80 80 14 40 15 00 00 00 00 00
00 00 00 00 00 00 05 80 80 80 02 12 10 06 80 80
80 01 02
ffmpeg:
00 00 00 2c 65 73 64 73 00 00 00 00 03 80 80 80
1b 00 02 00 04 80 80 80 0d 40 15 00 00 00 00 01
5f 42 00 00 00 00 06 80 80 80 01 02
奇妙なことに、以前はこれに気づきませんでした。Firefox は ffmpeg の出力でビデオを再生しますが、Firefox も Windows Media も実際にはサウンドを再生しません (Chrome は再生します)。ただし、Firefox と Windows Media はどちらも、mpegts からの出力を使用して音声付きのビデオを再生できます。私の場合、Chrome と Windows Media は音声付きのビデオで再生されますが、Firefox はまったく再生されず、ビデオが破損していると主張します。