封装格式 -- FLV

本文详细介绍了FLV(Flash Video)的内部结构,包括FLV Header、FLV file body及其Tag类型,如Audio Tag Body、Video Tag Body和Script Tag Body。还讨论了实际应用中遇到的问题,如FLV文件的duration获取、tag识别和seek操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


内部结构

FLV(Flash Video)是Adobe公司推出的一种媒体封装格式,适合流媒体传输。优点是封装简单,文件体积小。后缀为.flv。总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag及Tag Size对组成。
FLV结构图

1. FLV Header

– 内部结构图

在这里插入图片描述

– 关键栏位

  • SigNature:开头三个字节,固定为 FLV 的ascii码(0x46 0x4c 0x56)
  • Version:表示FLV的版本号,比如FLV版本1,则该栏位是0x01
  • FlagsAudio:1表示有audio tag,0表示没有
  • FlagsVideo:1表示有video tag,0表示没有
  • DataOffset:表示FLV header的大小,单位为字节。对于FLV版本1,固定是9,也就是header总共9字节,有效字节有5个。

2. FLV file body

  • 由一系列tag和previousTagSize组成(如图: FLV结构图);
  • Tag的大小 = 11(tag header) + n(tag body),其中previousTagSize为4字节。
  • PreviousTagSize0总是0;其它PreviousTagSizeN的值表示TagN的大小,用于逆向读取处理(因为flv没有同步字节)。

FLV tag

  • 由tag header 和 tag body组成,tag header固定为11字节。如下图:
    在这里插入图片描述

1. 类型

FLV tag分为3种类型:

  • Video Tag:存放视频相关数据
  • Audio Tag:存放音频相关数据
  • Script Tag:存放音视频元数据(metadata),一般会是第一个tag,紧跟着FLV header,有且只有一个。

2. FLV tag header

对于FLV版本1,tag header固定为11字节。

– 内部结构图

在这里插入图片描述

– 关键栏位

  • TagType:
    tag类型,1字节
    tag类型 含义
    0x8 该tag为audio tag
    0x9 该tag为video tag
    0x12 该tag为script tag
    其它 保留
  • DataSize:
    tag body的大小,3字节(不包含tag header的11字节),所以整个tag大小 = DataSize + 11。
  • TimeStamp:
    与第一个tag的时间戳差值,单位为毫秒,3字节。对于视频来说,就是DTS,单位为ms。
    第一个audio和video tag的Timestamp分别为0,亦表示解码顺序。
  • TimeStampExtended:
    时间戳的扩展字段,当Timestamp栏位不够用时,会启用这字段,表示最高八位。
  • StreamID:
    总是0。

3. Audio Tag Body

音频tag第一个字节包含音频数据的参数信息(固定的),从第二个字节开始为音频流数据。

– 内部结构图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值