加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FLV格式解析

发布时间:2020-12-15 06:17:11 所属栏目:百科 来源:网络整理
导读:FLV全称为Flash Video,这种视频格式成为互联网“新宠”,在此之前可能还是wmv/rm的最多。FLV文件格式在互联网上的应用方便造就了youtube的神话。从2006年我就一直关注Flash Video方面的东西,曾经编码把FLV文件格式解析了。非常有意思,我把FLV文件中关键帧

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”都是高->低字节序的。在计算机中,大部分是低->高字节序,
在解析时候一定要注意转换。

对于具体三种Tag:Audio/Video/Meta,
其Body里又有不同格式。Meta Tag的Body是两个AMF packets(如果懂一点Flash的话,
应该知道AMF packet大概是个什么东东,这个的格式我下次在仔细贴出来。)
Audio Tag和Video Tag的Body的第一个byte都用来标识一些与后面数据相关的信息。

Audio Tag的Body的第一个字节信息:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0?? bit从高到底
——(1)—–|–(2)–|(3)|(4)
(1):0–Uncompressed; 1–ADPCM; 2–MP3; 5–Nellymoser 8kHz mono; 6–Nellymoser?
(2):0–5.5KHz; 1–11KHz; 2–22KHz; 3–44KHz
(3):0–8bit; 1–16bit
(4):0–mono; 1–stereo

Video Tag的Body的第一个字节信息:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0?? bit从高到底
—–(1)——|——(2)—–
(1):2–Sorensen H.263; 3–Screen video; 4–On2 VP6; 5–On2 VP6 Alpha; 6–ScreenVideo 2
(2):1–keyframe; 2–inter frame; 3–disposable inter frame


转自:http://blog.csdn.net/mmtogo/article/details/4179324

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读