刚才在看一些关于demux的东西,在处理flv格式的文件的时候,由于自己对flv文件的格式不了解,所以就比较云头转向,正好看到了一篇讲述flv文件格式的文章,写的比较明白,所以就转过来了。O(∩_∩)O~
flv头文件比较简单,由9个字节组成.
0-3:前3个字节是文件格式标识(FLV 464C56).
4-4:第4个字节是版本(0x01)
5-5:第5个字节的前5个bit是保留的必须是0.
第5个字节的第6个bit音频类型标志(TypeFlagsAudio)
第5个字节的第7个bit也是保留的必须是0
第5个字节的第8个bit视频类型标志(TypeFlagsVideo)
6-9:第6-9的四个字节还是保留的.其数据为 00000009 .
文件内容是由4字节的0 开始,它标志着前一个tag的size(因为前一个tag为空,所以size为0).然后就是flv文件内容的第1个tag。tag类型为1个字节,有:8音频;9视频;18(0x12) 脚本数据;其它保留。每种tag有其特定类型。
1:如下图为data tag
data tags被flash player中的NetStream调用.一个meta包的内容由两个amf包组成.第一个(amf类型0x02)是基本上总是由2个字节带字符串长度+ 字符串组成,第二个(amf类型0x08)是由一个数组组成,数组中的各个元素是由不同类型组成。(The SWF file format uses 8-bit, 16-bit, 32-bit, 64-bit, signed, and unsigned integer types. All integer values are stored in the SWF file by usinglittle-endian byte order.FLV files, unlike SWF files, store multibyte integers in big-endian byte order.)
data tags基本格式:
data tag数据组成(名字+数据):
上图中的数据分析如下:
0x12 data tag的类型标志.
000152 data tag的长度
000000 时间戳
00 时间戳扩展
000000 流id
0x02 data object的类型标志
000A object name的长度
6F6E4D65746144617461 object name(onMetaData)
08 第二个amf. data array的类型标志
0000000E 数组的长度
000D object name的长度
617564696F6461746172617465 object name(audiodatarate)
00 double类型数据标志
404C354DDA204355 double类型的数据值
2:如下图为视频tag
视频 tags基本格式:
视频tags的数据:
/*----------------------------
帧类型 4bit
1: 关键帧keyframe(视频中的关键帧,数据存储的是整个画面完整的数据,可以提取它来生成图片)
2: 中间帧inter frame(关键帧之间的状态,不完整的画面数据,需要依靠前面帧的数据生成)
3: 可任意使用的中间帧disposable inter frame(H.263 only)
视频编码id 4bit
2: Sorenson H.263(mencoder转换所使用的视频编码)
3: Screen video
4: On2 VP6
5: On2 VP6 with alpha channel
6: Screen video version 2
视频数据
If CodecID = 2
H263VIDEOPACKET
If CodecID = 3
SCREENVIDEOPACKET
If CodecID = 4
VP6FLVVIDEOPACKET
If CodecID = 5
VP6FLVALPHAVIDEOPAC
KET
If CodecID = 6
SCREENV2VIDEOPACKET
3:如下图为音频tag
音频tags基本格式:
/*---------------------------
tag数据大小 3个字节的音频数据大小
tag时间戳 3个字节tag数据应用的时间(毫秒)
tag时间戳扩展 1个字节的时间戳扩展,让时间戳变成4字节,本字节作为时间戳的高位.
streamID 3个字节的类id,总是0
//-----------------------------------------------------------------------------------------------------------
音频tags的数据:
音频格式的数据的组成如下:
音频格式 4bit 0是未压缩的,1是ADPCM,2是mp3,5是Nellymoser 8kHz,6是Nellymoser.
音频率 2bit 0 = 5.5 kHz
1 = 11 kHz
2 = 22 kHz
3 = 44 kHz
音频大小 1bit 0 = snd8Bit
1 = snd16Bit
音频类型 1bit 0 = sndMono
1 = sndStereo
音频数据 1个字节的音频数据大小,不同的音频数据格式
Nellymoser 8kHz 是一个特殊的类型—8kHz取样率在其它格式中不被支持.当音频的格式是Nellymoser 8kHz mono的时候,声音率和声音类型被忽略了. 对于其它的 Nellymoser取样率,音频格式和音频率照常.
参考资料:
flv文件格式解读:www.roading.net/blog/post_102.html
flv相关资源:blog.csdn.net/everlastinging/archive/2007/12/15/1939117.aspx
SWF and FLV File Format Specification License Agreement(flv格式文档下载):www.adobe.com/licensing/developer/fileformat/license/
分享到:
相关推荐
flv文件格式说明
全面的解析flv文件格式,中文式的描述,但不偏离原始英文文档,比原始文档讲解更加清晰,不错的flv解析格式,适用于新手,希望可以帮助到你。
FLV文件格式详细 FLV文件: FLVHeader FLVStream FLVHeader : Signature Version Flags Offset Signature : "FLV" Version : 0×01 Flags : 0×01 | 0×04 | 0×05 //1:video,4:audio,5:video+audio Offset : 0×00 0...
图解FLV文件的Tag格式,AVC(H264)和AAC是如何放入FLV的,如果通过RTMP发送FLV
一个开源的FLV文件格式分析器源码,c++编写的
FLV格式文件播放器
android 平台不支持FLV格式文件解析,这个文档帮助开发者编写FLV解析程序。压缩包里有两个文件:adobe官方英文文档和一个中文的说明。
FLV媒体文件的解析,本代码实现了FLV文件文件格式的解析(含有代码注释) 1.解析FLV 文件头 2.解析FLV Body内容,包括解析PreviousTagSize 和Tag 标签内容(Script Tag, Audio Tag, Video Tag) 3.提取FLV文件的H264...
用于分隔,合并FLV文件。 可以讲FLV文件动的音频流导出为mp3格式 还可以转换多种视频文件格式
支持video视频插件播放flv格式的视频文件 可以让6.0以上版本的video视频插件支持播放flv格式的 视频文件 播放效果很不错
Flv文件解析(c#,包含flv文件结构说明) Flv文件解析(c#,包含flv文件结构说明) Flv文件解析(c#,包含flv文件结构说明)
flv格式文件播放器下载(带格式转换) 由刘于兵搜藏 yubing8882002@yahoo.com.cn
分析flv格式工具与测试flv文件
C++实现h264码流保存为FLV文件,支持h264文件转flv文件,也支持保存网络直播码流为flv文件。含例子demo
一个标准的Flv文件 含音频 含视频 来源于FMS流媒体服务器案例
python解析flv文件库,内含详细注释介绍flv文件结构及解析原理
title: '[Python][多媒体处理]用Python执行批量*.flv文件格式转换mp4'实现当前目录下的全部 .flv 文件转化为 .mp4 格式。使
合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件合并2个FLV文件
真正可以播放FLV文件的播放器
html播放flv文件一整套源码案例实例。支持中文名flv,只需要新建html文件时选择相应的编码:charset=gb2312或charset=utf-8