MPG(MPEG2 Program Stream)格式解析

参考自:MPEG2 Program Stream结构简单介绍
    MPEG-2 文件结构解析
    视频文件头解析–mpeg-个人对mpg文件结构的理解
    【Codecs系列】MPEG-2标准总结文档

1、MPG简介

mpg是一种常见的视频格式,mpeg标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。mpg有可能是基于MPEG-1(VCD)或MPEG-2(DVD)中的任一压缩标准出现的,mpeg标准的视频压缩编码技术主要利用了具有运动补偿的帧间压缩编码技术以减小时间冗余度,利用DCT技术以减小图像的空间冗余度,利用熵编码则在信息表示方面减小了统计冗余度。这几种技术的综合运用,大大增强了压缩性能。

下面将以一个mpg封装的MPEG2 Program Stream为例详细介绍该封装格式的结构。
在这里插入图片描述

2、MPEG2 Program Stream

MPEG2 Program Stream,即MPEG2-PS,与MPEG2-TS对应。MPEG2-PS是一种多路复用数字音频、视频等的封装容器。其分为MPEG-1和MPEG-2两部分。Program Stream将一个或多个分组但有共同的时间基准的基本数据流 (PES)合并成一个整体流。它是为可靠稳定的储存媒介如光盘而设计的。据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream)。TS流与PS流的区别在于TS流的包结构是固定长度的,而PS流的包结构是可变长度的。

Program Stream由一个或者多个基本数据流组成,而基本数据流由访问单元(Access Unit)组成。基本数据流的数据保存在PES Packet中。PES Packet由Packet header和Packet data组成。PES Packet又被嵌入到Program Stream packs中。

PES Packet以一个32比特的start code开始,这个start code用于标识该packet属于哪个stream。PES packet header可能包含PTS和DTS,以及其他的fields。

在Program Stream中,PES Packet被组织成packs。一个pack以一个pack header开始,然后是0个或者多个PES Packets。Pack header开始于一个32比特的start code,Pack header用于保存时间和码率信息。

2.1、MPEG-2 Program Stream整体结构

一个完整的MPEG-2文件就是一个PS流文件。

MPEG-2文件的构造格式如下图:
在这里插入图片描述
在这里插入图片描述
自己找个mpg文件打开,可以看到文件以0x0000 01B9结束(有些文件不标准没有),即MPEG_Program_end_code,之前有很多个0x0000 00BA字段,即为program pack的开始标志。

2.2、Program Stream的Pack层结构

program pack包的构造如下:
在这里插入图片描述
在这里插入图片描述
可以看出program pack由3部分组成:pack_header+system_header+PES_packets,其中system_header当且仅当pack是第一个数据包时才存在。

第 5 个byte的前两个比特reserved中,01表示为 MPEG2,如果为00,则表示为MPEG1。

pack_header: 起始地址:0x0000 0000(这个地址有可能因为文件不一样而不一样)

标志:0x00 0x00 0x01 0xBA(4B)
在这里插入图片描述

  • pack_start_code: 标识一个pack的开始,比特流串为’0000 0000 0000 0000 0000 0001 1011 1010’ (0x000001BA)。
  • system_clock_reference_base与system_clock_reference_extension: System Clock Reference(SCR)是一个42比特的field,分为两个部分。第一个部分是system_clock_reference_base,一个33比特的field,由MPEG-1与MPEG-2兼容共用ÿ
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值