专业的网站建设服务,乐山建网站,上海建设部门网站,网站电脑培训班附近有吗一、引言
从《音视频入门基础#xff1a;FLV专题#xff08;3#xff09;——FLV header简介》中可以知道#xff0c;
在FLV header之后#xff0c;FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 FLV header PreviousTagSize0 Tag1 PreviousTagSize1 Ta…一、引言
从《音视频入门基础FLV专题3——FLV header简介》中可以知道
在FLV header之后FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 FLV header PreviousTagSize0 Tag1 PreviousTagSize1 Tag2 ...... PreviousTagSizeN-1 TagN PreviousTagSizeN。本文对Tag的Tag header进行简介。 二、Tag header
根据《video_file_format_spec_v10_1.pdf》第75页一个FLV tag简称Tag包含音频、视频或脚本的元数据metadata可选的加密元数据和有效负载 Tag有三种类型音频Tag视频Tag和脚本Tag。但不管是哪种Tag都包含Reserved、Filter、TagType、DataSize、Timestamp、TimestampExtended、StreamID这几个属性。所以我们一般称每个Tag都包含的公共部分Reserved Filter TagType DataSize Timestamp TimestampExtended StreamID为Tag header。这些属性加起来总共11个字节所以Tag header固定为11字节。
一个Tag Tag header Tag data。也就是说除了Tag header一个Tag剩下的部分就是Tag data。
注意FLV的官方文档《video_file_format_spec_v10_1.pdf》和FFmpeg源码中是没有Tag header和Tag data的概念的这两个概念是FLV分析工具flvAnalyser里面提出来的 Tag header的第1个字节等于Reserved Filter TagType
Reserved占2位8位等于1个字节为保留位。值必须是0。
Filter占1位。表示是否对报文进行过滤。0未加密不需要预处理1加密。
TagType占5位。该Tag的类型。值为8音频Tag值为9视频Tag值为18脚本Tag。 DataSizeTag header的第2到第4个字节为DataSize为属性StreamID之后的那个字节到该Tag结尾的字节数也就是Tag data的长度单位为字节。DataSize的值等于整个Tag的长度 - 11这个很容易理解因为Tag header固定为11字节。 TimestampTag header的第5到第7个字节为Timestamp。为该Tag的时间戳单位为毫秒。第1个Tag的Timestamp总是为0。如果是脚本TagTimestamp就是0。 TimestampExtendedTag header的第8个字节为TimestampExtended。为时间戳扩展和上面的Timestamp一起让时间戳变成4字节以存储更长时间的flv时间信息。TimestampExtended作为时间戳的最高位。 StreamIDTag header的第9到第11个字节为StreamID。值必须是0。 三、Tag header实例分析
用notepad打开《音视频入门基础FLV专题2——使用FFmpeg命令生成flv文件》中生成的FLV文件下图红框中的就是第一个Tag的Tag header。可以看到Tag header为0x12 0x00 0x01 0x73 0x00 0x00 0x00 0x00 0x00 0x00 0x00 红框中的Tag header的第1个字节为0x12即0b00010010。所以Filter的值为0表示该Tag未加密。TagType为0x12表示该Tag为脚本Tag。 红框中第2到第4个字节为0x00 0x01 0x73即十进制的371。所以整个Tag data的长度为371字节。 红框中第5到第8个字节为0x00 0x00 0x00 0x00。所以该Tag的整个时间戳为0。 用flvAnalyser工具可以直接显示Tag header的每个属性的值