王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

ps 流编码 SCR PTS DTS 怎么获得等

ps 流编码 SCR PTS DTS 怎么获得等

按照spec上把DTS PTS解出来,因为系统时钟是27MHz, pts dts 是90K需要做个转换才能变成 以100nanosecond 为单位的program_mux_rate 在解pack_header 里面这个变量就行了在PS流理不存在你问的情况,一个PES最大64K 足够放一桢了的

PS封装H264码流分析

一个完整的ps包封装: PSheader + PS system header + PS system Map + PES header + h264 data 因为一般视频数据都是采用rtp打包发送,所以这里我就把ps封装和rtp封装放在一起讲 当我们获取到一帧h264的关键帧数据时,先进行PS封装,在视频数据前加上 PS header + PS system header + PS system Map header ,当前面的头添加完毕后还需要再加一个 PES header,但是由于PES头的负载长度类型是short,最大为65536,所以每65536字节的视频数据后都得加一个PES头,如下: | PS header | PS system header | PS system Map |PES | data | PES | data | PES | data| 这样一个关键帧的PS封装就完成了剩下的就是把封装好的数据分包打RTP包了,每1300字节的数据前加一个RTP包头,然后发送出去 pack_start_code : (32b) 起始码字段 默认0x000001BA 标志一个包的开始 marker_bit :(2b) 标记位字段2位字段,取值’01’。 system_clock_reference_base[32..30] :(3b)系统时钟参考字段 marker_bit : (1b) 标记位字段取值’1’ system_clock_reference_base[29..15] : (15b) 系统时钟参考字段 marker_bit : (1b) 标记位字段取值’1’ system_clock_reference_base[14..0] : (15b) 系统时钟参考字段 marker_bit : (1b) 标记位字段取值’1’ system_clock_reference_extension : (9b) 系统时钟参考字段 marker_bit : (1b) 标记位字段取值’1’ program_mux_rate : (22b) 节目复合速率字段 marker_bit : (1b) 标记位字段取值’1’ marker_bit : (1b) 标记位字段取值’1’ reserved : (5b) 填充字段 pack_stuffing_length : (3b) 包填充长度字段 节目复合速率字段 program_mux_rate (没查到相关资料) 一个22位整数,规定P-STD在包含该字段的包期间接收节目流的速率。

其值以50字节/秒为单位。

不允许取0值。该字段所表示的值用于在2.5.2中定义P-STD输入端的字节到达时间。该字段值在本标准中的节目多路复合流的不同包中取值可能不同。 /12字节RTP头/ 80 60 00 00 00 00 00 00 0d 25 5a a5 /PS 头/ 00 00 01 ba 44 00 05 5f 94 01 00 60 1b f8 00 00 01 ba 开始码 44 00 44 f5 84 01 系统时钟参考字段,二进制如下 01 000 1 000000000000000 1 010101111110010 1 000000000 1 SCR = 90000/8 = 00000000 00000000 00101011 11110010 (SRC值是累加的,这个是第一帧数据的SRC值) 上面红色的1都是marker_bit 标记位 000 这三个位段的值是由SCR值的第30-32位填充,参考上述SRC值,故填充3位0 000000000000000 这15位字段是由SRC值的第15-29位填充,故填充000000000000000 010101111110010 这15位字段是由SRC值的第0-14位填充,故填充 0101011 11110010 00 60 1b f8 二进制如下: 00000000001100000000110 11 11111 000 00000000001100000000110 没看懂用途,尝试随便取值不影响视频和音频,不能取0,我这里用的是6150(1100000000110) 11111 5位填充字段 全部填1 00 3位扩展长度填充字段 填0 system_header_start_code : (32b) 开始码 0x000001BB header_length : (16) 该字段后的系统标题的字节长度 marker_bit : (1b) 标记位字段取值’1’ rate_bound : (22b) 速率界限字段 marker_bit : (1b) 标记位字段取值’1’ audio_bound : (6b) 音频界限字段 fixed_flag : (1b) 固定标志字段 CSPS_flag : (1b) CSPS标志字段 system_audio_lock_flag : (1b) 系统音频锁定标志字段 system_video_lock_flag : (1b) 系统视频锁定标志字段 marker_bit : (1b) 标记位字段取值’1’ vedio_bound : (5b) 视频界限字段 packet_rate_restriction_flag: (1b) 分组速率限制标志字段 reserved_bits : (7b) 保留位字段 stream_id : (8b) 流标识字段 marker_bit : (2b) 取值’11’ P-STD_buffer_bound_scale : (1b) P-STD缓冲区界限比例字段 P-STD_buffer_size_bound : (13) P-STD缓冲区大小界限字段 00 00 01 bb 00 0c 80 1e ff fe e1 7f e0 e0 d8 c0 c0 20 00 00 01 bb : 四字节开始码 00 0c : 当前字段后该头的长度 12 80 1e ff 转成二进制如下: 1 0000000000111101111111 1 111101111111 :rate_bound 该字段可被解码器用于估计是否有能力对整个流解码(没查到如何填值) fe e1 7f转成二进制如下: 111111 1 0 1 1 1 00001 0 1111111 111111: 音频界限字段 audio_bound 6位字段,取值是在从0到32的闭区间中的整数,且不小于节目流中解码过程同时活动的GB/T XXXX.3和GB/T AAAA.3音频流的最大数目。

