写点什么

FLV 封装格式

作者:Loken
  • 2022 年 5 月 14 日
  • 本文字数:910 字

    阅读完需:约 3 分钟

FLV 是众多封装格式中比较简单的一种,所以本书先讲它。实际上了解这些二进制格式,只要找到一个好用的工具,然后看下相关文档或者网络上的文章,就能理解各个字段的含义。这里介绍一些 分析 FLV 文件的工具。

1,FlvAnalyzer,下载地址:百度网盘, 提取码:yld0

2,flvparse ,百度网盘 ,提取码:od94

然后 FLV 是 adobe 公司出的。 标准文档 video_file_format_spec_v10 下载地址:百度网盘,提取码:4j92


下面提供一个 FLV 文件 juren.flv ,方便读者对照,下载地址:百度网盘,提取码:ptk8 ,

用 FlvAnalyzer 打开这个 juren.flv 文件,截图如下:



从上图可以看出,FLV 总体分为 两个部分,FLV Header + FLV Body。然后 FLV Header 一共占 9 个字节,FLV Header 的字段如下:

1,前面 3 个字节是 FLV 的 ASII 码对应的数字。

2,TypeFlagsAudio 跟 TypeFlagsVideo 分别代表这个 FLV 文件是否有音频 跟 视频。

3,DataOffset 字段是头部的大小。


然后 FLV body 由 很多个 Tag 组成。

FLV file body = PreviousTagSize0 + Tag1 + PreviousTagSize1 + Tag2 + ... + PreviousTagSizeN-1 + TagN
复制代码

从上图可以看到,juren.flv 主要有 3 种 Tag。

1,Script Tag,这种 Tag 通常只有一个,而且在开头的位置,主要是存储文件的基本信息,帧率,采样率,持续时间之类的。

2,Video Tag,存放 一帧视频的数据,通常是 一帧。

3,Audio Tag,存放一帧音频的数据,通常是一帧。


FLV body 的字段比较多,我挑两个重点的字段来讲,视频流的 PTS 与 DTS 分别是哪个字段。如下截图:



上图中这个 TimeStamp 就是 DTS,视频帧的解码时间,下面那个 TimeStampExtended 是扩展字段,如果 3 字节不够存储时间,就加多一个字节存储。

大家可能会有点疑问,DTS 在这里,那 PTS 在哪里?因为 只有 视频 Tag 才有两个时间,音频没有,所以 FLV 标准为了不破坏公用结构,PTS 是存放在 Tag Data 里面的,就是上图 圈出来的 CompositionTime Offset,这个是偏移时间,TimeStamp + CompositionTime Offset 才是真正的 PTS。


FLV 格式中其他字段的含义可以在以下资料看到。

1,《FFmpeg 从入门到精通》3.2 章节 "音视频文件转 FLV 格式"

2,标准文档 video_file_format_spec_v10

3,《FLV封装格式介绍及解析》

发布于: 16 小时前阅读数: 6
用户头像

Loken

关注

音视频工程师 2022.04.21 加入

音视频工程师,个人博客 www.xianwaizhiyin.net

评论

发布
暂无评论
FLV封装格式_音视频_Loken_InfoQ写作社区