教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 资格考试 >

数字电视业务PSISI学习系列(2)

来源:网络收集 时间:2026-02-27
导读: 01000111 00000111 11100101 00010010 请对照上面的PACKET_HEADER结构: typedef struct { unsigned sync_byte:8; unsigned transport_error_indicator:1; unsigned payload_unit_start_indicator:1; unsigned trans

01000111 00000111 11100101 00010010

请对照上面的PACKET_HEADER结构:

typedef struct

{

unsigned sync_byte:8;

unsigned transport_error_indicator:1;

unsigned payload_unit_start_indicator:1;

unsigned transport_priority:1;

unsigned PID:13;

unsigned transport_scrambling_control:2;

unsigned adaptation_field_control:2;

unsigned continuity_counter:4;

}PACKET_HEADER;

那么对照一下,我们可以发现:

sync_byte=01000111,就是0x47,这是DVB TS规定的同步字节,固定是0x47.

transport_error_indicator=0,表示当前包没有发生传输错误. payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

transport_priority=0,表示当前包是低优先级.

PID=00111 11100101即0x07e5,这代表是什么呢,暂时还不知道(实际上是Video PID,参考下图)

transport_scrambling_control=00,表示节目没有加密

adaptation_field_control=01即0x01,具体含义请参考ISO13818-1

continuity_counte=0010即0x02,表示当前传送的相同类型的包是第3个

依此类推,再看一下第二个包"0x47 0x07 0xe5 0x13",2进制是01000111 00000111 11100101 00010011

sync_byte=01000111,就是0x47,这是DVB TS规定的同步字节,固定是0x47.

transport_error_indicator=0,表示当前包没有发生传输错误. payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

transport_priority=0,表示当前包是低优先级.

PID=00111 11100101即0x07e5,这代表是什么呢,暂时还不知道(实际上是Video PID,参考下图)

transport_scrambling_control=00,表示节目没有加密

adaptation_field_control=01即0x01,具体含义请参考ISO13818-1

continuity_counte=0011即0x03,表示当前传送的相同类型的包是第4个(注意到了吧,以上两个包的PID都是0x07e5,所以这里的continuity_counte就递增一次)

第三个包是"0x47 0x07 0xf1 0x18",2

01000111 00000111 11110001 00011000.

sync_byte=01000111,就是0x47,这是DVB TS规定的同步字节,固定是0x47.

transport_error_indicator=0,表示当前包没有发生传输错误. payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

transport_priority=0,表示当前包是低优先级.

PID=00111 11100101即0x07f1,这代表是什么呢,暂时还不知道(实际上是Audio PID,参考下图)

transport_scrambling_control=00,表示节目没有加密

adaptation_field_control=01即0x01,具体含义请参考ISO13818-1

continuity_counte=1000即0x08,表示当前传送的相同类型的包是第9个

请看解码程序<<Seekfor MPEG-2 decoder>>读取该文件的结果: 进制是

上图我们可以发现,Taiwan-551.ts有一个节目叫"DIMO",它的Video PID是0x07e5,Audio PID是0x07e6

还有一个节目叫"Service 1",没有Video PID,它的Audio PID是0x07f1(说明是一个广播节目而非电视节目)

这个数据刚好和我们刚才的分析是吻合的.

但 是我想大家还有疑问,为什么0x07e5代表Video PID,0x07e6代表其中一个Audio PID呢?这就是刚才提到的,这是TS流在编码的 时候就分配好了的.但是,在解码的时候是怎么知道0x07e5就代表的是Video而不是Audio呢?这就是第三章的内容:DVB SI/PSI分析和 处理.

第三章 DVB SI/PSI分析和处理

SI是Specific Information的简称,PSI是program Specific Information.该机制允许DVB传送各种各样的讯息,比如节目名称,电视台名称,各种PID,私有信息,甚至单独传送数据实现数据通信等.这些功能的实现都归功于SI/PSI.

在DVB 标准中,定义了一个标准的PID用来实现SI/PSI.这些PID是系统保留的,因此DVB编码的时候并不会用这些PID做为Video PID或者 Audio PID或者其他PID.在一个简单的解复用程序中,只需要提供处理PAT,PMT表格的程序即可实现解复用,当然如果需要更友好的界面和实现 更

复杂的功能(如CA)则必须处理其他的SI表.在这里仅仅分析PAT,PMT,SDT表格,其他SI表格的分析,请参考ISO13818-1(MPEG-2系统层标准)和EN300468(DVB SI标准)文档.

DVB定义的SI保留的PID分别是:

上表格的PID就是DVB保留的PID,分配的其他PID一定不会占用这些PID.解复用程序需要使用到的表格只有PAT,PMT,SDT,而CA应用还需要使用CAT,EPG应用还需要使用NIT,EIT,TDT,TOT等表格.所以在需要解复用的时候,伪代码需要这样写:

void Process_Packet(unsigned char*buff)

{

int PID=GETPID(buff);

if(PID==0x0000) /*这是PAT表*/

{

Process_PAT(buff+4);/*处理PAT表*/

}

else if(PID==......)/*Video 或者Audio*/

{

}

else/*其他不支持的PID*/

{

printf("Unknown PID!");

}

}

所 有的表格都开始于Packet中的184字节的数据部分,但有的时候一个表格没有184字节,这时在Packet中就可能插入一些无效信息用来填充使整个 Packet依然保持是188字节.也可能用头信息中的payload_unit_start_indicator标志表格有个偏移位置(当 payload_unit_start_indicator=0表示表格数据直接从Packet区的第四个字节开始,否则表示有一个偏移量位置开始,具体 请参考ISO13818-1,第4字节到偏移量间的数据是系统填充的无效数据).

下面针对解复用程序详细分析一下PAT,PMT和SDT三类表格的格式.

PAT, Program Association Table,节目关联表

PAT表携带以下信息:

(1) TS流ID--- transport_stream_id,该ID标志唯一的流ID

(2) 节目频道号-- program_number,该号码标志TS流中的一个频道,该频道可以包含很多的节目(即可以包含多个Video PID和Audio PID)

(3) PMT的PID--- program_map_PID,表示本频道使用的哪个

PID做为PMT的PID,因为可以有很多的频道,因此DVB规定PMT的PID可以由用户自己定义.

PAT表定义如下:

各字段含义如下:

table_id:8 bits,标志本表格的类型,应该是0x00

section_syntax_indicator:1 bit,段语法标志,应该是'1'

'0':固定的'0',这是为了防止和ISO13818Video流格式中的控制字冲突而设置的.

Reserved:保留的2bits,保留位一般都是'0'

section_length:12bits的段大小,单位是Bytes.

transport_stream_id:16bits的当前流ID,DVB内唯一.(事实上很多都是自定义的TS ID)

version_number:5bits版本号码,标注当前节目的版本.这是个非常有用的参数,当检测到这个字段改变时,说明TS流中的节目已经变化了,程序必须重新搜索节目.

current_next_indicator:1bit:当前还是未来使用标志符,一般情况下为'0'

section_number:8bits当前段号码

last_section_number:8bits最后段号码(section_number和last_section_number的功能是当PAT内容>184字节时,PAT表会分成多个段(sections),解复用程序必须在全部接收完成

后再进行PAT的分析)

从for()开始,就是描述了当前流中的频道数目(N),每一个频 …… 此处隐藏:3714字,全部文档内容请下载后查看。喜欢就下载吧 ……

数字电视业务PSISI学习系列(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/89981.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)