在本小节中,若STD缓冲区非空或展现单元正在P-STD模型中展现,则GB/T XXXX.3和GB/T AAAA.3音频流的解码过程是活动的。 1 : 固定标志字段 fixed_flag 1位标志位。置’1’时表示比特率恒定的操作;置’0’时,表示操作的比特率可变。

0 : CSPS标志字段 CSPS_flag 1位字段。 1: 系统音频锁定标志字段 system_audio_lock_flag 置 ‘1’ 1: 系统视频锁定标志字段 system_video_lock_flag 置 ‘1’ 00001: 视频界限字段 video_bound 0: 分组速率限制标志字段 packet_rate_restriction_flag 1位标志位。若CSPS标识为’1’,则该字段表示2.7.9中规定的哪个限制适用于分组速率。

若CSPS标识为’0’,则该字段的含义未定义。 1111111 : 7位字段。被保留供ISO/IEC将来使用。

它的值应为’111 1111’,除非ISO/IEC对它作出其它规定。 e0 e0 d8 c0 c0 20转成二进制如下: 11100000 11 1 0000011011000 11000000 11 0 0000000100000 11100000 : 流标识字段 stream_id E0在gb28181中定义是视频 11: 固定值 1: 1位字段。表示用于解释后续P-STD_buffer_size_bound字段的比例系数。若前面的stream_id表示一个音频流,则该字段值为’0’。

若表示一个视频流,则该字段值为’1’。对于所有其它的流类型,该字段值可以为’0’也可以为’1’。 0000011011000 : 音频缓存区大小 216 单位是1024字节 11000000: 流标识字段 stream_id C0在gb28181中定义是音频 11: 固定值 0: 0000000100000: 视频缓存区大小 32 单位 128字节 packet_start_code_prefix : (24b) 开始码 0x000001 map_stream_id : (8) 映射流标识字段 值为0xBC program_stream_map_length: (16) 节目流映射长度字段 current_next_indicator : (1) 当前下一个指示符字段 reserved : (2) 填充字段 program_stream_map_version: (5) 节目流映射版本字段 reserved : (7) marker_bit : (1) program_stream_info_length : (16) 节目流信息长度字段 elementary_stream_map_length: (16) 基本流映射长度字段 stream_type : (8) 流类型字段 elementary_stream_id : (8) 基本流标识字段 elementary_stream_info_length : (16) 基本流信息长度字段 CRC_32 : (32) CRC 32字段 00 00 01 bc 00 18 e1 ff 00 00 00 08 1b e0 00 00 90 c0 00 00 23 b9 0f 3d 00 00 01 bc 开始码加固定id 00 18 头的长度 e1 ff 00 00 00 08二进制如下: 11 00001 1111111 1 0000000000000000 0000000000001000 1: 当前下一个指示符字段 current_next_indicator 1位字段。置’1’时表示传送的节目流映射当前是可用的。

置’0’时表示传送的节目流映射还不可用,但它将是下一个生效的表。 11: 填充字段 ‘11’ 00001: 节目流映射版本字段 program_stream_map_version 5位字段,表示整个节目流映射的版本号。一旦节目流映射的定义发生变化,该字段将递增1,并对32取模。在current_next_indicator为’1’时,该字段应该是当前适用的节目流映射的版本号;在current_next_indicator为’0’时,该字段应该是下一个适用的节目流映射的版本号。

