dvboverip详解.doc
《dvboverip详解.doc》由会员分享,可在线阅读,更多相关《dvboverip详解.doc(14页珍藏版)》请在课桌文档上搜索。
1、dvb over ip详解TS系统解码11TS流的容21.1ES21.2PES21.3TS42TS流的解码过程只考虑本地文件,解码只涉及到系统层打包的解码,不涉及到编码的解码52.1PAT解码:52.2PMT解码62.3音视频解码63TS流解码73.1总用例图73.2各解码类的UML图83.2.1解码主类83.2.2事件管理类93.2.3各类包解析的关系图103.2.4输入输出类113.2.5解析PAT、PMT、私有数据等123.2.6解析TS 包133.2.7解析PES包143.2.8PCR时钟类153.2.9CRC校验类153.3解码流程图163.3.1TS包解析流程图163.3.2Sec
2、tion解码流程图173.3.3PES解码流程图184TS流合成编码194.1各编码类的UML图194.1.1编码主类194.1.2合成各类之间的关系204.2编码主要流程214.2.1TS编码流程图214.2.2负载pes、section打包过程22附表一:23附表二:251 TS流的容TS-PES-ES-NALESAn elementary stream (ES) is defined by MPEG munication protocol is usually the output of an audio or video encoder.PESallows an Elementary
3、stream to be divided into packets.图一:PES构造图PES构造各字段的具体含义见附表一。由图一可见,1个PES包是由、ES特有信息和包数据3个局部组成。由于和ES特有信息二者可合成1个数据头,所以可认为1个PES包是由数据头和包数据有效载荷两个局部组成的。由起始码前缀、数据流识别及PES包长信息3局部构成。包起始码前缀是用23个连续0和1个1构成的,用于表示有用信息种类的数据流识别,是1个8 bit的整数。由二者合成1个专用的包起始码,可用于识别数据包所属数据流视频,音频,或其它的性质及序号。例如:比特序1 1 0 是为的MPEG-2音频数据流; 比特序1 1
4、 1 0 是为的MPEG-2视频数据流。PES包长用于包长识别,说明在此字段后的字节数。如,PES包长识别为2 B ,即28 = 16 bit字宽,包总长为216-1=65535 B,分给数据头9 B6 B + ES特有信息3 B ,可变长度的包数据最大容量为65526 B。尽管PES包最大长度可达216 -1=65535 BByte,但在通常的情况下是组成ES的假设干个AU中的由头部和编码数据两局部组成的1个AU长度。1个AU相当于编码的1幅视频图像或1个音频帧,参见图一右上角从ES到PES的示意图。也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样
5、。ES特有信息是由PES识别标志、PES长信息、信息区和用于调整信息区可变包长的填充字节4局部组成的PES包控制信息。其中,PES识别标志由12个局部组成:PES加扰控制信息、PES优先级别指示、数据适配定位指示符、有否指示、原版或拷贝指示、有否显示时间标记PTS-Presentation Time Stamp/解码时间标记(DTS-Decode Time Stamp)标志、PES有否根本流时钟基准(ESCR-Elementary Stream Clock Reference)信息标志、PES有否根本流速率信息标志、有否数字存储媒体DSM特技方式信息标志、有否附加的拷贝信息标志、PES有否循环
6、冗余校验CRC-Cyclic Redundancy Check信息标志、有否PES扩展标志。有扩展标志,说明还存在其它信息。如,在有传输误码时,通过数据包计数器,使接收端能以准确的数据恢复数据流,或借助计数器状态,识别出传输时是否有数据包丧失。其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。因为,PTS说明显示单元出现在系统目标解码器STD-System Target Decoder的时间, DTS说明将存取单元全部字节从STD的ES解码缓存器移走的时刻。视频编码图像帧次序为I1P4B2B3P7B5B6I10B8B9的ES,参加PTS/DTS后,打
7、包成一个个视频PES包。每个PES包都有一个,用于定义PES的数据容,提供定时资料。每个I、P、B帧的都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟重新排序后再显示,一定要分别标明PTS和DTS。例如,解码器输入的图像帧次序为I1P4B2B3P7B5B6I10B8B9,依解码器输出的帧次序,应该P4比B2、B3在先,但显示时P4一定要比B2、B3在后,即P4要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1B2B3P4B5B6P7B8B9I10。显然,PTS
8、/DTS标志说明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开场解码或显示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。TSTransport stream将具有共同时间基准或者具有独立时间基准的一个或者多个PES组成的单一数据流。图二:TS包构造TS构造各字段的具体含义见附表二。由图二可见,TS包由、自适应区和包数据3局部组成。每个包长度为固定的188 B,长度占4 B,自适应区和包数据长度占184 B。184 B为有用信息空间,用于传送已编码的视音频数据流。当节目时钟基准PCR-Program Clock Refer
9、ence存在时,还包括可变长度的自适应区,的长度就会大于4 B。考虑到与通信的关系,整个传输包固定长度应相当于4个ATM包。考虑到加密是按照8 B顺序加扰的,代表有用信息的自适应区和包数据的长度应该是8 B的整数倍,即自适应区和包数据为238 B =184 B。 TS包的由如下列图的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别PID-Packet Identification、传输加扰控制、自适应区控制和连续计数器8个局部组成。其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit 的
10、误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输优先,是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;传输加扰控制,可指示数据包容是否加扰,但和自适应区永远不加扰;自适应区控制,用2 bit表示有否自适应区,即01表示有有用信息无自适应区,10表示无有用信息有自适应区,11表示有有用信息有自适应区,00无定义;连续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丧失及包传送顺序错误。显然,对TS包具有同步、识别、检错及加密功能。 TS包自适应区由自适应区长、各种标志指示符、
11、与插入标志有关的信息和填充数据4局部组成。其中标志局部由连续指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个局部组成。重要的是标志局部的PCR字段,可给编解码器的27MHz时钟提供同步资料,进展同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,假设不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不一样,使直接从压缩编码图像数据的开场局部获取时钟信息成为不可能。为此,选择了*些而非全部TS包的自适应区来传送定时信息。
12、于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保存一小局部有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。2 TS流的解码过程只考虑本地文件,解码只涉及到系统层打包的解码,不涉及到编码的解码TS流的根本解码过程:PAT节目关联表-PMT节目映射表-PES音频、视频包
13、。首先,从PAT获取TS流中所有节目映射表.然后,从节目映射表中获取每个节目本设计为本地文件,只含有一个PMT数据视频和音频的PID。最后,根据传输过来的数据PID对视频数据和音频数据进展系统层复用解码。系统层复用解码:循环:TS-PES-ES。PAT解码:PAT 表携带以下信息:1TS 流ID - transport_stream_id,该ID标志唯一的流ID 。2节目频道号- program_number,该标志TS流中的一个频道, 该频道可以包含很多的节目(即可以包含多个Video PID 和Audio PID)3PMT 的PID- program_map_PID,表示本频道使用的哪个P
14、ID做为PMT 的,因为PID可以有很多的频道, 因此DVB规定PMT 的PID 可以由用户自己定义PMT解码PMT 表中包含的数据如下:1 当前频道中包含的所有Video 数据的PID2 当前频道中包含的所有Audio 数据的PID3 和当前频道关联在一起的其他数据的PID(如数字播送,数据通讯等使用的PID)音视频解码音视频解码的数据如下:1 根据音频PID解码音频数据到缓存区2 根据视频PID解码音频数据到缓存区3 和当前频道关联在一起的其他数据放到数据区中3 TS流解码总用例图Decoder 首先调用事件管理器注册各类事件事件类型见3.2.2,然后调用read_packet函数读取指定
15、文件中的TS包进展分析,根据PID值不同分别对TS进展不同的处理。Parse_PAT/PMT/._packet把PAT(注:PAT的PID为0)和PMT的携带的相关节目流PID的信息包括视频,音频,私有数据等存入Directory中,之后Parse_ts_packet通过Directory中提供的PID信号分别对不同的TS分别处理。各解码类的UML图3.1.1 解码主类The Decoder object manages such global information as the Network Table pid value, the current packet number and t
16、he number of programs and streams per program (as represented in the Directory structure)。主要函数介绍:read_packet:Called to read a new transport packet。install_dir (Directory*):install Directory, Directory是一个节目单比方卫视,星空卫视,卫视,CCTV。install_prog (Program*):install program(如卫视) to Directory。install_netpid:表示网
17、络信号的来源,当这个更新时,需要重新安装目录。install_prog_on_current_list安装节目到当前列表。install_prog_on_new_list安装节目到新的列表。3.1.2 事件管理类typedef void (*Callback)(EventType, void*, void*):回调函数模板。void Register (EventType t, Callback f, void* d):注册事件。void Trigger (EventType, void*):触发事件。3.1.3 各类包解析的关系图Consumer :connect (InputPort*):
18、连接到输入接口。set_cstate、get_cstate表示设置和获取状态。Sectionconsumer:read_partial表示读取TS的payload.。read_header_a、read_header_b表示读取负载的头局部。read_section根据读取的负载,更新节目。各个子类分别实现。PES同上。3.1.4 输入输出类按要求从缓冲区中读入规定的位,或者字节数。比方函数read_bit ()表示从缓冲区中读入一个bit的数据注意缓冲区中以byte对齐,读入时生成CRC。所有从缓冲区读出数据的方式bitbytenbits基函数都是这个。函数read_byte从缓冲区读取一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dvboverip 详解

链接地址:https://www.desk33.com/p-14867.html