FLV封装格式

简介: FLV封装格式介绍及解释,本文介绍 FLV 里面各种tag的作用。

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封装格式介绍及解析》


目录
相关文章
|
前端开发
单步调试报错 Thread 1: EXC_BAD_ACCESS (code=1, address=0x6565656565)
单步调试报错 Thread 1: EXC_BAD_ACCESS (code=1, address=0x6565656565)
414 0
|
API C# 图形学
程序技术好文:深入理解xLua热更新原理
程序技术好文:深入理解xLua热更新原理
634 0
|
编解码 索引
HTTP-FLV详解及分析(三)
HTTP-FLV详解及分析
403 0
|
存储 算法 前端开发
深入理解FFmpeg音视频编程:处理封装、解码、播放 队列与回放策略
深入理解FFmpeg音视频编程:处理封装、解码、播放 队列与回放策略
726 0
|
Linux C++ iOS开发
VLC源码解析:视频播放速度控制背后的技术
VLC源码解析:视频播放速度控制背后的技术
1151 0
|
存储 编解码 缓存
音视频基础: I帧 P帧 B帧 GOP DIR PTS DTS 帧率 码率的介绍
音视频基础: I帧 P帧 B帧 GOP DIR PTS DTS 帧率 码率的介绍
1441 0
|
Android开发 iOS开发
flutter外接纹理实现方案
Flutter外部纹理是一种可以在Flutter中显示Android或iOS原生视图的技术。它允许您在Flutter应用程序中嵌入其他平台的视图,并且这些视图会像普通Flutter小部件一样被处理。
flutter外接纹理实现方案
|
存储 调度
FreeRTOS深入教程(队列内部机制和源码分析)
FreeRTOS深入教程(队列内部机制和源码分析)
508 0
|
IDE 开发工具 开发者
Qt-Qt Creator的下载、安装与配置(Windows)
Qt-Qt Creator的下载、安装与配置(Windows)
7044 1
avformat_open_input降低延时设置
avformat_open_input降低延时设置
281 0
avformat_open_input降低延时设置