Video Tag 视频Tag: 该Tag类型封装真实的视频裸数据,虽然支持H263、H264等编码 类型的视频,但是现在主流还是H264,所以下面会重点分析如何将 H264视频帧打进Flv方法。 Flv Parse 解析的结果如下:
previous tag1: 十六机制:0x00 00 01 37 十进制:311 因表示了前一个Metadata Tag的长度是311字节,这跟上篇分析结果是一致的;
Videoag theader:
十六进制:0x09 00 00 2C 00 00 00 00 00 00 00 Tagtype: 十六进制:0x09
二进制:0000 1001 通过前1-2bit即知道非加密,后面4-8bit10010即十进制为9则为Video Tag类型; DataSize: 十六进制:0x 00 00 2C 十进制:44 说明这个Video Tag的data字段长度为44字节; Timestamp: 十六进制:0x 00 00 00 由于是第一个Video Tag该字段一般就是默认为0; TimeStampExtended: 十六进制:0x 00 00 00 时间戳扩展字段也是默认为0; Stream ID: 十六进制:0x 00 00 00 无论那种类型的Tag,一般默认为0; Video Tag Data: 视频头: 在Video tag的Header后面按道理就是视频裸数据了,但是这里我们需要分析下第 一个字节,判断视频数据的编码格式等信息,然后才知道视频裸数据是怎么打包进 Video Tag的Data字段的,第一个Video Tag的Data部分如图所示: 视频头字段格式:
待分析数据第一字节: 十六进制:0x17 我们先分析Video Tag数据部分的第一个字节即视频头 Frame type: 十六进制:0x17 二进制:0001 0111 十进制:1 通过前面1-4bit位发现十进制为1,即认为是key frame; CodeID: 十六进制:0x17 二进制:0001 0111 十进制:7 说明这个Video的编码格式AVC也就是常说的H264; 特别注意: 分析到这里,我们发现这个Video Tag的承载数据是AVC即H264编码格式的数 据,一般情况下Flv承载的数据格式都是这种。那么就需要继续向下面分析后面的 Packet Type字段。 Packet Typ数据格式:
对各个字段解释: CTS:这个字段需要结合PTS和DTS一块来理解,至于还不知道PTS和DT