《视音频数据PS封装》由会员分享,可在线阅读,更多相关《视音频数据PS封装(9页珍藏版)》请在金锄头文库上搜索。
1、本文格式为Word版,下载可任意编辑视音频数据PS封装 MPEG2-PS 1. PS介绍 MPEG2-PS是一种多路复用数字音频、视频等的封装容器。PS是Program Stream(程序流或节目流)的简称。程序流将一个或多个分组但有共同的时间基准的根本数据流 (PES)合并成一个整体流。它是为稳当稳定的储存媒介如光盘而设计的。 TS流与PS流的识别在于TS流的包布局是固定长度的,而PS流的包布局是可变长度的。它是分包发送的,每一个包长为188字节。在TS流里可以填入好多类型的数据,如视频、音频、自定义信息等。他的包的布局为,包头为4个字节,负载为184个字节。 PS包与TS包在布局上的这种差
2、异,导致了它们对传输误码具有不同的抗争才能,因而应用的环境也有所不同。TS码流由于采用了固定长度的包布局,当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,制止了信息损失。而PS包由于长度是变化的,一旦某一PS包的同步信息损失,接收机无法确定下一包的同步位置,就会造成失步,导致严重的信息损失。因此,在信道环境较为恶劣,传输误码较高时,一般采用TS码流;而在信道环境较好,传输误码较低时,一般采用PS码流。分辩这两种格式最简便的方法是利用MediaInfo工具查看MPEG视频的编码信息,这样就能确定它是何种格式,以便当后续的无损剪辑。一般来说,采用
3、MPEG2-HD格式的高清数码摄像机一般以“MPEG2-PS”来保存文件;而采用AVCHD格式的高清摄像机那么通常以“.M2TS”或“.MTS”保存文件。 2. PS封装H264的流程 PS封装按照ISO DEC-13818-1标准。一个PS包包含PS Header, PES Header, PS system header, PS system map等。 针对H264做如下PS封装:每个IDR NALU前一般都会包含SPS、PPS等NALU,因此将SPS、PPS、IDR 的NALU封装为一个PS包,包括ps头,然后加上PS system header,PS system map,PES h
4、eader+h264 raw data。所以一个IDR NALU PS包由外到内依次是:PS header | PS system header | PS system Map | PES header | h264 raw data。对于其它非关键帧的PS包,就简朴多了,直接加上PS头和PES头就可以了。依次为:PS header | PES header | h264 raw data。以上是对只有视频video的处境,假设要把音频Audio也打包进PS封装,也可以。当有音频数据时,将数据加上PES header 放到视频PES后就可以了。依次如下:PS包=PS头|PES(video)|P
5、ES(audio),再用RTP封装发送就可以了。 视频数据视频编码器视频PES节目流音频数据音频编码器音频PES分组器复合器节目流分组器传输流复合器传输流系统模范TISO5760-95/d01 对应的解码流程那么为: 已解码视频视频解码器通道通道特定解码器节目流解码器时钟操纵已解码音频节目流音频解码器TISO580095/d05 GB28181对RTP传输的数据负载类型有规定(参考GB28181附录B),负载类型中96-127动态范围: RFC2250建议96表示PS封装 RFC3016建议97为MPEG-4 RFC3984建议98为H264 即我们接收到的RTP包首先需要判断负载类型,若负载
6、类型为96,那么采用PS解复用,将音视频分开解码。若负载类型为98,直接按照H264的解码类型解码。 基于 RTP 的PS 封装首先按照 ISO/IEC 13818-1将视音频流封装成 PS 包,再将 PS 包以负载的方式封装成 RTP 包。PS 包的主要参数设置针对本文档规定的几种视音频格式,PS 包中的流类型(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.
7、729音频流: 0x99; h) SVAC音频流: 0x9B。 3. PS的布局 3.1 PS包头 节目流包标题 offset 0 4 pack_header() pack_start_code 01 system_clock_reference_base32.30 marker_bit system_clock_reference_base29.15 marker_bit 语法 位数 32 2 3 1 15 1 助记符 bslbf bslbf bslbf bslbf bslbf bslbf 10 13 14 system_clock_reference_base14.0 marker_bit
8、 system_clock_reference_extension marker_bit program_mux_rate marker_bit marker_bit reserved pack_stuffing_length for (i=0;i 包起始码字段 pack_start_code 值为0000 0000 0000 0000 0000 0001 1011 1010 (0x000001BA)的位串,用来标志一个包的开头。 系统时钟参考字段 system_clock_reference_base,system_clock_reference_extenstion 系统时钟参考(SCR)
9、分两片面编码的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值。该字段值在本标准中的节目多路复合流的不同包中取值可能不同。 包填充长度字段
10、pack_stuffing_length 3位整数,规定该字段后填充字节的个数。 填充字节字段 stuffing_byte 8位字段,取值恒为1111 1111。该字段能由编码器插入,例如为了得志通道的要求。它由解码器丢弃。在每个包标题中最多只允许有7个填充字节。 3.2 系统标题 offset 0 4 6 system_header() system_header_start_code header_length marker_bit rate_bound marker_bit 语 法 位数 32 16 1 22 1 助记符 bslbf uimsbf bslbf uimsbf bslbf 9
11、 10 11 12 audio_bound fixed_flag CSPS_flag system_audio_lock_flag system_video_lock_flag marker_bit vedio_bound packet_rate_restriction_flag reserved_bits while (nextbits()=1) stream_id 11 P-STD_buffer_bound_scale P-STD_buffer_size_bound 6 1 1 1 1 1 5 1 7 8 2 1 13 uimsbf bslbf bslbf bslbf bslbf bslb
12、f uimsbf bslbf bslbf uimsbf bslbf bslbf uimsbf 系统标题起始码字段 system_header_start_code 取值0000 0000 0000 0000 0000 0001 1011 1011 (0x000001BB)的位串,指出系统标题的开头。 标题长度字段 header_length 16位字段。指出该字段后的系统标题的字节长度。在本模范将来的扩展中可能扩展该字段。 速率界限字段 rate_bound 22位字段,取值不小于编码在节目流的任何包中的program_mux_rate字段的最大值。该字段可被解码器用于估计是否有才能对整个流解
13、码。 音频界限字段 audio_bound 6位字段,取值是在从0到32的闭区间中的整数,且不小于节目流中音频流的最大数目。 固定标志字段 fixed_flag 1位标志位。置1时表示比特率恒定的操作;置0时,表示操作的比特率可变。 CSPS标志字段 CSPS_flag 1位字段。 系统音频锁定标志字段 system_audio_lock_flag 1位字段。表示在系统目标解码器的音频采样率和system_clock_frequency之间存在规定的比率。 系统视频锁定标志字段 system_video_lock_flag 1位字段。表示在系统目标解码器的视频帧速率和system_clock_
14、frequency之间存在规定的比率。比率SCFR的值是精确的。 视频界限字段 video_bound 5位字段,取值是在从0到16的闭区间中的整数且不小于节目流中解码过程同时活动的流的最大数目。 分组速率限制标志字段 packet_rate_restriction_flag 1位标志位。若CSPS标识为0,那么该字段的含义未定义。 留存位字段 reserved_bits 7位字段。被留存供ISO/IEC将来使用。它的值应为111 1111,除非ISO/IEC对它作出其 它规定。 流标识字段 stream_id 8位字段。指示其后的P-STD_buffer_bound_scale和P-STD_buffer_size_bound字段所涉及的流的编码和根本流号码。若取值1011 1000(0xB8),那么其后的P-STD_buffer_bound_scale和P-STD_buffer_size_bound字段指节目流中全体的音频流;若取值1011 1001(0xB9),那么其后的P-STD_buffer_bound_scale和P-STD_buffer_size_bound字段指节目流中全