我是靠谱客的博主 热心钢笔,最近开发中收集的这篇文章主要介绍TS的I帧,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

1.根据TS包头中的PID找到TS流里的PAT表,其TS的PID为0x00;  

2.找到PAT表后,根据其中携带的PMT表的TS包PID找到PMT表;  

3.找到PMT表后,根据其中携带视频的TS包PID就可以判断出包含视频数据的TS包;  

4.对于mpeg-1和mpeg-2视频,一般在TS复用时一个PES包包含一个picture,对于mpeg-2 video,picture可以是桢图像(frame)或场图像(field)  

5.找到视频TS包中一个包含PES头的TS包(PID为PMT中的视频PID,TS包头中payload_unit_start_indicator标志为1),这个包里会包含picture header信息 

6.找到picture header(以0x00000100开始)后,根据其中的picture_coding_type信息判断其为I,P,B或D桢,注意,D桢只在mpeg-1 video中使用   有关TS,PES,PAT,PMT信息见13818-1,有关picture header,picture_coding_type信息见13818-2和11176-2

 

 

 

在哪个字段有判断I,B,P帧的信息[整理]

表后,根据其中携带的PMT表的TS包PID找到PMT表; 

3.找到PMT表后,根据其中携带视频的TS包PID就可以判断出包含视频数据的TS包; 

4.对于mpeg-1和mpeg-2视频,一般在TS复用时一个PES包包含一个picture,对于mpeg-2   video,picture可以是桢图像(frame)或场图像(field)

 5.找到视频TS包中一个包含PES头的TS包(PID为PMT中的视频PID,TS包头中payload_unit_start_indicator标志为1),这个包里会包含picture   header信息 

6.找到picture   header(以0x00000100开始)后,根据其中的picture_coding_type信息判断其为I,P,B或D桢,注意,D桢只在mpeg-1   video中使用  有关TS,PES,PAT,PMT信息见13818-1,有关picture   header,picture_coding_type信息见13818-2和11176-2  我根据取得的ES包找到00000100,然后根据其后2个字节的第11-13位判断,001是I帧,011是B帧,010是P帧,多谢指点   

如果视频是h264呢,怎样判断i、b、p帧  H264的IPB帧判断,要先解出来H264的es流数据,然后分析出每一个NAL,再N解析出那些al为一个Frame,再解析Slice类型,当fisrt_mb_in_slice=0时,表示一帧的开始,再根据Slice类型就可以判断这个Frame的IPB类型。    

 MPEG4解析VOL和VOP H.264解析PPS MPEG2跟MPEG4一样,只是头的规定不一样。  ffmpeg中获取frame的type在:  mpeg1:  mpeg1_decode_picture  

 mpeg2:  mpeg_decode_picture_coding_extension  

 mpeg4:  decode_vop_header  

 h263:  ff_intel_h263_decode_picture_header  h263_decode_picture_header     

 flv:  ff_flv_decode_picture_header     

 mpeg4视频中,I帧、p帧、B帧的判定  mpeg4的每一帧开头是固定的:00 00 01 b6,那么我们如何判断当前帧属于什么帧呢?在接下来的2bit,将会告诉我们答案。注意:是2bit,不是byte,

下面是各类型帧与2bit的对应关系:    00: I Frame   01: P Frame   10: B Frame   

 为了更好地说明,我们举几个例子,以下是16进制显示的视频编码:    

00 00 01 b6 10 34 78 97 09 87 06 57 87 ……                             I帧    

00 00 01 b6 50 78 34 20 cc 66 b3 89 ……                                  P帧    

00 00 01 b6 96 88 99 06 54 34 78 90 98 ……                            B帧  

下面我们来分析一下为什么他们分别是I、P、B帧    0x10 = 0001 0000    0x50 = 0101 0000    0x96 = 1001 0100   大家看红色的2bit,再对照开头说的帧与2bit的对应关系,是不是符合了呢?

 

 

 

 

 

 

最后

以上就是热心钢笔为你收集整理的TS的I帧的全部内容,希望文章能够帮你解决TS的I帧所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部