5

FLVストリームの生成に問題があります。私はDVRシステムを開発しました。FLV形式でビデオをストリーミングできるはずです(Actionscript NetStreamで再生するため)。エンコーダーから生のH264NALユニット(0x00 0x00 0x00 0x01)でビデオを受信します。また、エンコードされたフレームIDRまたは非IDRを認識できます。

FLVストリームを作成するための私の解決策(Adobe仕様:ビデオファイル形式仕様バージョン10に基づく)は次のとおりです。

  1. IDRフレームを待ちます。
  2. FLVヘッダーを置く
  3. PrevTagSize(0)を置く
  4. FLVタグとビデオタグVIDEODATAとAVCVIDEODATAを配置します
  5. PrevTagSizeを置きます
  6. ストリーミングが終了するまで、手順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

カウンターなどはありますか?

アイデアやリンクなどを見て喜んでいます。

4

2 に答える 2

3

次のコマンドを使用して作業を行ってみてください。

ffmpeg -y -i test.flv -vcodec copy -vbsf h264_mp4toannexb test.h264

vlcで再生可能な.h264ファイルを取得します。すべてのNALは00000001で始まります。

于 2012-10-24T10:45:07.960 に答える
2

2つの一般的なH.264ビットストリームパッキングフォーマットがあります。

  1. 付録Bには開始コードが含まれています:00 00 01
  2. MP4は、長さのプレフィックスがXX XX XX XX

別館Bを作成していますが、FLVにはmp4パッキング形式(長さのプレフィックス)が必要なようです。(00)00 00 01を削除し、プレフィックスとして長さを追加する必要があります。

于 2012-08-20T14:33:01.120 に答える