1111111: 填充字段 0000000000000000: 节目流信息长度字段 program_stream_info_length 16位字段,指出紧跟在该字段后的描述符的总长度 0000000000001000: 基本流映射长度字段 elementary_stream_map_length 16位字段,指出在该节目流映射中的所有基本流信息的字节长度。它只包括stream_type、elementary_stream_id和elementary_stream_info_length字段。(这里注意一下,这里的基本流映射长度,他只包括他后面的指定的那几个定义字段的总和,即从从这个长度,我们可以知道后面他根了几种类型的流定义,因为一种流的这个定义字段:stream_type(1BYTE)、elementary_stream_id(1byte)和elementary_stream_info_length(2byte)字段总和为4个字节,所以用elementary_stream_map_length/4可以得到后面定义了几个流类型信息。

) 1b e0 00 00: 1b是H264视频流 e0 :指视频 00 00指后面跟着0个字节的视频描述字节 90 c0 00 00: 90是G.711 音频流:0x90 ,c0指音频 00 00:0个字节描述符 23 b9 0f 3d : 32位字段,它包含CRC值以在处理完整个节目流映射后在附录A中定义的解码器寄存器产生0输出值。/crc (23 b9 0f 3d)/ packet_start_code_prefix : (24b) 分组起始码前缀字段 packet_start_code_prefix 0x000001 stream_id : (8) 流标识字段 stream_id 这个字段的定义,其中0x(C0 DF)指音频,0x(E0 EF)为视频 PES_packet_length : (16) PES分组长度字段 PES_packet_length ‘10’ : (2) PES_scrambling_control : (2) PES加扰控制字段 PES_scrambling_control PES_priority : (1) PES优先级字段 PES_priority data_alignment_indicator : (1) 数据对齐指示符字段 data_alignment_indicator copyright: (1) 版权字段 copyright original_or_copy : (1) 原始或拷贝字段 original_or_copy PTS_DTS_flags : (2) PTS DTS标志字段 PTS_DTS_flags ESCR_flag : (1) ESCR标志字段 ESCR_flag ES_rate_flag : (1) ES速率标志字段 ES_rate_flag DSM_trick_mode_flag : (1) DSM特技方式标志字段 DSM_trick_mode_flag additional_copy_info_flag : (1) 附加版权信息标志字段 additional_copy_info_flag PES_CRC_flag : (1) PES CRC标志字段 PES_CRC_flag PES_extension_flag: (1) PES扩展标志字段 PES_extension_flag PES_header_data_length: (8) PES标题数据长度字段 PES_header_data_length ‘0011’ : (4) PTS[32..30] : (3) 展现时间戳字段 PTS marker_bit: (1) PTS[29..15] : (15) marker_bit : (1) PTS[14..0] : (15) marker_bit : (1) 00 00 01 e0 49 e6 88 80 05 31 00 01 57 e5 00 00 01: 开始码 e0 : 视频 49 e6: 视频数据长度 88 80 05 :二进制数据如下 10 00 1 0 0 0 10 0 0 0 0 0 0 00000101 10 : 固定值 00: PES加扰控制字段 PES_scrambling_control 1: PES优先级字段 PES_priority ‘1’表示PES分组中有效负载的优先级高于该字段为’0’的PES分组有效负载 0: 数据对齐指示符字段 data_alignment_indicator 当值为’0’时,没有定义是否有任何此种的对齐。 0: 版权字段 copyright当值为’0’时,没有定义该材料是否受到版权保护 0: 原始或拷贝字段 original_or_copy 1位字段。

置’1’时表示相关PES分组有效负载的内容是原始的;值为’0’表示相关PES分组有效负载的内容是一份拷贝 10: PTS DTS标志字段 PTS_DTS_flags 2位字段。当值为’10’时,PTS字段应出现在PES分组标题中;当值为’11’时,PTS字段和DTS字段都应出现在PES分组标题中;当值为’00’时,PTS字段和DTS字段都不出现在PES分组标题中。值’01’是不允许的。

EDIUS如何输出ps流

DVD节目中的MPEG2格式,是MPEG2-PS,全称是Program Stream,TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。

这两种格式的主要区别是什么呢?你将DVD上的VOB文件的前面一截剪掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。

分清楚这两个概念以后,我们会发现edius输出MPEG-2编码的时候有2个选择,一个是基础流,一个是程序流。这里的程序流即PROGRAM STREAM,也就是你所谓的PS流。

请详细列举相对应的视频编码格式和封装格式!请专业人士回答!

