网站首页 > 编程文章 正文
FLV格式的封装原理,贴上来辅助学习之用。
FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。目前主流的视频网站如优酷网,土豆网,乐视网等网站无一例外地使用了FLV格式。FLV封装格式的文件后缀通常为“.flv”。
总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成。因此一个FLV文件是如图1结构。
图1.文件结构(简图)
其中,每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。图2展示了FLV文件的详细结构。
图2.FLV文件结构(详图)
下面详细介绍一下三种Tag的Tag Data部分的结构。
(a)Audio Tag Data结构(音频Tag)
音频Tag开始的第1个字节包含了音频数据的参数信息,从第2个字节开始为音频流数据。结构如图3所示。
图3.Audio Tag Data结构
第1个字节的前4位的数值表示了音频编码类型。如表1所示。
表1.音频编码类型
值
含义
0
Linear PCM,platform endian
1
ADPCM
2
MP3
3
Linear PCM,little endian
4
Nellymoser 16-kHz mono
5
Nellymoser 8-kHz mono
6
Nellymoser
7
G.711 A-law logarithmic PCM
8
G.711 mu-law logarithmic PCM
9
reserved
10
AAC
14
MP3 8-Khz
15
Device-specific sound
第1个字节的第5-6位的数值表示音频采样率。如表2所示。
表2.音频采样率
值
含义
0
5.5kHz
1
11KHz
2
22 kHz
3
44 kHz
PS:从上表可以发现,FLV封装格式并不支持48KHz的采样率。
第1个字节的第7位表示音频采样精度。如表3所示。
表3.音频采样精度
值
含义
0
8bits
1
16bits
第1个字节的第8位表示音频类型。
表4. 音频类型
值
含义
0
sndMono
1
sndStereo
(b)Video Tag Data结构(视频Tag)
视频Tag也用开始的第1个字节包含视频数据的参数信息,从第2个字节为视频流数据。结构如图4所示。
图4.Video Tag Data结构
第1个字节的前4位的数值表示帧类型。如表5所示。
表5.帧类型
值
含义
1
keyframe (for AVC,a seekable frame)
2
inter frame (for AVC,a nonseekable frame)
3
disposable inter frame (H.263 only)
4
generated keyframe (reserved for server use)
5
video info/command frame
第1个字节的后4位的数值表示视频编码类型。如表6所示。
表6.视频编码类型
值
含义
1
JPEG (currently unused)
2
Sorenson H.263
3
Screen video
4
On2 VP6
5
On2 VP6 with alpha channel
6
Screen video version 2
7
AVC
(c)Script Tag Data结构(控制帧)
该类型Tag又通常被称为Metadata Tag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。通常该类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。结构如图5所示。
图5.Script Tag Data结构
第一个AMF包:
第1个字节表示AMF包类型,一般总是0x02,表示字符串。第2-3个字节为UI16类型值,标识字符串的长度,一般总是0x000A(“onMetaData”长度)。后面字节为具体的字符串,一般总为“onMetaData”(6F,6E,4D,65,74,61,44,61,74,61)。
第二个AMF包:
第1个字节表示AMF包类型,一般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数。后面即为各数组元素的封装,数组元素为元素名称和值组成的对。常见的数组元素如表7所示。
表7.常见MetaData
值
含义
duration
时长
width
视频宽度
height
视频高度
videodatarate
视频码率
framerate
视频帧率
videocodecid
视频编码方式
audiosamplerate
音频采样率
audiosamplesize
音频采样精度
stereo
是否为立体声
audiocodecid
音频编码方式
filesize
文件大小
猜你喜欢
- 2024-10-21 Qt/C++音视频开发61-多屏渲染/解码渲染到多个窗口/画面实时同步
- 2024-10-21 Sip网络广播号角,sip广播系统公共广播系统有源喇叭
- 2024-10-21 Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转
- 2024-10-21 基于GB28181协议,实现WVP平台语音广播
- 2024-10-21 ROIP 无线集群网关介绍(ros网关ip设置)
- 2024-10-21 GOIP移动电话网关简介(移动网关管理网址)
- 2024-10-21 ICR-1000 录音录像服务器性能参数
- 2024-10-21 Qt/C++检查是否含有B帧/转码推流/拉流显示/监控拉流推流
- 2024-10-21 Qt编写4K/8K大分辨率播放器(8K占用1%CPU)
- 2024-10-21 SIP停车场无人值守对讲解决方案(停车场无人值守系统)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)