查看: 55|回复: 0

音视频基础FLV格式详解

[复制链接]
  • TA的每日心情
    奋斗
    2022-7-25 00:26
  • 签到天数: 1 天

    [LV.1]初来乍到

    5万

    主题

    5万

    帖子

    16万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    167923
    发表于 2022-8-28 08:03:52 | 显示全部楼层 |阅读模式
    FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发 视频学习地址

    Flv文件格式

    Flv 由 Flv header 和 Flv Body组成。

    Flv Body 由一系列的 Tag 组成,每个 Tag 又有一个 preTagSize 字段,标记着前面一个 Tag 的大小。

    Flv Header

    下图是 Flv Header 的内容,(UI8表示无符号8位,也就是一个字节;UB[5]表示一个字节中的5位)

    Flv Body

    Flv Body 由一个一个 Tag 组成,每个 Tag 都有一个 preTagSize 字段,标记着前面一个 Tag的大小。

    Tag有三种类型,Audio Tag(音频Tag),Video Tag(视频Tag),script Tag(又称Metadata Tag)

    每个Tag由Tag Header和Tag Data组成,对于不同类型的 Tag,Tag Header的格式都是相同的,Tag Body的格式就不一样了。

    下面这张图归纳一下上面讲的内容,看完后对 flv 应该有个总体的了解了。

    一般一个 flv 文件由一个头部信息,一个 script Tag,以及若干个 video Tag 和 audio Tag 组成。

    下面来详细讲解每种类型的 Tag Data

    Tag Data

    Flv 有三种tag:Audio Tag Data、Video Tag Data、Script Tag Data

    1、Audio Tag Data

    如果 SoundFormat=10,那么音频数据就是 AACAUDIODATA 。

    AACAUDIODATA 格式如下:

    2、Video Tag Data

    对于H.264数据来说,CodecID = 7。

    当CodecID = 7时,视频数据就是AVCVIDEOPACKET格式。

    下面讲解一下AVCVIDEOPACKET

    如果 AVCPacketType = 0,那么 Data 就是 AVCDecoderConfigurationRecord 格式。

    以下是AVCDecoderConfigurationRecord的结构

    如果 AVCPacketType = 1,那么 Data 结构就简单多了。

    说这么多可能有点乱了,下面来解析一个实例

    Tag Header:

    Type09Tag的类型,包括音频(0x08)、视频(0x09)、scriptdata0x12))Datasize00002eTagData部分的大小)Timestamp000000(时间戳)Timestamp_ex00(时间戳的扩展部分)StreamID000000(总是0

    Tag data:

    FrameType|CodecID17keyframe|AVC)(视频tag的参数

    因为CodecID=7,所以视频数据就是 AVCVIDEOPACKET 格式

    AVCVIDEOPACKET:

    AVCPaketType00ACVPacket的类型0:AVCsequenceheader1:AVCNALU2:AVCendofsequenceCompositionTime000000

    因为 ACVPaketType==0,所以 Data=AVCDecoderConfigurationRecord

    AVCDecoderConfigurationRecord:

    configurationVersion01AVCProfileIndication64profile_compatibility00AVCLevelIndication1elengthSizeMinusOneffNALUSize的长度,计算方法为:1+(lengthSizeMinusOne&3)=4numOfSequenceParameterSetse1(低五位为SPS的个数,计算方法为:numOfSequenceParameterSets&0x1F=1sequenceParameterSetLength0018SPS的长度24sequenceParameterSetNALUnits6764001eacd940a033b011000003024700006d340f162d96SPSnumOfPictureParameterSets01PPS的个数pictureParameterSetLength0006PPS的长度pictureParameterSetNALUnits68ebe3cb22c0PPSpreviousTagSize00000039

    3、Script Tag Data

    该类型 Tag 又通常被称为 MetadataTag,会放一些关于 FLV 视频和音频的元数据信息如:duration、width、height 等。通常该类型 Tag 会跟在 FileHeader 后面作为第一个 Tag 出现,而且只有一个。

    结构如下图所示

    AMF包:第一个字节表示 AMF包 的类型

    第一个 AMF包:

    第一个字节一般为0x02,表示字符串,第2-3个字节表示字符串的长度,一般为0x000A,后面跟的就是字符串,一般为"onMetaData"。

    第二个 AMF包:

    第一个字节为0x08,表示数组,第2-5个字节表示数组元素个数,后面跟着就是数组的元素,格式为:元素名长度(UI16) + 元素名(UI8[n]) + 元素的值(double),最后以009结尾。

    常见的数组元素

    欢迎朋友们加入学习交流群:960994558群内提供一些免费的FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发学习资料资料
    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    客服QQ/微信
    921439866 周一至周日:09:00 - 21:00
    致力打造互联网创业第一品牌,学习网上创业赚钱,首选泓嘉网络创业,值得信赖! 泓嘉网络科技 版权所有!

    本站内容均转载于互联网,并不代表泓嘉网立场! 拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!。

    信息产业部备案号 豫ICP备2022016396号-1

    QQ|免责声明|广告服务|小黑屋|泓嘉网创 ( 豫ICP备2022016396号-1 )|网站地图

    GMT+8, 2026-4-26 11:44 , Processed in 0.673788 second(s), 26 queries .

    快速回复 返回顶部 返回列表