FLV文件结构解析

本文探讨了FLV文件的结构,特别是Tag的组成,包括数据头、数据体和数据大小三个部分。内容中提到了Tag如何用于记录音视频信息,如duration、width和stereo等,并指出业界通常会在脚本Tag内添加keyframes对象,存储关键帧的文件位置信息。

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

1. FLV文件格式相对于MP4,简单很多。
   FLV Header(9Bytes) + FLV Body
   
                    a比特: 1:有音频; 0:无音频
                    v比特: 1:有视频; 0:无视频   如果音视频都有这个字节为0x05
   'F'|'L'|'V'|0x01|0b00000a0v| 0x00 00 00 09|
                    |                                         |
         版本字节一般为0x01      头长度 固定为9
 
    FLV Body由一系列的Tag组成,每个tag的结构如下:
    { 0x00000000| tag_header0| tag_data0 } | {tag_size0| tag_header1 | tag_data1 } | {tag_size1| tag_header2 | tag_data2 } |...
       tag_size(n) = tag_data_size(n-1) + 11
       解析完一个tag后,读取下4个字节,可以比较下看是不是前帧完全解码完毕。

       除了可以验证码流外,还有什么样的好处促使FLV格式采用这种方式呢?不太清楚。

        0x00000000| { tag_header0| tag_data0  | tag_size0} | { tag_header1 | tag_data1 | tag_size1} |...

       Tag body也可以这样看,编码时按照: 数据头 数据体 数据大小 三部分来划分,更适合一些。下面各个tag都是按照这个结构来写的。 


    Tag header 11Bytes

    |1Byte Tag类型                                |  只支持3类, 0x08音频; 0x09视频;0x12脚本
    |3Byte data_size数据区长度         |  纯数据长度,不包括头信息的15字节
    |3Byte timestamp 时间戳               |  最终的时间戳 = (timestamp_ex<< 24) | timestamp   
    |1Byte timestamp_ex扩展时间戳 |  最终时间戳的高8位。不知道为什么定义成这样,可能是因为标准扩展
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值