音视频封装格式(1):FLV格式学习


FLV格式简介

FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等问题。



这里对我而言,需要知道的是FLB是一种复合格式,里面包含音频和视频,音频可以有它自己的编码方式,同样视频也可以有其自己的编码方式。


这里我制作了一个FLV格式的结构图, 如下:


其主要结构为:

Header + PreviousTagSize 0 + (Tag1 + Tag1's data + PreviousTagSize1) + ...... + (Tag n +  Tag n's data + PreviousTagSize n).

这里的Header一般为9个字节。其结构如下:

typedef struct {
    byte Signature[3];  // 第1-3字节为文件标识(Signature),总为“FLV”(0x46 0x4C 0x56)
    byte Version;       // 版本
    byte Flags;         // 第5个字节的前5位保留,必须为0。第6位表示是否存在音频Tag。第7位保留,必须为0。第8位表示是否存在视频Tag。
    uint DataOffset;    // 1. 从File Header开始到File Body开始的字节数,版本1中总为9。
                        // 2. 整个header的长度,一般为9;大于9表示下面还有扩展信息
                        // 3. DataOffset为Big-endian字序
} FLV_HEADER;


PreviousTagSize占用4个字节。

Tag一般占用11个字节,其结构如下:

typedef struct {
    byte TagType;       // 1byte: Tag类型(8:音频; 9:视频; 18:脚本; 其他:保留)
    byte DataSize[3];   // 3byte: 数据区长度
    byte Timestamp[3];  // 3byte: 时间戳: 整数,单位是毫秒。对于脚本型的tag总是0
    uint Reserved;      // 4byte: 时间戳扩展
                        // 1 bytes 将时间戳扩展为4bytes,代表高8位。很少用到
                        // StreamsID: 3 bytes 总是0
} FLV_TAG;
当我们读取了Tag后就可以知道Tag的data长度。


实例验证

我使用了一个red5.flv的文件,该文件里面只有视频结构,没有音频数据。其大小为27733 byte。

其调试信息如下:

Header Size: 9
PrevTagSize0 is: 4, value is: 0
Tag1 -- Size:11
Data1 -- Size: 159
PrevTagSize1 is: 4, value is: 170
Tag2 -- Size:11
Data2 -- Size: 16088
PrevTagSize2 is: 4, value is: 16099
Tag3 -- Size:11
Data3 -- Size: 1293
PrevTagSize3 is: 4, value is: 1304
Tag4 -- Size:11
Data4 -- Size: 1210
PrevTagSize4 is: 4, value is: 1221
Tag5 -- Size:11
Data5 -- Size: 1256
PrevTagSize5 is: 4, value is: 1267
Tag6 -- Size:11
Data6 -- Size: 701
PrevTagSize6 is: 4, value is: 712
Tag7 -- Size:11
Data7 -- Size: 596
PrevTagSize7 is: 4, value is: 607
Tag8 -- Size:11
Data8 -- Size: 400
PrevTagSize8 is: 4, value is: 411
Tag9 -- Size:11
Data9 -- Size: 560
PrevTagSize9 is: 4, value is: 571
Tag10 -- Size:11
Data10 -- Size: 686
PrevTagSize10 is: 4, value is: 697
Tag11 -- Size:11
Data11 -- Size: 994
PrevTagSize11 is: 4, value is: 1005
Tag12 -- Size:11
Data12 -- Size: 1010
PrevTagSize12 is: 4, value is: 1021
Tag13 -- Size:11
Data13 -- Size: 789
PrevTagSize13 is: 4, value is: 800
Tag14 -- Size:11
Data14 -- Size: 1768
PrevTagSize14 is: 4, value is: 1779
Total size is: 27733










参考

1. http://blog.sina.com.cn/s/blog_48f93b530100eyoe.html

2. http://wuyuans.com/2012/08/flv-format/

3. FLV封装格式分析器(程序+源代码)

http://download.csdn.net/detail/leixiaohua1020/6838805

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值