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

MPEG-2文件的构造格式如下图:

以一个实际的MPEG-2文件为例来分析一下PS流,MPEG-2文件:

http://download.csdn.net/source/212077

打开文件,可以看到文件以0x0000 01B9结束,即MPEG_Program_end_code,之前有很多个0x0000 00BA字段,即为program pack的开始标志,program pack包的构造如下:

可以看出program pack由3部分组成:pack_header+system_header+PES_packets,其中system_header当且仅当pack是第一个数据包时才存在。system_header和PES_packets构造如下:

对照文件内容,各字段值如下:

pack_header: 起始地址:0x0000 0000

Packet_start_code(4B):0x0000 01BA

'01'

SCR_base[32...30](3b):000

marker:1

SCR_base[29...15](15b):00 0000 0000 0010 1

marker:1

SCR_base[14...0](15b):00 0100 1000 0101 1

marker:1

SCR_externsion(9b):00 1111 101

marker:1

mutiplex_rate(22b):0000 0000 0101 0101 0001 01

marker:1

marker:1

reserved(5b):1111 1

stuffing_length(3b):000

system_header: 起始地址:0x0000 000e

                   system_head_start_code(4B):0x0000 01BB

head_length(2B):0x000C

marker:1

rate_bound(22b):000 0000 0010 1010 1000 101

marker:1

audio_bound(6b):0000 01

fixed_flag(1b):0

CSPS_flag(1b):0

system_audio_local_flag(1b):0

system_video_local_flag(1b):0

marker:1

video_bound(5b):0 0001

packet_rate_restriction_flag(1b):0

reserved(7b):111 1111

stream_id(1B):0xE0(E0~EF为视频ID)

'11'

P-STD_buffer_bound_scale(1b):1

P-STD_buffer_size_bound(13b):0 0000 0000 0001

stream_id(1B):0xC0(C0~DF为音频ID)

'11'

P-STD_buffer_bound_scale(1b):0

P-STD_buffer_size_bound(13b):0 0000 0100 1000

PES packet:起始地址:0x0000 0020

                   packet_start_code_prefix(3B):0x 00 00 01

stream_id(1B):0xBE(BE为Padding stream)

PES_packet_length(2B):0x07 DA,跳过该长度的填充字节,刚好为下一个pack的起始标志:0x000001BA

从0x0800地址开始为第二个pack包,该包的构造格式为pack_header+PES,分析如下:

pack_header: 起始地址:0x0000 0800

Packet_start_code(4B):0x0000 01BA

'01'

program_clock_reference_base(3b):000

marker:1

SCR_base(15b):00 0000 0000 0000 0

marker:1

SCR_base(15b):00 0001 1001 1001 1

marker:1

SCR_externsion(9b):00 0111 100

marker:1

mutiplex_rate(22b):0000 0000 0100 0110 0101 00

marker:1

marker:1

reserved(5b):1111 1

stuffing_length(3b):000

PES packet:起始地址:0x0000 080e

                   packet_start_code_prefix(3B):0x 00 00 01

stream_id(1B):0xE0(视频)

PES_packet_length(2B):0x07 EC,跳过该长度,到达0x1000地址单元,为下一个pack的起始标志:0x000001BA

'10'

scrambling_control(2b):00

priority(1b):0

alignment(1b):0

copyright(1b):0

original(1b):0

PTS_DTS_flag(2b):11,该标志不能为01

ESCR_flag(1b):0

ES_rate_flag(1b):0

DSM_trick_mode_flag(1b):0

additional_copy_info_flag(1b):0

CRC_flag(1b):0

extension_flag(1b):0

PES_header_data_length(1B):0x0A

'0011'

PTS[32...30](3b):000,PTS全称为presentation time stamp

marker:1

PTS[29...15](15b):0000 0000 0000 000

marker:1

PTS[14...0](15b):1010 1001 1111 001

marker:1

'0001'

DTS[32...30](3b):000,DTS全称为dedoding time stamp

marker:1

DTS[29...15](15b):0000 0000 0000 000

marker:1

DTS[14...0](15b):1000 1100 1010 000

marker:1

