FLV-RTMP關(guān)系

RTMP協(xié)議與 FLV 又有什么關(guān)系呢?實(shí)際 上沉唠,F(xiàn)LV文件與 RTMP 之間是“近親”關(guān)系,甚至比“近親”還要近娇掏,親得就好像是“一個(gè)人”似的桶雀。

FLV文件格式

我們先來看一下 FLV 的文件格式,如下圖所示:

FLV文件格式結(jié)構(gòu)圖

閱讀FLV 格式規(guī)范文檔 從圖中我們可以看出改备,F(xiàn)LV 文件格式由 FLV Header 和 FLV Body 兩部分組成控漠。其中,F(xiàn)LV Header 由 9 個(gè)字節(jié)組成悬钳,Body由 Pre TagSize 和 Tag 組 成盐捷。

為使你對(duì)它們有一個(gè)更清楚的認(rèn)知,下面我們就來詳細(xì)介紹一下 FLV Header 和 FLV Body默勾。

1. FLV Header

它由 9 個(gè)字節(jié)組成:3個(gè)字節(jié)的 “F”“L”“V”字母碉渡,用于標(biāo)記該文件是 FLV 文件;1個(gè)字節(jié)的 Version, 指明使用的 FLV 文件格式的版本;1個(gè)字節(jié)的 Type 標(biāo)識(shí)母剥,用于表明該FLV文件中是否包括音頻或視頻; 4個(gè) 字節(jié)的 FLV Header ?度滞诺,由于 FLV 文件格式頭是固定 9 個(gè)字節(jié),這個(gè)字段設(shè)置得有點(diǎn)多余媳搪。

Type 標(biāo)識(shí)(TypeFlag)又可以細(xì)分為: 1bit 用于標(biāo)識(shí)FLV文件中是否有音頻數(shù)據(jù);1bit標(biāo)識(shí)FLV文件中是否有視頻數(shù)據(jù);如果兩個(gè) bit 位同時(shí)置 1铭段,說明該FLV 文件中既有音頻數(shù)據(jù)又有視頻數(shù)據(jù),這也是通常情況下 FLV Header 的設(shè)置;除了兩個(gè) bit 的音視頻數(shù)據(jù)標(biāo)識(shí)外秦爆,其他位都是預(yù)留位序愚,必須全部置0。詳細(xì)的含義可 以參考下面張圖表:

image-20210109105929512

這張圖表清晰地表達(dá)了 FLV Header 中每個(gè)域所占的字節(jié)以及該域的具體含義等限。

2. FLV Body

從“FLV文件格式結(jié)構(gòu)圖”我們可以看出爸吮,F(xiàn)LV Body 是由多個(gè) Previous TagSizeTag 組成的。其含義如 下圖表所示望门,其中PreviousTagSize 占 4個(gè)字節(jié)形娇,表示前一個(gè) Tag 的大小。這里需要注意的是筹误,第一個(gè) Previous TagSize 比較特殊桐早,由于它前面沒有 Tag 數(shù)據(jù),所以它的值必須為 0

image-20210109110131182

接下來我們?cè)賮砜匆幌?FLV 中的 Tag哄酝,從 FLV文件格式結(jié)構(gòu)圖中我們可以看到 Tag 由兩部分組成友存,即 Tag Header 和 Tag Data

Tag Header 各字段的含義如下圖所示:

Tag Header
  • TagType陶衅,占1個(gè)字節(jié)屡立,表示該Tag的類型,可以是音頻搀军、視頻腳本膨俐。如果類型為音頻,說明這個(gè)Tag存 放的是音頻數(shù)據(jù);如果類型是視頻罩句,說明存放的是視頻數(shù)據(jù)焚刺。
  • DataSize,占3個(gè)字節(jié)的止,表示音頻/視頻數(shù)據(jù)的?度檩坚。
  • Timestamp和擴(kuò)展Timestamp着撩,一共占4個(gè)字節(jié)诅福,表示數(shù)據(jù)生成時(shí)的時(shí)間戳
  • StreamID拖叙,占3個(gè)字節(jié)氓润,總是為 0

