多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > FLV文件格式解析

FLV文件格式解析

來源:程序員人生   發布時間:2017-02-15 09:05:34 閱讀次數:4108次

最近要用到flv,整理了1些flv格式的資料,供參考。 flv文件主要由兩部份組成:header和body。

1.header

header部份記錄了flv的類型、版本等信息,是flv的開頭,1般都差不多,占9bytes。具體格式以下:
文件類型 3 bytes “FLV”
版本 1 byte 1般為0x01
流信息 1 byte 倒數第1位是1表示有視頻,倒數第3位是1表示有音頻,倒數第2、4位必須為0
header長度 4 bytes 全部header的長度,1般為9;大于9表示下面還有擴大信息

2.body

body部份由1個個Tag組成,每一個Tag的下面有1塊4bytes的空間,用來記錄這個tag的長度,這個后置用于逆向讀取處理,他們的關系以下圖:flv

2.1.Tag

每一個Tag由也是由兩部份組成的:Tag Header和Tag Data。Tag Header里寄存的是當前Tag的類型、數據區(Tag Data)長度等信息,具體以下:
名稱 長度 介紹
Tag類型 1 bytes 8:音頻
9:視頻
18:腳本
其他:保存
數據區長度 3 bytes 在數據區的長度
時間戳 3 bytes 整數,單位是毫秒。對腳本型的tag總是0
時間戳擴大 1 bytes 將時間戳擴大為4bytes,代表高8位。很少用到
StreamsID 3 bytes 總是0
數據區(data) 由數據區長度決定 數據實體

2.2.Tag Data

數據區根據Tag類型的不同可分為3種,音頻數據、視頻數據和腳本數據。

2.2.1.音頻數據

第1個byte是音頻的信息,格式以下。
名稱 長度 介紹
音頻格式 4 bits 0 = Linear PCM, platform endian
1 = ADPCM
2 = MP3
3 = Linear PCM, little endian
4 = Nellymoser 16-kHz mono
5 = Nellymoser 8-kHz mono
6 = Nellymoser
7 = G.711 A-law logarithmic PCM
8 = G.711 mu-law logarithmic PCM
9 = reserved
10 = AAC
11 = Speex
14 = MP3 8-Khz
15 = Device-specific sound
采樣率 2 bits 0 = 5.5-kHz
1 = 11-kHz
2 = 22-kHz
3 = 44-kHz
對AAC總是3
采樣的長度 1 bit 0 = snd8Bit
1 = snd16Bit
緊縮過的音頻都是16bit
音頻類型 1 bit 0 = sndMono
1 = sndStereo
對AAC總是1
第2byte開始就是音頻流數據了。

2.2.2.視頻數據

和音頻數據1樣,第1個byte是視頻信息,格式以下:
名稱 長度 介紹
幀類型 4 bits 1: keyframe (for AVC, a seekable frame)
2: inter frame (for AVC, a non-seekable frame)
3: disposable inter frame (H.263 only)
4: generated keyframe (reserved for server use only)
5: video info/command frame
編碼ID 4 bits 1: JPEG (currently unused)
2: Sorenson H.263
3: Screen video
4: On2 VP6
5: On2 VP6 with alpha channel
6: Screen video version 2
7: AVC

2.2.3腳本數據

腳本Tag1般只有1個,是flv的第1個Tag,用于寄存flv的信息,比如duration、audiodatarate、creator、width等。

首先介紹下腳本的數據類型。所有數據都是以數據類型+(數據長度)+數據的格式出現的,數據類型占1byte,數據長度看數據類型是不是存在,后面才是數據。
其中數據類型的種類有:

  • 0 = Number type
  • 1 = Boolean type
  • 2 = String type
  • 3 = Object type
  • 4 = MovieClip type
  • 5 = Null type
  • 6 = Undefined type
  • 7 = Reference type
  • 8 = ECMA array type
  • 10 = Strict array type
  • 11 = Date type
  • 12 = Long string type

如果類型為String,后面的2bytes為字符串的長度(Long String是4bytes),再后面才是字符串數據;如果是Number類型,后面的8bytes為Double類型的數據;Boolean類型,后面1byte為Bool類型。

知道了這些后再來看看flv中的腳本,1般開頭是0x02,表示String類型,后面的2bytes為字符串長度,1般是0x000a(“onMetaData”的長度),再后面就是字符串“onMetaData”。好像flv格式的文件都有onMetaData標記,在運行ActionScript的時候會用到它。后面跟的是0x08,表示ECMA Array類型,這個和Map比較相似,1個鍵隨著1個值。鍵都是String類型的,所以開頭的0x02被省略了,直接隨著的是字符串的長度,然后是字符串,再是值的類型,也就是上面介紹的那些了。

3.總結

flv的格式還是比較簡單的,header部份很簡潔,body部份都是由1個個tag,tag的話也就3種,腳本tag1般只有1個的,我想這也是flv能成為在線視頻格式的緣由吧。只要了解了格式,我們就能夠寫個程序來解析flv文件了,這也是我下1步要做的。
最后附上flv官方手冊:video_file_format_spec_v10

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产第一页在线播放 | 国产美女福利 | 国产综合视频在线观看 | 欧美视频一级 | 欧美性生活视频免费播放网址大全观看 | 国产日韩欧美久久久 | 性欧美黑人 | 精品国产免费第一区二区三区日韩 | 国产精品欧美亚洲韩国日本99 | 国产综合久久 | 亚洲第一页在线观看 | 女人毛片a毛片久久人人 | 亚洲在线视频播放 | 中文字幕日韩专区 | 欧美亚洲国产精品久久蜜芽 | 亚洲国产亚洲片在线观看播放 | 国内免费高清视频在线观看 | 亚洲综合在线观看视频 | 国产福利免费看 | 在线视频 中文字幕 | 中文字幕在亚洲第一在线 | 亚洲伊人成综合成人网 | 亚洲欧洲日韩国产一区二区三区 | 免费在线一级毛片 | 国产毛片在线视频 | 欧美视频在线一区二区三区 | 中日韩欧美中文字幕毛片 | 亚欧精品在线观看 | 亚洲一区二区三区在线网站 | 欧美jizz40性欧美 | 性欧美xxx极品另类 性欧美暴力猛交69hd | 亚洲精品久久久久久下一站 | 69av视频在线观看 | 日本高清www午色夜黄 | 成人无遮挡免费网站视频在线观看 | 亚洲第五页 | 日本www高清免费视频观看 | 龙口护士门91午夜国产在线 | 国模无水印一区二区三区 | 精品国产福利第一区二区三区 | 亚洲欧美另类日韩 |