现在的视频格式太多,我分不清哪些格式属于视频编码?哪些格式属于视频封装格式?请高手告诉我哪些视频编码和封装格式对应,也就是说什么编码可以用什么格式封装!回答:视频编码是一种压缩算法,封装格式是成型的文件类型。某种算法的视频编码你可以封装成多种格式。

很原始的来说,原始的视频流数据经过编码后变成相应的比特流,比特流按照协议封装成相应的文件格式。

所谓的封装就是给原始的视频比特流加上不同的“头”和切成不同的大小而已。打个比方,原始的模拟视频采用MPEG2数字化编码后,你可以采用TS流格式封装成TS流文件,也可以采用PS流格式封装成PS流文件,选择权在于你,TS流是称为实时流,他把视频信息分成很多很小的包,损坏了一个包,你解码回放时只是看不见一小部分(例如出现马赛克),但是PS流是文件流,文件损害的话,整个文件都看不了了。再形象的说,一段视频资源用TS流封装就是把这段视频切成10个部分,放到10个盒子里,一个盒子一个盒子的按照顺序打开,你就能看完这段视频;而PS流式把整个视频放到1个盒子里,它会自动按照顺序播放出来给您观看;如果有一个盒子坏了,TS流可以看到9个盒子,PS你就都看不见了。其实如何对应都是各个厂家用来控制市场的一种方式而已,有编就有解,我编的,你必须用我的方式来解,不然你就看不了我的图像了,当然某些程度上这些私有标准也是具有技术含量的,他们能在一定程度上提高视频编码的效率或者提高画质等。

国际上标准的视频编码格式目前只有MPEG2\MPEG4\H.264\MJPEG这几种,所以其他的编码格式都是各个厂家的私有编码(例如微软的DIVX、real公司的RM系列等)对应可以如下(封装格式:编码格式)AVI:MPEG-2,DIVX,XVID,AC-1,H.264;WMV:WMV,AC-1;RM、RMVB:RV, RM;MOV:MPEG-2,XVID,H.264;TS/PS:MPEG-2,H.264,MPEG-4;MKV:可以封装所有的视频编码格式。常见的高清视频编码和封装格式回答:高清编码基本采用AC-1、MPEG2、H.264目前高清对应于封装如下:AVI:AC-1、MPEG2、H.264TS/PS:MPEG-2,H.264;MKV:AC-1、MPEG2、H.264高清的和普清的一样,没啥大的区别,如果REAL公司要做高清的编码一样可以做出来,只不过它的市场不在那一块而已。全自己写的。

什么是ts信号?原理是什么?谁能帮忙解答啊

在MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流(TS:TransportStream)。 据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS)和节目流(PS:ProgramStream)TS流与PS流的区别在于TS流的包结构是固定长度的,而PS流的包结构是可变长度的。

PS包与TS包在结构上的这种差异,导致了它们对传输误码具有不同的抵抗能力,因而应用的环境也有所不同。

TS码流由于采用了固定长度的包结构,当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。而PS包由于长度是变化的,一旦某一PS包的同步信息丢失,接收机无法确定下一包的同步位置, 就会造成失步,导致严重的信息丢失。因此,在信道环境较为恶劣,传输误码较高时,一般采用TS码流;而在信道环境较好,传输误码较低时,一般采用PS码流如DVD等等。 由于TS码流具有较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的MPEG-2码流基本上都采用了TS码流。

TS/PES是MPEG定义的标准格式,无论是MPEG1还是MPEG2都给出了包含比特流句法在内的定义,我们所说的TS/PS都是在这里定义的。因此谈到TS/PS时仍然离不了MPEG,虽然AVS及IP的数据也可以封装在TS中,因为MPEG中给TS/PES的定义中允许封装其他数据。虽然也许可以不经改变的将不同编码格式的码流经由TS/PS传送,但这事实上这是对MPEG的利用或扩充。

通常情况下,封装不同类型数据的时候我们需要在TS/PES添加标准的(如果有的话)或自定义的描述,并且在有些情况下原则上必须使用MPEG已经定义的特殊描述,TS/PES并非总是透明的。简单说就是ps流(主要用在DVD上)如是中间丢了一断码流,后面的都没法播了;而TS流(DVB-T,DMB-TH等)如果断了码流,后面的随时可以再开始解码怎么看都行。----------------------------------------------PS流: DVD节目中的MPEG2格式,是MPEG2-PS,全称是Program Stream,简称PS流。

TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么呢?你将DVD上的VOB文件的前面一截剪掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。

相关文章

评论列表

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。