FLV封装格式
前段时间公司的视频客户端需要重做视频插件,视频流采用FLV封装H.264的格式。开始的时候用直接将FLV用FFmpeg解码,由于FFmpeg开始会分析视频信息,会造成要输入20帧以上的数据才会出现画面,当视频帧率较低或网络不佳时会有很长时间的等待时间,于是决定将FLV中的H.264和音频解析出来再解码,这样就不会有等待时间了,实时性好了许多。一下将FLV封装格式整理一下并记录下载,方便以后查阅。
FLV文件主要有两部分:Header和Body,其中的信息采用大端结构存储
Header
Header保存了FLV的文件的一些信息,一般占用9bytes。格式如下:
名称 | 长度 | 说明 |
---|---|---|
文件类型 | 3 bytes | “FVL” 字符串 |
版本号 | 1 bytes | 一般为 0x01 |
流信息 | 1 bytes | |
Header长度 | 4 bytes | Header的长度,一般为9,大于9表示有扩展信息 |
Body
Body用于存储视频流数据,由一个个Tag组成,每个Tag后面有4bytes的长度信息,存储了上一个Tag的长度(用来逆向读取)。整体结构如下图:

第一篇!
最近想把平时工作和工作之余学习到的知识记录下来,供以后查阅或有需要的朋友参考。写博客是一个不错的选择,于是决定从今天开始写博客。
之前一直在用WPF写客户端,最近在用C++写一些小的功能模块。主要涉及FFmpeg视频解码和语音对讲方面的知识,我打算先从最近用到的一些知识点写起。有时间再把以前学到的一些知识补充上来。