ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:1.29MB ,
资源ID:6760117      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6760117.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(dvboverip详解.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

dvboverip详解.docx

1、dvboverip详解dvb over ip详解1 TS流的内容TS-PES-ES-NALESAn elementary stream (ES) is defined by MPEG communication protocol is usually the output of an audio or video encoder.PESallows an Elementary stream to be divided into packets.图一:PES结构图PES结构各字段的具体含义见附表一。由图一可见,1个PES包是由包头、ES特有信息和包数据3个部分组成。由于包头和ES特有信息二者可合

2、成1个数据头,所以可认为1个PES包是由数据头和包数据(有效载荷)两个部分组成的。包头由起始码前缀、数据流识别及PES包长信息3部分构成。包起始码前缀是用23个连续“0”和1个“1”构成的,用于表示有用信息种类的数据流识别,是1个8 bit的整数。由二者合成1个专用的包起始码,可用于识别数据包所属数据流(视频,音频,或其它)的性质及序号。例如:比特序1 1 0 是号码为的MPEG-2音频数据流; 比特序1 1 1 0 是号码为的MPEG-2视频数据流。PES包长用于包长识别,表明在此字段后的字节数。如,PES包长识别为2 B ,即28 = 16 bit字宽,包总长为216-1=65535 B,

3、分给数据头9 B(包头6 B + ES特有信息3 B ),可变长度的包数据最大容量为65526 B。尽管PES包最大长度可达(216 -1)=65535 B(Byte),但在通常的情况下是组成ES的若干个AU中的由头部和编码数据两部分组成的1个AU长度。1个AU相当于编码的1幅视频图像或1个音频帧,参见图一右上角从ES到PES的示意图。也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。ES特有信息是由PES包头识别标志、PES包头长信息、信息区和用于调整信息区可变包长的填充字节4部分组成的PES包控制信息。其中,PES包头识别标志由12个部分组成:P

4、ES加扰控制信息、PES优先级别指示、数据适配定位指示符、有否版权指示、原版或拷贝指示、有否显示时间标记(PTS-Presentation Time Stamp)/解码时间标记(DTS-Decode Time Stamp)标志、PES包头有否基本流时钟基准(ESCR-Elementary Stream Clock Reference)信息标志、PES包头有否基本流速率信息标志、有否数字存储媒体(DSM)特技方式信息标志、有否附加的拷贝信息标志、PES包头有否循环冗余校验(CRC-Cyclic Redundancy Check)信息标志、有否PES扩展标志。有扩展标志,表明还存在其它信息。如,在

5、有传输误码时,通过数据包计数器,使接收端能以准确的数据恢复数据流,或借助计数器状态,识别出传输时是否有数据包丢失。其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。因为,PTS表明显示单元出现在系统目标解码器(STD-System Target Decoder)的时间, DTS表明将存取单元全部字节从STD的ES解码缓存器移走的时刻。视频编码图像帧次序为I1P4B2B3P7B5B6I10B8B9的ES,加入PTS/DTS后,打包成一个个视频PES包。每个PES包都有一个包头,用于定义PES内的数据内容,提供定时资料。每个I、P、B帧的包头都有一个PT

6、S和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。例如,解码器输入的图像帧次序为I1P4B2B3P7B5B6I10B8B9,依解码器输出的帧次序,应该P4比B2、B3在先,但显示时P4一定要比B2、B3在后,即P4要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1B2B3P4B5B6P7B8B9I10。显然,PTS/DTS标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开始解

7、码或显示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。TSTransport stream将具有共同时间基准或者具有独立时间基准的一个或者多个PES组成的单一数据流。图二:TS包结构TS结构各字段的具体含义见附表二。由图二可见,TS包由包头、自适应区和包数据3部分组成。每个包长度为固定的188 B,包头长度占4 B,自适应区和包数据长度占184 B。184 B为有用信息空间,用于传送已编码的视音频数据流。当节目时钟基准(PCR-Program Clock Reference)存在时,包头还包括可变长度的自适应区,包头的长度就会大于4 B。考虑到与通信的关系,整个传

8、输包固定长度应相当于4个ATM包。考虑到加密是按照8 B顺序加扰的,代表有用信息的自适应区和包数据的长度应该是8 B的整数倍,即自适应区和包数据为238 B =184 B。 TS包的包头由如图所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-Packet Identification)、传输加扰控制、自适应区控制和连续计数器8个部分组成。其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输

9、优先,是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;传输加扰控制,可指示数据包内容是否加扰,但包头和自适应区永远不加扰;自适应区控制,用2 bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;连续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。 TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由

10、间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制

