FLV全稱為Flash Video,這種視頻格式成為互聯(lián)網(wǎng)“新寵”,在此之前可能還是wmv/rm的最多。FLV文件格式在互聯(lián)網(wǎng)上的應(yīng)用方便造就了youtube的神話。從2006年我就一直關(guān)注Flash Video方面的東西,曾經(jīng)編碼把FLV文件格式解析了。非常有意思,我把FLV文件中關(guān)鍵幀提取出來,扔給flash video的播放器,仍然可以播放,速度很快,但是就是讓人感覺在放幻燈片。今天把以前解析FLV文件格式程序和文檔整理了一下,把FLV文件格式詳細(xì)的整理出來。下面用類似于文法規(guī)則的方法把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個(gè)byte表示int(第一個(gè)FLVTag,該值為0,一般第一個(gè)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個(gè)byte表示int
Timestamp : 3個(gè)byte表示int
TimestampExtended : 0×00 (一般是0×00)
StreamId : 0×00 0×00 0×00
Body : BodyLength個(gè)byte
上面基本上就是整個(gè)FLV文件的格式信息。有一點(diǎn)非常重要:這上面“4個(gè)byte表示int”
與"3個(gè)byte表示int”都是高->低字節(jié)序的。在計(jì)算機(jī)中,大部分是低->高字節(jié)序,
在解析時(shí)候一定要注意轉(zhuǎn)換。
對(duì)于具體三種Tag:Audio/Video/Meta,
其Body里又有不同格式。Meta Tag的Body是兩個(gè)AMF packets(如果懂一點(diǎn)Flash的話,
應(yīng)該知道AMF packet大概是個(gè)什么東東,這個(gè)的格式我下次在仔細(xì)貼出來。)
Audio Tag和Video Tag的Body的第一個(gè)byte都用來標(biāo)識(shí)一些與后面數(shù)據(jù)相關(guān)的信息。
Audio Tag的Body的第一個(gè)字節(jié)信息:
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的第一個(gè)字節(jié)信息:
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
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。