2012-08-08 26 views
5

我有FLV流生成問題。我開發了DVR系統,它應該能夠以FLV格式流式傳輸視頻(在Actionscript NetStream上播放)。我從原始H264 NAL單元(0x00 0x00 0x00 0x01)接收編碼器的視頻,我也可以識別編碼的幀IDR或非IDR。如何從Actionscript NetStream可以播放的原始h264生成FLV流?

我的解決方案來創建FLV流(基於Adobe規格:視頻文件格式規範第10版)是:

  1. 等待IDR幀;
  2. 放FLV頭
  3. 放PrevTagSize(0)
  4. 放FLV標籤與視頻標籤可視數據與AVCVIDEODATA
  5. 放PrevTagSize
  6. 重複步驟4,5直到流的結束。

流看起來不錯,並且可以通過ffplay時,MPlayer,VLC等 播放,但基於的ActionScript的NetStream不受播放器上播放。

所以,我得到的原始數據H264並將其轉換使用的ffmpeg爲FLV:

的ffmpeg -f H264 -i d1.h264 -vcodec複製-f FLV d1.flv

和嘗試將flv的my和ffmpeg進行比較。

首先,我看到ffmpeg會在FLV標頭後立即添加AVC序列標頭。 我已經開始做同樣的事情,但是NetStream仍然不支持我的流,而另一位玩家也不再玩它了。

好吧,然後我繼續比較flv的。 現在我看到ffmpeg的編碼FLV中的NAL單元標題有所改變,但我無法理解這些更改的含義。我讀了很多規格,但沒有什麼幫助。 有人可以澄清我嗎?

佛例如我的NAL單元看起來如此: 00 00 00 01 XX XX ... - 對於所有單元

的FFmpeg的NAL: 00 00 [14 BA] 61 ... 9A - 非IDR(二字節變量) 00 00 [7A 02] 65 88 ... - IDR(兩個字節可變) 00 00 00 40 06 05 ... - SEI

是否添加了一些計數器或其他內容?

將高興地看到任何想法,鏈接等

+0

我工作的一個FLV複用器也不知道如何存儲使用x264_encoder_encode編碼時得到的x264_nal_t *數據。你的流是否正常工作?你能解釋一下你的方法嗎? – pollux 2012-10-11 20:07:15

回答

1

有兩種常見的H.264碼流格式的包裝。

  1. 附件B中開始碼:00 00 01
  2. MP4是一個長度爲前綴XX XX XX XX

你正在創建附錄B,但好像你需要MP4封裝格式(長度前綴)爲FLV。 你必須刪除(00)00 00 01並添加長度作爲前綴。

3

嘗試使用下面的命令做的工作:

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

你會得到一個VLC播放的.h264文件,所有NAL則開始00 00 00 01