mpeg4 vol header文件格式分析

轉自:http://blog.csdn.net/lius1984/archive/2009/06/04/4241856.aspx

最近在做一個3gp/mp4播放器, 用ffmpeg從3gp/mp4文件中demux出mpeg4的raw data,  無法直接用來解碼,需要在第一幀之前加上vol header.   我照搬了ffmpeg的encode_vol_header的實現,很多文件(尤其是QVGA尺寸的文件)解碼不了。

  最後得知,這個vol根本不用自己生成,只要把avctx->extradata裏面的長度爲avctx->extradata_size的數據copy到你的第一幀前面就可以了。
  雖然ffmpeg有現成的vol header,還是順便總結一下mpeg4 sp的文件格式。參考文檔 《mpeg-4-14496-2》6.2節。   用UE打開一個.m4v文件,開頭44字節就是vol header. 比特流的句法如下:
  a) 全局配置信息,表徵解碼器準備解碼的整個視頻對象組  VisualObjectSequence()
  b) 對象配置信息,表徵單個視頻對象。VisualObject().
  c) 對象層配置信息, 表徵一個視頻對象的層 VideoObjectLayer().
  d) ES流數據,包含了整個視頻對象層裏的數據。

  相關代碼在ffmpeg/libavcodec/h263.c的裏mpeg4_encode_visual_object_header和mpeg4_encode_vol_header。有幾個點需要注意。

  -先寫vos和vo header, vos的起始碼是0x1B0, vo的起始碼是0x1B5
  -profile_and_level_indication的值,simple profile一般值爲0x3
  - vol的開頭是00 00 01 00 00 00 0120
  -vol_width和vol_height與圖像尺寸一致,從=(*FormatCtx).streams[videoStream]->codec裏可得。
  - 不到8位的需補零

順便推薦一個mp4ui的軟件,他可以從3GP和MP4文件中DUMP出音頻和視頻,很好用哦。 而且是開源的,對分析3GP格式很有幫助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章