浏览
月度归档: 2017年11月

FLV封装格式 – 在FLV解析出H.264裸码流

FLV封装格式 – 在FLV解析出H.264裸码流

前面在FLV封装格式中介绍了FLV的各部分组成。接下来需要将FLV中的H.264裸码解析出来,下面就H.264在FLV视频Tag中的存放结构做一下介绍。

关于FLV的Tag结构可以在FLV封装格式中了解。
Tag的第一个字节为0x09表示视频帧,接下来是Tag Header的其他信息,这里不再详细讲述。下面介绍一下H.264视频Tag的数据区。

第一个字节

H.264的编码ID为7,所以数据区第一个字节的低4位为7,高4位一般为1或2,表示关键帧或非关键帧。 ···  阅读全文

FLV封装格式

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的长度(用来逆向读取)。整体结构如下图:

FLV结构
 ···  阅读全文

第一篇!

第一篇!

最近想把平时工作和工作之余学习到的知识记录下来,供以后查阅或有需要的朋友参考。写博客是一个不错的选择,于是决定从今天开始写博客。

之前一直在用WPF写客户端,最近在用C++写一些小的功能模块。主要涉及FFmpeg视频解码和语音对讲方面的知识,我打算先从最近用到的一些知识点写起。有时间再把以前学到的一些知识补充上来。