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格式很有帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值