日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

FLV文件格式解析

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

最近要用到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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲国产精品一区 | 亚洲精品在线免费 | 国产精品不卡一区二区三区 | 国产精品一区二区三区免费视频 | 亚洲视频在线观看 | 福利视频三区 | 国产精品久久久久aaaa九色 | 99re66热这里只有精品8 | 日韩色综合 | 综合久色 | 一区二区视屏 | 日韩高清免费观看 | 欧美激情精品久久久久久变态 | 黄色在线观看国产 | 亚洲精品久久久久久久久久久久久 | 欧美日韩精品在线 | 亚洲91| 日韩精品一区二区三区免费视频 | 久久久国产精品x99av | 91精品国产综合久久蜜臀 | 久久精品国产一区二区电影 | 精品一区二区三区视频 | 黄色三级电影网站 | 中文字幕在线播放第一页 | 亚洲欧美精品 | 久久久久久影院 | 欧美黄色大片在线观看 | 91短视频在线看 | 国产91免费视频 | 亚洲一区二区三区精品在线 | 久久精品国产一区二区三区不卡 | 黄色国产大片 | 精品国产乱码久久久久久影片 | 国产亚洲二区 | 国产精品一区二区三区四区五区 | 男女免费观看在线爽爽爽视频 | 日韩久久久久久 | 国产成人精品一区二区三区 | 国产高清一二三区 | 国产成人精品免费视频大全最热 | 亚洲区第一页 |