【音视频学习笔记】-FLV结构

本文是音视频学习笔记的一部分,详细介绍了FLV文件格式的结构,包括FLV头、FLV包体和FLVTag,特别是音频和视频数据标签以及ScriptTags。重点讨论了AVCDecoderConfigurationRecord在FLV中的作用,它是H.264视频中NALU长度的关键信息,以及AudioSpecificConfig的相关内容。
摘要由CSDN通过智能技术生成

音视频学习笔记系列主要介绍笔者在学习音视频过程中,学习了解到的音视频相关知识点,涉及内容包括但不限于音视频基础、音视频封装、传输协议、FFMPEG。本系列持续更新

FLV(The FLV File Format)封装协议主要结构

主要结构

  • FLV Header

  • FLV Body :由一个个Tag组成

    • Pre Tag Size :前一个tag的长度,第一个为0
    • Tag
      • Tag Header
      • Tag Body

    FLV结构简图:来源网络

  • FLV结构

详细组成

1. FLV头:The FLV header

FLV header结构

2. FLV 包体:The FLV File Body

在这里插入图片描述
在这里插入图片描述

3. FLV Tag结构

3.1 FLV Tag : 类型包含音频audio、视频video、脚本scripts、可选加密元数据optional encryption metadata、 payload.

在这里插入图片描述在这里插入图片描述
Timestamp:应用此标记中的数据的时间(以毫秒为单位)。这个值相对于FLV文件中的第一个标记,它的时间戳总是0。
TimestampExtended : 扩展Timestamp字段以形成SI32值。该字段表示时间的上8位,而前一个Timestamp字段表示时间的下24位,单位为毫秒。

3.2 Audio Tags
3.2.1 AudioData

音频Tag的Header
在这里插入图片描述
在这里插入图片描述
音频有效负载
在这里插入图片描述AudioTagBody保存音频有效负载:
在这里插入图片描述

3.2.2 AACAUDIODATA

在这里插入图片描述
在这里插入图片描述

3.3 Video Tags:视频Tags
3.3.1 VIDEODATA

The VideoTagHeader contains video-specific metadata.
在这里插入图片描述
在这里插入图片描述

3.3.2 AVCVIDEOPACKET And HVCVIDEOPACKET: AVC和HVC数据包

在这里插入图片描述

3.4 Data Tags:数据Tags
3.4.1 SCRIPTDATA

在这里插入图片描述

3.4.2 SCRIPTDATAVALUE

在这里插入图片描述
在这里插入图片描述

3.4.4 onMetaData

Script Data使用2个AMF包来存放信息。第一个AMF包是onMetaData包。第1个字节表示的是AMF包的类型,一般是字符串类型,值是0x02,之后是2字节的长度,一般长度总是10,值是0x000A。之后就是10字节长度字符串了,值是onMetaData。
第二个AMF包的第一个字节是数组类型,值是0x08,紧接着4个字节为数组元素的个数。后面即为各数组元素的封装,数组元素为元素名称和值组成的对。常见的数组元素如下表所示:
在这里插入图片描述
在这里插入图片描述
3.4.4 XMP Metadata in FLV
在这里插入图片描述

重点

1.Script Tags
2.AVCDecoderConfigurationRecord 和 HEVCDecoderConfigurationRecord
3."AVC sequence header"和"AAC sequence header",这两项数据包含的是重要的编码信息。

DecoderConfigurationRecord

下面蓝色的部分就是 FLV 文件中的 AVCDecoderConfigurationRecord 部分:

00000130h: 00 00 00 17 00 00 00 00 01 4D 40 15 FF E1 00 0A ; …M@.?.
00000140h: 67 4D 40 15 96 53 01 00 4A 20 01 00 05 68 E9 23 ; gM@.朣…J …h?
00000150h: 88 00 00 00 00 2A 08 00 00 52 00 00 00 00 00 00 ; ?..*…R…

根据 AVCDecoderConfigurationRecord 结构的定义:

configurationVersion = 01
AVCProfileIndication = 4D
profile_compatibility = 40
AVCLevelIndication = 15
lengthSizeMinusOne = FF <- 非常重要,是 H.264 视频中 NALU 的长度,计算方法是 1 + (lengthSizeMinusOne & 3),实际计算结果一直是4
numOfSequenceParameterSets = E1 <- SPS 的个数,计算方法是 numOfSequenceParameterSets & 0x1F,实际计算结果一直为1
sequenceParameterSetLength = 00 0A <- SPS 的长度
sequenceParameterSetNALUnits = 67 4D 40 15 96 53 01 00 4A 20 <- SPS
numOfPictureParameterSets = 01 <- PPS 的个数,一直为1
pictureParameterSetLength = 00 05 <- PPS 的长度
pictureParameterSetNALUnits = 68 E9 23 88 00 <- PPS

AudioSpecificConfig:

000001e0h: 00 00 00 00 00 AF 00 11 90 00 00 00 0F 09 00 02; …?.?..

根据AudioSpecificConfig结构的定义:
audioObjectType = (0x11 & 0xF8) >> 3 <- 取前5bit,结果为2
samplingFrequencyIndex = ((0x11 & 0x7) << 1) | (0x90 >> 7)<- 取后4bit,结果为3
channelConfiguration = (0x90 >> 3) & 0x0F <- 取后4bit,结果为2
frameLengthFlag = (0x90 >> 2) & 0x01<- 取后1bit,结果为0
dependsOnCoreCoder = (0x90 >> 1) & 0x01 <- 取后1bit,结果为0
extensionFlag = 0x90 & 0x01 <- 最后1bit,结果始终为0
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值