博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MPEG2-PS格式分析实例
阅读量:4041 次
发布时间:2019-05-24

本文共 2198 字,大约阅读时间需要 7 分钟。

一、 PS 包头格式

1、PS 包头格式

包起始码字段  pack_start_code 

值为'0000 0000 0000 00000000 0001 1011 1010' (0x000001BA)的位串,用来标志一个包的开始。

系统时钟参考字段  system_clock_reference_basesystem_clock_reference_extenstion 

系统时钟参考(SCR)分两部分编码的42位字段。第一部分system_clock_reference_base是一个长度为33位的字段;第二部分system_clock_reference_extenstion是一个长度为9位的字段。SCR字段指出了基本流中包含ESCR_base最后一位的字节到达节目目标解码器输入端的期望时间。

标记位字段  marker_bit 

1位字段,取值'1'。

节目复合速率字段  program_mux_rate 

一个22位整数,规定P-STD在包含该字段的包期间接收节目流的速率。其值以50字节/秒为单位。不允许取0值。该字段值在本标准中的节目多路复合流的不同包中取值可能不同。

包填充长度字段  pack_stuffing_length 

3位整数,规定该字段后填充字节的个数。

填充字节字段  stuffing_byte 

8位字段,取值恒为'1111 1111'。该字段能由编码器插入,例如为了满足通道的要求。它由解码器丢弃。在每个包标题中最多只允许有7个填充字节。

2、分析实例

结合上面的格式,分析图1.

图1

0x000001BA用来标志一个包的开始,从后面划线的ff到01表示填充字符,其他的分析见图2

图2

二、 PS map格式

1、格式说明

见图2-1

图2-1

分组起始码前缀字段  packet_start_code_prefix 

24位码。它和跟随其后的map_stream_id共同组成一个分组起始码以标志分组的开始。该字段是值为'0000 0000 0000 0000 0000 0001' (0x000001)的位串。

映射流标识字段  map_stream_id 

8位字段,值为0xBC。

节目流映射长度字段  program_stream_map_length 

16位字段。指示紧跟在该字段后的program_stream_map中的字节数。该字段的最大值为1018(0x3FA)。

当前下一个指示符字段  current_next_indicator 

1位字段。置'1'时表示传送的节目流映射当前是可用的。置'0'时表示传送的节目流映射还不可用,但它将是下一个生效的表。

节目流映射版本字段  program_stream_map_version 

5位字段,表示整个节目流映射的版本号。一旦节目流映射的定义发生变化,该字段将递增1,并对32取模。在current_next_indicator为'1'时,该字段应该是当前适用的节目流映射的版本号;在current_next_indicator为'0'时,该字段应该是下一个适用的节目流映射的版本号。

节目流信息长度字段  program_stream_info_length 

16位字段,指出紧跟在该字段后的描述符的总长度。

标记位字段  marker_bit 

1位字段,取值为'1'。

基本流映射长度字段  elementary_stream_map_length 

16位字段,指出在该节目流映射中的所有基本流信息的字节长度。它包括stream_type、elementary_stream_id和elementary_stream_info_length字段。

流类型字段  stream_type 

8位字段,根据表2-29规定了流的类型。该字段只能标志包含在PES分组中的基本流且取值不能为0x05。

基本流标识字段  elementary_stream_id 

8位字段,指出该基本流所在PES分组的PES分组标题中stream_id字段的值。

基本流信息长度字段  elmentary_stream_info_length 

16位字段,指出紧跟在该字段后的描述符的字节长度。

CRC 32字段  CRC_32 

32位字段。

2、实例分析

分析见图2-2

图2-2

0x000001表示分组起始码前缀字段 packet_start_code_prefix, 0xBC表示映射流标识字段  map_stream_id

①表示节目流映射长度字段 program_stream_map_length

②表示节目流信息长度字段 program_stream_info_length

③表示基本流映射长度字段 elementary_stream_map_length

④表示流类型字段  stream_type,几个常用值:

a)  MPEG-4视频流:  0x10;

b)  H.264视频流:   0x1B;

c)  SVAC视频流:    0x80;

d)  G.711音频流:   0x90;

e)  G.722.1音频流: 0x92;

f)  G.723.1音频流: 0x93;

g)  G.729音频流:   0x99;

h)  SVAC音频流:    0x9B。 

⑤表示基本流标识字段  elementary_stream_id , 常见值见图2-3

图2-3

其他分析见下图

你可能感兴趣的文章
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
retext出现Could not parse file contents, check if you have the necessary module installed解决方案
查看>>
Matlab与CUDA C的混合编程配置出现的问题及解决方案
查看>>