MPEG2学习笔记Word下载.docx

上传人:b****6 文档编号:20915360 上传时间:2023-01-26 格式:DOCX 页数:13 大小:169.84KB
下载 相关 举报
MPEG2学习笔记Word下载.docx_第1页
第1页 / 共13页
MPEG2学习笔记Word下载.docx_第2页
第2页 / 共13页
MPEG2学习笔记Word下载.docx_第3页
第3页 / 共13页
MPEG2学习笔记Word下载.docx_第4页
第4页 / 共13页
MPEG2学习笔记Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

MPEG2学习笔记Word下载.docx

《MPEG2学习笔记Word下载.docx》由会员分享,可在线阅读,更多相关《MPEG2学习笔记Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

MPEG2学习笔记Word下载.docx

PS适用于不容易发生错误的环境,以及涉及到软件处理的应用,典型应用如DVD光盘的文件存储

TS适用于容易发生错误的环境,典型应用就是数字电视信号的传输。

TS和PS是可以互相转换的,比如从TS中抽取一道节目的内容并产生有效的PS是可能。

(5)传输流分组和PES分组

原始流分成很多PES分组,保持串行顺序,一个PES分组只包含一个原始流的编码数据。

PES分组长度很大,最大可为64K字节。

PES分组分为“分组首部(header)”和“有效负载(payload)”。

“有效负载”指跟随在首部字节之后的字节。

首部的前4个字节构成分组的起始码,标识了该分组所属原始流的类型和ID号。

TS分组也就是传输流数据形成的数据包。

每个TS分组长度为188字节,包括“分组首部”和“有效负载,前4个字节是分组首部,包含了这个分组的一些信息。

有些情况下需要更多的信息时,需在后面添加“调整字段(adaptionfield)”。

两者之间的关系:

 

PES分组是插入到TS分组中的,每个PES分组首部的第一字节就是TS分组有效负载的第一字节。

一个PID值的TS分组只带有来自一个原始流的数据。

(5)PSI

全称ProgramSpecificInformation,意为节目专用信息。

传输流中是多路节目复用的,那么,怎么知道这些节目在传输流中的位置,区分属于不同节目呢?

所以就还需要一些附加信息,这就是PSI。

PSI也是插入到TS分组中的,它们的PID是特定值。

MPEG-2中规定了4个PSI,包括PAT(节目关联表),CAT(条件访问表),PMT(节目映射表),

NIT(网络信息表),这些PSI包含了进行多路解调和显示节目的必要的和足够的信

息。

具体的应用中可能包括更多的信息,比如DVB-T中定义了SDT(服务描述表),EIT(环境信息表),BAT(节目组相关表),TDT(时间日期表)等,统称为DVB-SI(服务信息)。

PSI的PID是特定的,含PSI的数据包必须周期性的出现在传输流中。

MPEG-2学习笔记

(二)

01

PMT(ProgramMapTable)节目映射表

PMT所在分组的PID由PAT指定,所以要先解出PAT,再解PMT

PMT中包含了属于同一节目的视频、音频和数据原始流的PID。

找到了PMT,解多路复用器就可找到一道节目对应的每个原始流的PID,再根据原始流

PID,去获取原始流。

如下图:

PID1和PID2分别对应某道节目的视频原始流和音频原始流

的PID。

PAT(ProgramAssociationTable)节目关联表

PAT所在分组的PID=0

PAT中列出了传输流中存在的节目流

l

PAT指定了传输流中每个节目对应PMT所在分组的PID

PAT的第一条数据指定了NIT所在分组的PID,其他数据指定了PMT所在分组的PID,如下图所示:

lCAT(ConditionalAccessTable)条件访问表

lCAT所在分组的PID=1

lCAT中列出了条件控制信息(ECM)和条件管理信息(EMM)所在分组的PID。

lCAT用于节目的加密和解密

lNIT(NetworkInformationTable)网络信息表

lNIT所在分组的PID由PAT指定

lNIT提供一组传输流的相关信息,以及于网络自身特性相关的信息,比如网络名称,传输参数(如频率,调制方式等)。

lNIT一般是解码器内部使用的数据,当然也可以做为EPG的一个显示数据提供给用户做为参考。

几种PSI之间的关系,如下图所示:

首先PAT中指定了传输流中所存在的节目,及每个节目对应的PMT的PID号。

比如Program1对应的PMT的PID=22,然后找到PID=22的TS分组,解出PMT,得到这个节目中包含的原始流的PID,再根据原始流的PID去找相应的TS分组,获取原始流的数据,然后就可以送入解码器解码了。

MPEG-2学习笔记(三)

02

二、数据结构

(1)TS分组

前面提到,TS分组由188个字节构成,其结构如下:

transport_packet()

sync_byte 

//8

transport_error_indicator 

//1

payload_unit_start_indicator 

transport_priority 

//1 

PID 

//13

transport_scrambling_control 

//2

adaptation_field_control 

 

//2

continuity_counter 

//4

