视频文件头解析--mpeg-个人对mpg文件结构的理解

1、一个mpg文件可以只包含视频内容,那么文件开头以0x000001B3作为起始码

2、以0x000001BA 开头,就意味着同时包含音频数据和视频数据,如果没有音频数据,则以0x000001B3开头

3、一个mpg文件可以包含多个pack,每个pack的起始码都是0x000001BA ,pack没有结束码,一般遇到下一个0x000001BA 开头,就意味着此pack结束。

4、Pack头一般应该是14字节,4字节的开始码或者叫起始标志位,以0x000001BA或者0x000001B3作为起始码.然后紧跟着10字节的pack header,即pack头信息,这个头信息一般没有太多有用的内容,不解析。(Pack的具体组成件附件1,pack具体格式)

5、Pack由3部分组成pack_header、system_header(具体长度为head_length+4(起始码4B)+2(head_length 2B))、PES_packets(多个)。其中system_header当且仅当pack是第一个数据包是才存在。

6、PES_packets的结构:

a)   4字节的起始码,一般是3字节包头起始码前缀的0x000001+1字节的数据流识别stream_id。

b)   2字节的pes包长

c)   紧接着是不定长的基本流特有信息,其中包含:1)2字节的pes包头识别标志,或者叫控制标志位,主要内容是pes加扰控制、优先级、版权以及PTS\DTS标志等(有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在)。2)1字节的PES扩展数据长度,即pes包头长。3)0-46B的信息区。4)最多256字节的填充字节。

d)   最大长度为65526(2^16-1-6-3)字节的包数据。

7、根据PES_packets结构中的前4字节的起始码,可以判断当前pes包里面的数据的具体内容是什么。比如:

a)   0x000001E0   -  0x000001EF:   Video   PES  start   code();

b)   0x000001C0   -  0x000001DF:   Audio   PES  start   code(ISO/IEC   13818-3  or   11172-3);

c)   0x000001BD:   Private  Stream(AC3)

8、关于video_pid、音、视频编码方式和文件类型:

a)如果起始码是0x000001B3,那么那么后面的pes数据是视频且为原始流,video_pid=0x01;video_codec=0x02;file_type=ES( Elementary Streams (原始流),对视频、音频信号及其他数据进行编码压缩后的数据流称为原始流).参看mpeg2标准13818-2视频部分文档。

b)如果起始码是0x000001E0-0x000001EF,即(stream_id>=0xe0)&&(stream_id<=0xef),那么后面的pes数据是视频,video_pid=stream_id;video_codec=0x02;file_type=mpg。

c)如果起始码是0x000001C0-0x000001DF,即((stream_id>=0xc0)&&(stream_id<=0xdf)),那么后面的pes数据为音频数据,audio_pid =stream_id;audio_codec= 0x04ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值