而Tag Data 中存放的數(shù)據(jù)薯鳍,是根據(jù) TagType 中的類型不同而有所區(qū)別的咖气。也就是說,假如 TagType 指定的 是音頻挖滤,那么 Tag Data中存放的就是音頻數(shù)據(jù);如果 TagType 指定的是視頻崩溪,則Tag Data中存放的就是視 頻數(shù)據(jù)。

無論TagData中存放的是音頻數(shù)據(jù)還是視頻數(shù)據(jù)斩松,它們都是由 Header 和 Data 組成伶唯。也就是說,如果該 Tag 是一個(gè)音頻 Tag 惧盹,那么它的數(shù)據(jù)就是由“AudioHeader + AudioData”組成;如果是一個(gè)視頻 Tag乳幸,則它的數(shù)據(jù)是由“VideoHeader + VideoData”組成。

翻看RTMP協(xié)議钧椰,查看它的 6.1.1 小節(jié)粹断,你會(huì)發(fā)現(xiàn)它定義的 RTMP Message Header 與 Tag Header 是一模一樣的。下圖是我從 RTMP 協(xié)議中截取的協(xié)議頭:

RTMP Message Header

因此嫡霞,我們可以說FLV文件就是由“FLV Header + RTMP數(shù)據(jù)”構(gòu)成的瓶埋。這也揭開了 FLV與 RTMP之間的關(guān) 系秘密,即 FLV 是在 RTMP 數(shù)據(jù)之上加了一層“?甲”。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末养筒,一起剝皮案震驚了整個(gè)濱河市狡汉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闽颇,老刑警劉巖盾戴,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異兵多,居然都是意外死亡尖啡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赵辕,“玉大人勘伺,你說我怎么就攤上這事∥钒穑” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奈懒,是天一觀的道長(zhǎng)奠涌。 經(jīng)常有香客問我,道長(zhǎng)磷杏,這世上最難降的妖魔是什么溜畅? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮极祸,結(jié)果婚禮上慈格,老公的妹妹穿的比我還像新娘。我一直安慰自己遥金,他們只是感情好浴捆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稿械,像睡著了一般选泻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溜哮,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天滔金,我揣著相機(jī)與錄音,去河邊找鬼茂嗓。 笑死餐茵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的述吸。 我是一名探鬼主播忿族,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锣笨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了道批?” 一聲冷哼從身側(cè)響起错英,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隆豹,沒想到半個(gè)月后椭岩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璃赡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年判哥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碉考。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡塌计,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侯谁,到底是詐尸還是另有隱情锌仅,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布墙贱,位于F島的核電站热芹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫩痰。R本人自食惡果不足惜剿吻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一窍箍、第九天 我趴在偏房一處隱蔽的房頂上張望串纺。 院中可真熱鬧,春花似錦椰棘、人聲如沸纺棺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祷蝌。三九已至,卻和暖如春帆卓,著一層夾襖步出監(jiān)牢的瞬間巨朦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工剑令, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糊啡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓吁津,卻偏偏與公主長(zhǎng)得像棚蓄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 講講FLV文件格式梭依。以及數(shù)據(jù)如何放置的稍算。 FLV里面是由多個(gè)Tag構(gòu)成的:[[tag1][tag2][tag3][...
    半島夏天閱讀 1,223評(píng)論 0 1
  • 首先我們獲得h264的流,在監(jiān)聽里役拴,我們通過參數(shù)可以獲得RTMP包 IStreamPacket糊探,調(diào)用getData...
    userName閱讀 3,538評(píng)論 0 52
  • 前言 2018 年 12 月,接到了一個(gè)調(diào)查原有直播系統(tǒng)播放端與編碼端時(shí)差對(duì)不上的任務(wù)河闰,于是首先開始學(xué)習(xí) RTMP...
    jerryyyq閱讀 1,284評(píng)論 0 6
  • 簡(jiǎn)介 FLV(Flash Video)是現(xiàn)在非常流行的流媒體格式侧到,由于其視頻文件體積輕巧、封裝播放簡(jiǎn)單等特點(diǎn)淤击,使其...
    輕口味閱讀 1,092評(píng)論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)匠抗、焦點(diǎn)、注意力污抬、語言聯(lián)想汞贸、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,719評(píng)論 0 5