FLVストリームの生成に問題があります。私はDVRシステムを開発しました。FLV形式でビデオをストリーミングできるはずです(Actionscript NetStreamで再生するため)。エンコーダーから生のH264NALユニット(0x00 0x00 0x00 0x01)でビデオを受信します。また、エンコードされたフレームIDRまたは非IDRを認識できます。
FLVストリームを作成するための私の解決策(Adobe仕様:ビデオファイル形式仕様バージョン10に基づく)は次のとおりです。
- IDRフレームを待ちます。
- FLVヘッダーを置く
- PrevTagSize(0)を置く
- FLVタグとビデオタグVIDEODATAとAVCVIDEODATAを配置します
- PrevTagSizeを置きます
- ストリーミングが終了するまで、手順4、5を繰り返します。
ストリームは見栄えがよく、ffplay、mplayer、vlcなどで再生できます。ただし、ActionscriptNetStreamに基づくプレーヤーでは再生できません。
だから、私は生のh264データを取得し、ffmpegを使用してそれをFLVに変換します:
ffmpeg -f h264 -i d1.h264 -vcodec copy -f flv d1.flv
そして、flvのmyとffmpegの両方を比較してみてください。
まず、ffmpegがFLVヘッダーの直後にAVCシーケンスヘッダーを追加していることがわかります。私は同じことを始めましたが、NetStreamはまだ私のストリームをサポートしておらず、他のプレイヤーもそれを再生しなくなりました。
わかりました、それから私はflvを比較し続けました。ffmpegのコード化されたFLVのNALユニットヘッダーが少し変更されたことがわかりましたが、変更の意味がわかりません。私は多くの仕様を読みましたが、何も役に立ちませんでした。誰かが私にこれを明確にすることができましたか?
たとえば、私のNALユニットは次のようになります。0000 00 01 XXXX...-すべてのユニット
FFmpeg NALs:00 00 [14 BA] 61 9A ...-非IDR(2バイト変数)00 00 [7A 02] 65 88 ... --IDR(2バイト変数)00 00 00 40 06 05...- SEI
カウンターなどはありますか?
アイデアやリンクなどを見て喜んでいます。