FLV科普10 FLV视频头信息

注意: 在flv中H.264码流中已经去除 0000001 等信息

VideoData的内容,同样包括VideoData Header和VideoData Body。

即VideoData Format:
Video Header = | FrameType(4) | CodecID(4) |
VideoData = | FrameType(4) | CodecID(4) | VideoData(n) |
FrameType为数据类型,1为关键帧,2为非关键帧,3为h263的非关键帧,4为服务器生成关键帧,5为视频信息或命令帧。
CodecID为包装类型,1为JPEG,2为H263,3为Screen video,4为On2 VP6,5为On2 VP6,6为Screen videoversion 2,7为AVC。
VideoData为数据具体内容:
如果CodecID=2,为H263VideoPacket;
如果CodecID=3,为ScreenVideopacket;
如果CodecID=4,为VP6FLVVideoPacket;
如果CodecID=5,为VP6FLVAlphaVideoPacket;
如果CodecID=6,为ScreenV2VideoPacket;

如果CodecID=7,为AVCVideoPacket;

视频头信息占1字节 主要表示具体视频类型等信息

Frame Type 占用4位 视频帧类型

               1 关键帧 (应用于AVC)

               2非关键帧(应用于AVC)

               3 h263的非关键帧

               4 服务器生成关键帧

               5 视频信息或命令帧

CodecID 占用4位 选用的标准

                2 H.263

                3 屏幕视频

                4 VP6

                5 VP6 并且有alpha通道

                6 屏幕视频版本2

                7 AVC(H.264)

视频头信息占1字节 主要表示具体视频类型等信息

如果当前为H.264编码

AVCVideoPacket同样包括Packet Header和Packet Body两部分:

AVCPacketType  占用1字节  仅在AVC时有此字段

               0  AVC sequence header (SPS、PPS信息等)

               1 AVC NALU

                2 AVC end of sequence (lower level NALU sequence ender is
not required or supported)

CompositionTime 占用24位 相对时间戳 如果AVCPacketType=0x01, 为相对时间戳;其它,均为0;  该值表示当前帧的显示时间  tag的时间为解码时间    显示时间等于 解码时间 + CompositionTime

如果是头信息AVCPacketType=0

 解析AVCDecoderConfigurationRecord  

configurationVersion  配置版本 占用8位  一定为1

AVCProfileIndication  profile_idc 占用8位 从H.264标准SPS第一个字段profile_idc拷贝而来 指明所用 profile

profile_compatibility  占用8位 从H.264标准SPS拷贝的冗余字节

AVCLevelIndication  level_idc 占用8位 从H.264标准SPS第一个字段level_idc拷贝而来 指明所用 level

注意:AVCProfileIndication、profile_compatibility 、AVCLevelIndication就是拷贝SPS的前3个字节

reserved 保留位 占6位  值一定为'111111'

lengthSizeMinusOne 占用2位, 表示NAL单元头的长度  0 表示1字节 1表示2字节 2表示3字节  3 表示4字节

reserved 保留位 占3位  值一定为'111'

依次解析SPS、PPS

numOfSequenceParameterSets 占用5位 表示当前SPS的个数

for i = 0 ; < numOfSequenceParameterSets i++

      sequenceParameterSetLength  占用16位  SPS占用的长度

      解析当前SPS(详情见H.264标准)

numOfPictureParameterSets 占用8位 表示当前PPS的个数

for i = 0 ; < numOfPictureParameterSets i++

     pictureParameterSetLength  占用16位  PPS占用的长度

    解析当前PPS(详情见H.264标准)

标准文档:


以下图选定区域的一个tag为例:

tag头信息:占11字节  09 00 00 30 00 00 00 00 00 00 00 视频数据(0x 09  size = 0x30 )

Frame Type 占用4位 视频帧类型 当前值:0x1 当前tag为关键帧

CodecID 占用4位 选用的标准 当前值:0x7 当前选用的为H.264编码标准

AVCPacketType  占用1字节  仅在AVC时有此字段 当前值:0x00 表示 AVC头信息

CompositionTime 占用24为相对时间戳 如果AVCPacketType=0x01, 为相对时间戳;其它,均为0;当前值:0x 00 00 00    

 解析AVCDecoderConfigurationRecord

 configurationVersion  配置版本 占用8位  一定为1 当前值为:0x 01

AVCProfileIndication  profile_idc 占用8位 从H.264标准SPS第一个字段profile_idc拷贝而来 指明所用 profile  当前值:0x64 表示所用的是high档次

profile_compatibility  占用8位 从H.264标准SPS拷贝的冗余字节 当前值:0x00

AVCLevelIndication  level_idc 占用8位 从H.264标准SPS第一个字段level_idc拷贝而来 指明所用 level 当前值:0x1F

注意:AVCProfileIndication、profile_compatibility 、AVCLevelIndication就是拷贝SPS的前3个字节

reserved 保留位 占6位  值一定为'111111'  当前值:0xFF 前6位为 '111111' 

lengthSizeMinusOne 占用2位, 表示NAL单元头的长度  0 表示1字节 1表示2字节 2表示3字节  3 表示4字节 当前值:‘11’ 表示占用4字节

reserved 保留位 占3位  值一定为'111'  当前值:0xE1 前3位为 '111' 

numOfSequenceParameterSets 占用5位 表示当前SPS的个数 当前值:0xE1 后五位  ‘00001’ 表示当前就一个SPS

for i = 0 ; < numOfSequenceParameterSets i++

     sequenceParameterSetLength  占用16位  SPS占用的长度 当前值:0x00 1B (占用27字节)

    解析当前SPS(详情见H.264标准)(27字节:0x67 64 00 1F......18 31 84 60) 其中:0x67 表示sps  0x 64 00 1F 刚好是SPS的前三个字节

numOfPictureParameterSets 占用8位 表示当前PPS的个数 当前值;0x01

for i = 0 ; < numOfPictureParameterSets i++

     pictureParameterSetLength  占用16位  PPS占用的长度 当前值:0x0005 (占用5个字节)

    解析当前PPS(详情见H.264标准)(5字节:0x68 E8 43 BC B0)  其中:0x68 表示pps 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值