FLV全称为Flash Video,这种视频格式成为互联网“新宠”,在此之前可能还是wmv/rm的最多。FLV文件格式在互联网上的应用方便造就了youtube的神话。从2006年我就一直关注Flash Video方面的东西,曾经编码把FLV文件格式解析了。非常有意思,我把FLV文件中关键帧提取出来,扔给flash video的播放器,仍然可以播放,速度很快,但是就是让人感觉在放幻灯片。今天把以前解析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×00 0×00 0×09
FLVStream : (PreviousTagSize FLVTag)*
PreviousTagSize : 4个byte表示int(第一个FLVTag,该值为0,一般第一个Tag是Meta)
FLVTag : Type BodyLength Timestamp TimestampExtended StreamId Body
Type : 0×08 | 0×09 | 0×12 //0×08:audio,0×09:video,0×12:meta
BodyLength: 3个byte表示int
Timestamp : 3个byte表示int
TimestampExtended : 0×00 (一般是0×00)
StreamId : 0×00 0×00 0×00
Body : BodyLength个byte
上面基本上就是整个FLV文件的格式信息。有一点非常重要:这上面“4个byte表示int”
与"3个byte表示int”都是高->低字节序的。在计算机中,大部分是低->高字节序,
在解析时候一定要注意转换。