11、bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。2 TS流的解码过程(只考虑本地文件,解码只涉及到系统层打包的解码,不涉及到编码的解码)TS流的基本解码过程:PAT节目关联表-PMT节目映射表-PES音频、视频包。首先,从PAT获取TS流中所有节目映射表.然后,

12、从节目映射表中获取每个节目(本设计为本地文件,只含有一个PMT)数据(视频和音频)的PID。最后,根据传输过来的数据PID对视频数据和音频数据进行系统层复用解码。系统层复用解码:循环:TS-PES-ES。PAT解码: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 的,因为P

13、ID可以有很多的频道, 因此DVB规定PMT 的PID 可以由用户自己定义PMT解码PMT 表中包含的数据如下:(1) 当前频道中包含的所有Video 数据的PID(2) 当前频道中包含的所有Audio 数据的PID(3) 和当前频道关联在一起的其他数据的PID(如数字广播,数据通讯等使用的PID)音视频解码音视频解码的数据如下:(1) 根据音频PID解码音频数据到缓存区(2) 根据视频PID解码音频数据到缓存区(3) 和当前频道关联在一起的其他数据放到数据区中3 TS流解码总用例图Decoder 首先调用事件管理器注册各类事件(事件类型见3.2.2),然后调用read_packet函数读取指

14、定文件中的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 an

15、d the 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。insta

16、ll_netpid():表示网络信号的来源,当这个更新时,需要重新安装目录。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 :connec

17、t (InputPort*):连接到输入接口。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)基函数都是这个。

18、函数read_byte从缓冲区读取一个字节。read_pattern表示读取指定字符串。read_reserved_bits读取填充数据。read_uimsbf(int nbits, char* message)读取n位转化为无符号整形,高位在前。read_tcimsbf(int nbits, char* message) 读取n位转化为有符号整形,高位在前。check_crc表示CRC校验。3.1.5 解析PAT、PMT、私有数据等解析PMT中携带的节目信息到program,再把program插入到directory。类似于机顶盒的搜台系统。Dirrctory:函数add_program、r

19、emove_program表示添加和删除节目。get_program 表示获取节目,get_num_programs表示获取节目数,Program:函数active、deactivate表示添加激活和停止节目,add_estream、remove_estream表示给节目添加和删除ES流,set_pcr_estream表示设置该流含有PCR,get_estream表示获取ES流,get_num_streams表示获取节目中含流的数目。3.1.6 解析TS 包TS包结构,函数get_header_length表示TS包头的长度,config_basic表示TS包基本标志参数设置,config_a

20、daptation表示适应字段设置,inc_cc表示包数量增加,add_pcr,delete_pcr添加和删除PCR。get_fields_length表示调整字段长,不包括标志位,get_length表示total length of the adaptation field。3.1.7 解析PES包对PES包进行解析。解析出头部数据,解析后的数据分别存贮在”stream68”和”stream69”2个文件中。函数get_length 表示包总长度。get_header_data_length表示PES头长度,不包括填充字段。get_header_length 表示PES头长度,包括填充字段

21、。config_basic 表示PES参数设置。3.1.8 PCR时钟类系统时钟的相关的类,对系统时钟进行比较。其中对27MHZ的时钟算术和逻辑运算符进行了重载。注:PCR的校正一直是学术界研究的热点。3.1.9 CRC校验类每位进行异或运算后存储在一个4BYTE的数组中。函数poly_cmp 作CRC验证。函数push_bit 作CRC的生成。解码流程图3.1.10 TS包解析流程图3.1.11 Section解码流程图3.1.12 PES解码流程图4 TS流合成(编码)各编码类的UML图4.1.1 编码主类函数install_dir首先安装PAT函数send_packet表示按PID发送T

22、S包函数send_scheduled_packet表示按一定的规律轮流发送TS包。函数recalc_mux表示节目复用4.1.2 合成各类之间的关系函数get_nready获取已经填充的字节长度.函数fill_buffer 填充buffer.函数send_payload发送负载.函数send_section发送section packet.编码主要流程4.1.3 TS编码流程图4.1.4 负载(pes、section)打包过程附表一: PES分组字段packet_start_code_prefix(24)开始码字为0X00 00 01stream_id(8)原始流的类型和数目,取值从1011

23、1100到1111 1111之间。各值含义具体见13818-1。PES_packet_length(16)表示从此字节之后PES包长(单位字节)。0表示PES包长不限制,且只能用于视频PES。10填充字节。PES_scrambling_control(2)PES有效负载的加密模式。00表示不加密,其余表示用户自定义。PES_priority(1)PES数据包的优先级。类似于TS的此字段。data_alignment_indicator(1)为1时,表明此分组头部之后紧跟着 数据流描述子中定义的访问单元类型。copyright(1)版权,1表示有版权,具体见版权描述子13818-1 1-2-6-