因为除了PTS_DTS_flag为11外,其余6个标志都为0,所以直接进入视频序列:Video Sequence,其结构定义如下:

图中sequence_header,sequence entension等子内容定义如下:

对各字段分析如下:

sequence header:起始地址:0x0000 0821

                sequence_header_code(4B):0x 0000 01B3

horizontal_size(12b):0010 0100 0000

vertical_size(12b):0001 1110 0000

aspect_ratio_info(4b):0010

frame_rate(4b):0001

bit_rate(18b):0001 0110 1111 0011 00

marker:1

VBV_buffer_size(10b):0 0011 1000 0

constrained(1b):0

load_intra_Q_matrix(1b):0

sequence extension:起始地址:0x0000 082d;如果有这一项说明是MPEG-2文件,否则为MPEG-1文件

extension_start_code(4B):0x0000 01B5

start_code_identifer(4b):0001

profile_level_escape(1b):0

profile_level(7b):100 1000

progressive(1b):1

chroma(2b):01

horiz_extension(2b):00

vertical_extension(2b):00

接下来的数据是0x0000 01B8,说明该序列中没有extension&user data[i](extension data的开始符为0x0000 01B5,user data的开始符为0x0000 01B2),接下来的内容为Group of pictures header。

             Group_of_pictures_header:起始地址:0x0000 0837

group_start_code(4B):0x0000 01B8

time_code(25b):0000 0000 0000 1000 0000 0000 0

closed_gop(1b):0

broken_link(1b):0

             extension & user data[1]:无

             picture header: 起始地址:0x0000 083F

picture_start_code(4B):0x0000 0100

temporal_reference(10b):0000 0000 0000 00

picture_coding_type(3b):00 1

vbv_delay(16b):111 1111 1111 1111 1

extra_bit_picture(1b):0

             picture coding extension:起始地址:0x0000 0847

extension_start_code(4B):0x0000 01B5

extension_start_code_identifier(4b):1000

f_code[0][0](4b):1111,forward horizontal

f_code[0][1](4b):1111,forward vertical

f_code[1][0](4b):1111,backward horizontal

f_code[1][1](4b):1111,backward vertical

intra_dc_presison(2b):00

picture_structure(2b):11

top_field_first(1b):0

frame_pred_frame_dct(1b):1

concealment_motion_vectors(1b):0

q_scale_type(1b):0

intra_vlc_format(1b):0

alternate_scan(1b):0

repeat_first_field(1b):0

chroma_420_type(1b):1

progressive_frame(1b):1

composite_display_flag(1b):0

extension & user data[2]:无

             picture data: 起始地址:0x0000 0850,picture data分为多个slice片,而每个slice又分为多个Microblock,Microblock继续分为Block块。

13818-2中定义的picture_data()如下:

picture_data() {

do {

slice()

} while ( nextbits() == slice_start_code )

next_start_code()

}

Slice
                slice() {

slice_start_code                                                32

if (vertical_size > 2800)

slice_vertical_position_extension           3

if (<sequence_scalable_extension() is present in the bitstream>) {

if (scalable_mode == “data partitioning” )

priority_breakpoint                              7

}

quantiser_scale_code                                       5

if ( nextbits() == ‘1’ ) {

intra_slice_flag                                              1

intra_slice                                                       1

reserved_bits                                                  7

while ( nextbits() == ‘1’ ) {

extra_bit_slice /* with the value ‘1*/   1

extra_information_slice                          8

}

}

extra_bit_slice /* with the value ‘0’ */          1

do {

macroblock()

} while ( nextbits() != ‘000 0000 0000 0000 0000 0000’ )

next_start_code()

}

从文件内容分析,从0x0000 0850单元为第一个slice(0000 0101),共有7个slice,第7个slice的起始单元为0x0000  fe04,紧接着开始下一个packe,直到0x0000 3000才开始第一个音频pack包,后面的数据视频pack和音频数据成交叉状态。文件结尾标志为0x0000 01B9。