if(adaptation_field_control=='

10'

||adaptation_field_control=='

11'

){ 

adaptation_field() 

01'

){ 

for(i=0;

i<

N;

i++){ 

data_byte 

//8

}

前面32bit的数据即TS分组首部,它指出了这个分组的属性。

sync_byte同步字节,固定为0x47,表示后面的是一个TS分组,当然,后面包中的数据是不会出现0x47的

transport_error_indicator传输错误标志位,一般传输错误的话就不会处理这个包了

payload_unit_start_indicator这个位功能有点复杂,字面意思是有效负载的开始标志,根据后面有效负载的内容不同功能也不同,后面用到的时候再说。

transport_priority传输优先级位,1表示高优先级,传输机制可能用到,解码好像用不着。

PID这个比较重要,指出了这个包的有效负载数据的类型,告诉我们这个包传输的是什么内容。

前面已经叙述过。

transport_scrambling_control加密标志位,表示TS分组有效负载的加密模式。

TS分组首部(也就是前面这32bit)是不应被加密的,00表示未加密。

adaption_field_control翻译为“调整字段控制”,表示TS分组首部后面是否跟随有调整字段和有效负载。

01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载。

为00的话解码器不进行处理。

空分组没有调整字段。

continuity_counter一个4bit的计数器,范围0-15,具有相同的PID的TS分组传输时每次加1,到15后清0。

不过,有些情况下是不计数的。

如下:

(1)TS分组无有效负载

(2)复制的TS分组和原分组这个值一样(3)后面讲到的一个标志discontinuity_indicator为1时

adaptation_field() 

调整字段的处理

有效负载的剩余部分,可能为PES分组,PSI,或一些自定义的数

MPEG-2学习笔记(四)

03

(2)PAT

PAT数据结构如下:

program_association_section(){

table_id 

//8

section_syntax_indicator 

'

0'

//1

reserved 

section_length 

//12

transport_stream_id 

//16

version_number 

//5

current_next_indicator 

section_number 

//8

last_section_number 

for(i=0;

i<

i++){

program_number 

reserved 

//3

if(program_number=='

){

network_PID 

//13

}

else{

program_map_PID 

CRC_32 

//32

table_id固定为0x00,标志是该表是PAT

section_syntax_indicator段语法标志位,固定为1

section_length 

表示这个字节后面有用的字节数,包括CRC32。

假如后面的字节加上前面的字节数少于188,后面会用0XFF填充。

假如这个数值比较大,则PAT会分成几部分来传输。

transport_stream_id 

该传输流的ID,区别于一个网络中其它多路复用的流。

version_number 

范围0-31,表示PAT的版本号,标注当前节目的版本.这是个非常有用的参数,当检测到这个字段改变时,说明TS流中的节目已经变化了,程序必须重新搜索节目.

current_next_indicator表示发送的PAT是当前有效还是下一个PAT有效。

section_number 

分段的号码。

PAT可能分为多段传输,第一段为00,以后每个分段

加1,最多可能有256个分段

last_section_number 

最后一个分段的号码

program_number节目号

网络信息表(NIT)的PID,网络信息表提供了该物理网络的一些信息,和电视台相关的。

节目号为0时对应的PID为network_PID

program_map_PID节目映射表的PID,节目号大于0时对应的PID,每个节目对应一个

CRC32校验码

上面program_number,network_PID,program_map_PID是循环出现的。

program_number等于0时对应network_PID,program_number等于其它值时对应program_map_PID。

举个例子,下述流为带PAT的TS分组:

4740001c0000b01513f6e700000000e0100001e0200002e0211a34b477ff…………..ff

其中红色的四个字节是TS分组头部,用数据结构解出首部,得到PID=0x00,表示为该分组的有效负载是PAT。

蓝色的00称为“指针域”----Pointerfield,表示了一个偏移量,即从后面第几个字节开始是PAT部分。

为00表示后面紧接着的就是PAT:

00b01513f6e700000000e0100001e0200002e0211a34b477

再利用PAT的数据结构解出PAT,得到如下信息:

---------------PATInformation-------------

table_id:

00

section_syntax_indicator:

01

section_length:

0015

transport_stream_id:

13f6

version_number:

13

current_next_indicator:

section_number:

last_section_number:

program_number:

0000

network_PID:

0010

0001

program_map_PID:

0020

0002

0021

CRC_32:

1a34b477

可以看出,此PAT只有一段,包含了三个节目,节目号0000对应于network_PID=0010,节目号0001对应于program_map_PID=0020,节目号0002对应于program_map_PID=0021,从实际的角度,我们应该把这三个节目号理解为三个频道,第一个频道中的内容是网络信息,第二、三个频道包含了节目信息。

在数字电视中,一个频道即对应于一个频点,如498MHZ,一个频道上可以有多个节目,后面的PMT即是告诉了我们某个频道中所有节目对应的PID。

于是现在就搜寻PID=0x0020的TS分组,即是频道2对应的PMT信息。

MPEG-2学习笔记(五)

04

(3)PMT

PMT数据结构如下:

TS_program_map_section(){

// 

1

2

12

program_number 

//16

//5

//3

PCR_PID 

//13

reserved4

program_info_length 

i++){

descriptor()

N1;

stream_type 

elementary_PID 

//4

ES_info_length 

N2;

//32

}

table_id固定为0x02,标志是该表是PMT

section_syntax_indicator

current_next_indicator以上四个字段意思和PAT相同,可参考上面解释

section_number 

以上两个字段意思和PAT相同,不过值都固定为0x00,我觉得这样的原因可能是因为PMT不需要有先后顺序,因为先定义哪个节目都是无所谓。

program_number节目号,表示该PMT对应的节目

PCR_PID 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1