24、24。0表示没有。original_or_copy(1)1表示原始数据,0表示备份PTS_DTS_flag(2)10表示含有PTS字段,11表示含有PTS和DTS字段,00表示不含有PTS和DTS,01无定义。ESCR_flag(1)1表示ESCR在PES首部出现,0表示不出现ES_rate_flag(1)1表示PES分组含有ES_rate字段。0表示不含有。DSM_trick_mode_flag(1)1表示有8位的trick_mode_flag字段,0表示不出现此字段。只对DSM有效。在广播中不用。additional_copy_info_flag(1)1表示有copy_info_flag字

25、段,0表示不出现此字段。PES_CRC_flag(1)1表示PES分组中有CRC字段,0表示不出现此字段。PES_extention_flag(1)1表示扩展字段在PES包头存在,0表示扩展字段不存在PES_header_data_length(8)表示可选字段和填充字段所占的字节数。00100010填充字段,表示只含有PTS,不含有DTS当含有DTS时,这个填充字段为0011PTS字段。PTS3230(3)marker_bit(1)PTS2915(15)marker_bit(1)PTS140(15)marker_bit(1)00010001填充字段,表示接下来为DTS。DTS数据解码时间DT

26、S3230(3)marker_bit(1)DTS2915(15)marker_bit(1)DTS140(15)marker_bit(1)reserved(2)填充字段基本系统参考时间,和扩展系统参考时间。ESCR_base3230(3)marker_bit(1)ESCR_base2915(15)marker_bit(1)ESCR_base140(15)marker_bit(1)ESCR_extention(9)marker_bit(1)marker_bit(1)表示系统解码器从PES分组中接收字节的速度。以50B/s为单位,有传送的作用。ES_rate(22)marker_bit(1)tric

27、k_mode_control(3)特技模式,比如快进,快退。具体见13818-1field_id(2)表示在特技模式中,哪些场将被显示。00表示仅显示顶场,01表示仅显示底场,10表示显示全帧。11保留。1表示编码间隙中可能丢失宏块,0表示不会丢失宏块。丢失宏块用前面已解码的图像宏块代替。编码的受限系数集,表示DCT后系统的非零限制,具体见13818-1intra_slice_refresh(1)frequency_trunction(2)field_rep_cntrl(5)隔行扫描中首场和底场显示顺序。reserved(3)填充marker_bit(1)填充additional_copy_i

28、nfo(7)包含和版权有关的私用数据previous_PES_packet_CRC(16)CRC校验PES包数据(不包括包头)PES_private_data_flag(1)1表示PES包首部中含有私用数据,0表示没有。pack_head_field_flag(1)1表示PES首部含有一个ISO/IEC 11172的组首部。0表示PES首部没有含有组首部。program_packet_sequence_counter_flag(1)1表示PES分组含program packet sequence counter和字段,0表示不含有。P-STD_buffer_flag(1)reserved(3)

29、填充PES_extention_flag_2(1)1表示出现PES_extention_flied及相关字段。0表示不出现。PES_private_data(128)私用数据pack_field_length(8)指示pack_header_field()字节长度。marker_bit(1)program_packet_sequence_counter(7)计数器,到0后重新计数,计算PES分组的数量。marker_bit(1)MPEG1_MPEG2_identifier(1)1表示PES分组带有ISO/IEC 11172-1系统信息,0代表带有PS流信息。original_stuff_len

30、gth(6)01P-STD_buffer_scale(1)联合使用控制BSn缓冲区的大小,具体定义见13818-1。仅用于PS流中。P-STD_buffer_size(13)marker_bit(1)PES_extention_field_length(7)规定此字段之后的扩展(填充)字段长度(单位字节)reserved(8)保留位8位stuffing_byte(8)填充字段。1111 1111PES_packet_data_byte(8)PES包原始流数据长度,等于PES_packet _length减去从PES_packet_length到此字段之前的长度。padding_byte(8)填

31、充字段。1111 1111附表二: 传送流结构sync_byte (8)01000111transport_error_indicator(1)传送层外被置1,表示至少一个不可纠正的错误位,改正前不被置0payload_unit_start_indicator(1)该字段置1表示携带的是PSI或PES第一个包。该字段置0表示携带的不是PSI或PES第一个包。transport_priority(1)置1表示比其他同PID组有更高优先级PID(13)0x0000-0x000F保留,0x1FFF空分组transport_scrambling_control(2)00表示未加密,其他“自定义”,空分组为00adaptio

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

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