前言
????????首先,我們來(lái)回顧一下直播的整個(gè)鏈路(詳見(jiàn) 音視頻知識(shí)體系(基礎(chǔ)篇1)----媒體格式)。我們最常接觸到的是直播的播放器端,例如,斗魚、虎牙、快手、抖音里面的直播。我們又稱播放器為收流端,技術(shù)上可以看作為流媒體數(shù)據(jù)的接收顯示器。
????????在直播中,F(xiàn)LV格式流數(shù)據(jù)接收仍舊是主流,那我們這篇文章就來(lái)看下如何下載和處理FLV格式的流媒體數(shù)據(jù)。

1. 準(zhǔn)備工作
????????要先看如何獲取一段flv的流。我們使用ffmpeg工具
ffmpeg -i rtmp://server/live/streamName -c copy out.flv
-i : 指定文件
-c : 指定為音視頻
out.flv 下載下來(lái)的流
如果需要加header驗(yàn)證 加入?yún)?shù) -headers $’Referer: http://trovo.live/app'
2. Flv格式分析
????????FLV視頻格式是Adobe推出的Flash可直接播放的視頻流。需要注意的概念是編碼格式和文件封裝格式。編碼格式是指編碼器輸出的“裸”的視頻流或音頻流,常見(jiàn)的視頻編碼格式就是H.264,常見(jiàn)的音頻編碼格式是AAC和MP3。FLV是一種文件封裝格式,它可以封裝H264和AAC,其他常見(jiàn)的文件封裝格式還有MP4、TS、MKV等等。不同的文件封裝格式可以相互轉(zhuǎn)換,只要把一種文件封裝格式拆包,解出“裸”的視頻流和音頻流,再按另一種文件封裝格式打包,就可以完成轉(zhuǎn)換,不需要重新編碼,因此速度非??臁?/p>
FLV的文件格式定義最權(quán)威的就是Adobe的官方文檔
https://www.adobe.com/content/dam/acom/en/devnet/flv/video_file_format_spec_v10.pdf
總體上看,F(xiàn)LV包括文件頭(File Header)和文件體(File Body)兩部分,其中文件體由一系列的Tag組成。因此一個(gè)FLV文件是如圖1結(jié)構(gòu)。

其中,每個(gè)Tag前面還包含了Previous Tag Size字段,表示前面一個(gè)Tag的大小。Tag的類型可以是視頻、音頻和Script,每個(gè)Tag只能包含以上三種類型的數(shù)據(jù)中的一種。圖2展示了FLV文件的詳細(xì)結(jié)構(gòu)。

2.1 Header分析

----待續(xù)
3. 參考
[1] 多媒體文件格式(二):FLV 格式
[2] FLV視頻文件格式分析(廖雪峰)
[3] https://blog.csdn.net/leixiaohua1020/article/details/17934487