MPEG-2 PS流相关推荐

  1. MPEG PS流格式

    MPEG PS流格式 1. PS包头 图1 1) Pack start code:包起始码字段,值为0x000001BA的位串,用来标志一个包的开始 2) SCR base,SCR extenstio ...

  2. ffmpeg添加mpeg ps流的pcm的解码支持

    ffmpeg原本不支持mpeg ps流,原因有两个.首先在编码时,ffmpeg没有在流中写入psm头:其次,在解码时,只在读文件头的时候判断了流的类型,而ps流中,流类型是在psm头中的,这样ffmp ...

  3. RTP协议全解(H264码流和PS流)

    1 视频编码的原理 1.1 一个图像或者一个视频序列进行压缩,产生码流. 对图像的处理即是:帧内预测编码 其预测值P,是由已编码的图像做参考,经运动补偿得到的.预测图像P和当前帧Fn相减,得到两图像的 ...

  4. 视频知识基础:什么是TS、PS流?

    在MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流(TS:TransportStream). 据传输媒 ...

  5. PS流详解(载荷H264)

    目录 PS简介 标准结构 标准H264流结构 定长音频帧和其他流式私有数据的结构 PS流封装标准 PSH结构 PES包结构 PSM包结构体 元素流 PS 封装规则 H264元素流封装规则 音频元素流封 ...

  6. H264和音频流打包成PS流 (MPEG2-PS)

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80736848 [本系列相关文章] H26 ...

  7. 视频知识基础:什么是TS、PS流? .

    在MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流(TS:TransportStream). 据传输媒 ...

  8. 音视频学习(十)——ps流

    1. 简介 PS的封装格式需要支持MPEG2/MPEG4/H.264等视频和MPEG系列的音频,支持在多个层次加入私有数据,方便解码.拖动和加入延时,同时考虑到标准的PS.TS 和 RTP 封装方式间 ...

  9. TS流概述(ES流-基本流,PES流-打包基本码流,PS流-节目流,TS流-传输流)

    一.TS流概述 ES流(Elementary Stream,基本流):数字电视各组成部分编码后所形成的直接表示基本元素内容的流,包含视频.音频或数据的连续码流. PES流(Paketized Elem ...

  10. RTP协议全解(H264码流和PS流)——看完这篇可以毕业

    http://blog.csdn.net/bytxl/article/details/50395427 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1 视频编码的原理 1. ...

最新文章

  1. [Win] 利用Memory DC抽取EXE的图标并保存为BMP文件
  2. spring事务配置
  3. AB1601编译优化参数引发的问题
  4. 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字
  5. pytorch中的pre-train函数模型引用及修改(增减网络层,修改某层参数等)
  6. 初等数论及其应用——中国剩余定理
  7. UILabel 的属性设置
  8. 【Matplotlib】【Python】如何使用matplotlib绘制散点图
  9. SAP License:FI中的表连接与应用
  10. php文件流播放拖动,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器...
  11. pdf做成翻页电子书_软网推荐:文档秒变3D翻页电子书
  12. 浅谈A*算法如何演变为rrt算法
  13. 人际网络营销与网站运营、策划、推广一体化结合
  14. 重要的GMaps对象与接口
  15. Windows安全设置-当前的安全设置不允许从该位置下载文件
  16. android pppd流程,一种基于PPPD实现PPP‑Server功能的通信模块及其实现方法与流程...
  17. 鸿蒙生态箐英班,华为联合西北工业大学开设 “鸿蒙生态菁英班”: 50 人左右,锁定终端软件领域...
  18. MQ集群(rabbitMQ)
  19. 解决安装VS2022时,出现未能安装包“Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86
  20. MEncoder 转码 psp 视频

热门文章

  1. 方便实用的串口调试工具/串口调试助手/串口精灵 (工具一)
  2. 实战项目一、安居客(北京) 二手房抓取房源信息
  3. Securing Wireless LANs with PEAP and Passwords
  4. 复选框判断是否选中及获取值
  5. 数据分析师的任职要求——阿里巴巴
  6. [再寄小读者之数学篇](2014-05-30 对数不等式)
  7. windows环境下 ipfs的搭建与使用
  8. 中国象棋局面识别 -3. 棋谱字符串生成
  9. 【自主无人机】无人机领域中知名课题组介绍 - 转自阿木实验室
  10. 注销consul节点