視頻容器
視頻容器(又稱視頻文件格式)就是用來裝載多媒體數(shù)據(jù)流(包含:視頻流、音頻流和字幕流)的文件格式
健霹,一般包含:文件頭部分(說明多媒體數(shù)據(jù)符合的編碼格式及規(guī)范信息)、索引部分哮笆、媒體數(shù)據(jù)部分菇曲。
常見的視頻容器有:
FLV
flash video 流媒體文件格式,是隨著Flash MX的推出發(fā)展而來的網(wǎng)絡(luò)視頻封裝格式码党。具有如下特點:
文件體積小德崭,清晰的FLV視頻1分鐘在1MB左右,是普通文件體積的1/3
再加上CPU占有率低
提供數(shù)字版本保護(hù)功能
解決了視頻文件導(dǎo)入Flash后揖盘,導(dǎo)出的SWF文件體積龐大問題
FLV的文件構(gòu)成
Tag Header由11字節(jié)組成:
1:Tag的類型:音頻(0x08)眉厨,視頻(0x09),Script Data(0x12)
2-4:表示一個無符號24位整型數(shù)值兽狭,表示當(dāng)前Tag Data的大泻豆伞鹿蜀;
5-7:無符號24位整型數(shù)值,當(dāng)前Tag的開始時間戳(單位為ms)
8:為時間戳的擴(kuò)展字節(jié)服球,當(dāng)前24位不夠用時茴恰,該字節(jié)作為最高位,將時間戳擴(kuò)展為32位無符號整數(shù)
9-11:表示Stream ID斩熊,總是0
音頻Tag Data:第一個字節(jié)是音頻流信息往枣,接著是音頻流數(shù)據(jù),其中第一個字節(jié)中信息有:
4位 表音頻編碼格式
2位 表示采樣率
1位 采樣的長度(0: 8bit/1: 16bit),壓縮過的都1
1位 音頻類型(0: Mono/1: Stereo)
視頻Tag Data:第一個字節(jié)也是視頻流信息(4bit表示幀類型粉渠、4bit表示編碼類型)分冈,接著是視頻流數(shù)據(jù)。
Script Data:是flv的第一個Tag,僅有一個霸株,用于存放flv中存放媒體流的總體信息雕沉,包括時長、創(chuàng)建時間等去件,數(shù)據(jù)都是以:數(shù)據(jù)類型 [數(shù)據(jù)長度] 數(shù)據(jù)
格式出現(xiàn)
FLV在H.264的視頻規(guī)格或是AAC的音源規(guī)格都達(dá)到功能極限坡椒,為了克服這個格式上的限制,F4V
于是誕生箫攀。F4V是基于ISO base media file format(MPEG-4 Part 12)定制的肠牲,支持視頻類型為H.264,圖片類型為GIF靴跛、PNG缀雳、JPEG,音頻類型為AAC梢睛、MP3肥印。由于MPEG-4 Part 14 (即MP4規(guī)范)也是對MPEG-4 Part 12的擴(kuò)展,直接分析MP4的文件結(jié)構(gòu)绝葡。
參考
FLV and F4V File Format Specification
mp4
mp4是一種符合MPEG-4 part 14規(guī)范的文件格式深碱,文件擴(kuò)展名為.mp4,以存儲數(shù)字音頻及數(shù)字視頻為主藏畅。該標(biāo)準(zhǔn)是對MPEG-4 part 12的擴(kuò)展敷硅。 1998年2月11日,國際標(biāo)準(zhǔn)組織(IS0)認(rèn)可QuickTime(蘋果支持的視頻文件格式MOV)檔案格式作為MPEG-4標(biāo)準(zhǔn)的基礎(chǔ)。所以兩種文件格式大致相同愉阎。
MP4的文件結(jié)構(gòu):
MP4文件中的所有數(shù)據(jù)都裝在box(QuickTime中為atom)中绞蹦,由若干個box組成。每個box有類型和長度榜旦,可以將理解為一個數(shù)據(jù)對象塊幽七。box中可以包含另外一個box,這種box稱為container box溅呢。
一個MP4文件首先會有且只有一個“ftyp”類型的box澡屡,作為MP4格式的標(biāo)志并包含關(guān)于文件的一些信息猿挚;
有且只有一個“moov”類型的box(Movie Box),包含了媒體的metadata信息驶鹉;
MP4文件的媒體數(shù)據(jù)包含在多個“mdat”類型的box中绩蜻。
在流媒體應(yīng)用場景,不能預(yù)先保存關(guān)于整個流數(shù)據(jù)的metadata信息室埋,且預(yù)先保存的metadata越少獲取到數(shù)據(jù)越快辜羊。所以上面的文件組合方式就不太適用于流媒體。然而MPEG-4 標(biāo)準(zhǔn)允許以fragmented方式組合mdat box 以及其metadata (moof box)词顾,結(jié)構(gòu)如下圖所示:
參考
QuickTime File Format Specification
TS
MPEG2-TS(Transport Stream“傳輸流”;又稱MTS碱妆、TS)是一種傳輸和存儲包含音效肉盹、視頻與通信協(xié)議各種數(shù)據(jù)的標(biāo)準(zhǔn)格式,多用于數(shù)字電視廣播系統(tǒng)疹尾。在傳輸中Packet是最基本單位上忍,由 Header 和 Payload 組成,固定長度為188個字節(jié)纳本,但是后面有可能會追加一些驗證字節(jié)窍蓝,所以packets的長度有可能變?yōu)?92、204或者208Byte的長度繁成。Packet結(jié)構(gòu)如圖所示
終端接收到的視頻數(shù)據(jù)其實是一段段的碼流吓笙,根據(jù)處理階段可以分成以下幾個類型:
TS流(Transport stream):傳輸流,將具有共同時間基準(zhǔn)或獨立時間基準(zhǔn)的一個或多個PES組合而成的單一數(shù)據(jù)流巾腕,用于數(shù)據(jù)傳輸面睛。
PES流(Packetized elementary stream):把基本碼流ES分割成段,并加上相應(yīng)頭打包成形的打包基本碼流尊搬。
ES流(Elementary stream):基本碼流叁鉴,不分段的音頻、視頻或其他信息的連續(xù)碼流佛寿。
參考
其它視頻容器格式還有:mkv幌墓、vob、 avi冀泻、asf常侣、3gp、mov腔长、rm袭祟、rvm、rmvb捞附、vob 等
ps:目前我們項目中使用的ExoPlayer巾乳,支持的視頻容器有
ps支持文件格式并不代表能播放視頻您没。
因為Exoplayer采用的是硬解碼方式,視頻能否播放取決于當(dāng)前系統(tǒng)是否支持該視頻編碼方式胆绊。
視頻編碼格式
通俗的講就是音視頻數(shù)據(jù)的壓縮標(biāo)準(zhǔn)氨鹏,主要作用于將視頻像素數(shù)據(jù)(RGB,YUV等)、音頻PCM數(shù)據(jù)壓縮成視頻碼流压状、音頻碼流等仆抵。每種視頻容器對兼容的編碼格式有所限制,基于Matroska(開源的多媒體封裝規(guī)范)實現(xiàn)的mkv容器种冬,可以把多種不同編碼的音視頻封裝到一個容器里镣丑。
MPEG系列
(由ISO[國際標(biāo)準(zhǔn)組織機(jī)構(gòu)]下屬的MPEG[運動圖象專家組]開發(fā) )視頻編碼方面主要是Mpeg1(vcd用的就是它)、Mpeg2(DVD使用)娱两、Mpeg4(的DVDRIP使用的都是它的變種莺匠,如:divx,xvid等)十兢、Mpeg4 AVC(正熱門)趣竣;
音頻編碼方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(大名鼎鼎的mp3)旱物、MPEG-2 AAC 遥缕、MPEG-4 AAC等等。注意:DVD音頻沒有采用Mpeg的宵呛。
H.26X系列
(由ITU[國際電傳視訊聯(lián)盟]主導(dǎo)单匣,側(cè)重網(wǎng)絡(luò)傳輸,注意:只是視頻編碼)
包括H.261宝穗、H.262封孙、H.263、H.263+讽营、H.263++虎忌、H.264、H.265
其它
RealNetworks公司的:RealVideo (rm橱鹏、rvm膜蠢、rmvb 容器支持的編碼方式)
SMPTE 系統(tǒng)列:VC-1(基于Windows Media Video 9壓縮技術(shù)的視頻壓縮標(biāo)準(zhǔn)、 VC-2 VC-3莉兰、 VC-5
開放媒體聯(lián)盟:AV1(AOMedia Video 1挑围,是一個開放,免專利的視頻編碼格式,由google 推出的 VP9延展糖荒、WebM視頻容器支持的編碼)
AVS(Audio Video coding Standard)杉辙,即數(shù)字音視頻編解碼技術(shù)標(biāo)準(zhǔn),為中國第二代信源編碼標(biāo)準(zhǔn)
捶朵。
目前最新視頻編碼:AV1 \ H265\ AVS的對比:
AV1 :延展VP9(目前好像還是VP9使用的比較多),開放蜘矢、免專利狂男,但是硬件支持有限,需要純軟件實現(xiàn)編解碼品腹,現(xiàn)有技術(shù)有定的瓶頸岖食。
H265: 旨在有限帶寬下傳輸更高質(zhì)量的網(wǎng)絡(luò)視頻,使在線播放1080p的全高清視頻舞吭、4K和8K超高清視頻成為可能泡垃;且硬件支持比較廣泛。(缺點收費)
AVS 國產(chǎn)
更多詳情信息參考:
視頻編碼
視頻傳輸
首先得了解幾個概念:
視頻流:服務(wù)器在向用戶傳輸視頻文件時羡鸥,不是一次將文件整體發(fā)送出去蔑穴,將一連串的媒體數(shù)據(jù)壓縮后,經(jīng)過網(wǎng)絡(luò)分段發(fā)送數(shù)據(jù)惧浴,使得數(shù)據(jù)包得以像流水一樣發(fā)送澎剥,每一段都是獨立可播的小片斷。
下面將介紹視頻傳輸相關(guān)的幾個常用協(xié)議:
RTP/RTCP/RTSP
RTSP:實時流協(xié)議(Real Time Streaming Protocol)
應(yīng)用層協(xié)議赶舆,RTSP提供了一個可供擴(kuò)展的框架,它的意義在于使得實時流媒體數(shù)據(jù)的受控和點播變得可能祭饭,提供DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等方法芜茵,本身并不傳輸數(shù)據(jù),基于面向無連接的傳輸協(xié)議UDP倡蝙。
RTP:實時傳輸協(xié)議(Real-time Transport Protocol)
應(yīng)用層網(wǎng)絡(luò)傳輸協(xié)議九串,對流媒體數(shù)據(jù)進(jìn)行封包并實現(xiàn)媒體流的實時傳輸,每一個RTP數(shù)據(jù)報都由頭部(Header)和負(fù)載(Payload)兩個部分組成寺鸥,其中頭部前12個字節(jié)的含義是固定的猪钮,而負(fù)載則可以是音頻或者視頻數(shù)據(jù)。與控制協(xié)議RTCP一起使用胆建,而且它是創(chuàng)建在UDP協(xié)議上的烤低。該協(xié)議直接傳輸視頻流不再需要容器進(jìn)行封裝。
RTCP :實時傳輸控制協(xié)議(Real-time Transport Control Protocol)
和RTP一起協(xié)作將多媒體數(shù)據(jù)打包和發(fā)送笆载。RTCP定期在流多媒體會話參加者之間傳輸控制數(shù)據(jù)扑馁。RTCP的主要功能是為RTP所提供的服務(wù)質(zhì)量 提供反饋。
RTSP發(fā)起/終結(jié)流媒體凉驻、RTP傳輸流媒體數(shù)據(jù) 腻要、RTCP對RTP進(jìn)行控制、同步
其它的實時流傳輸協(xié)議還有:RTMP(Adobe公司提出基于TCP實時消息傳輸應(yīng)用層協(xié)議)涝登、MMS(微軟提出的一種串流媒體傳送協(xié)議雄家,傳遞和接收Windows Media服務(wù)器中.asf文件)
HLS - HTTP live streaming
蘋果公司實現(xiàn)的基于HTTP的流媒體傳輸協(xié)議,可實現(xiàn)直播和點播胀滚,相對于RTMP其它有較高的延遲趟济。當(dāng)媒體流正在播放時乱投,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應(yīng)不同的數(shù)據(jù)速率咙好。HTML5可以直接打開播放篡腌。
獲取視頻流程是如下圖所示:
其中index文件是包含元數(shù)據(jù)的extended M3U (m3u8) 文件。如果視頻具備有不同帶寬切換則會有二級:主index文件中包含子index文件的下載地址勾效,子index文件包含視頻流 MPEG-TS 文件的下載地址嘹悼。m3u8是個文本文件,其中標(biāo)簽定義可參考HTTP Live Streaming
點播VOD實現(xiàn):首先下載index文件层宫,再根據(jù)不同帶寬獲取子index文件地址杨伙,下載子index文件,再根據(jù)其中記錄的視頻流地址下載視頻文件萌腿,進(jìn)行解碼播放限匣。如果不切換碼率,m3u8 文件只需要下載一次毁菱,且二級index中包含所有的ts文件下載地址米死。
Live 實現(xiàn):實時生成 m3u8 和 ts 文件, 在點播放的基礎(chǔ)上更新二級index文件贮庞。
其它基于HTTP實現(xiàn)的自適應(yīng)串流技術(shù)有:
MPEG-DASH 是基于HTTP的自適應(yīng)串流方案中的唯一國際標(biāo)準(zhǔn)峦筒,與具體編碼無關(guān),僅是作為一個標(biāo)準(zhǔn)
HDS(Adobe HTTP Dynamic Streaming窗慎,切片文件格式為 FLV/F4V/MP4物喷,索引文件為f4m,同時支持直播和時移)
MSS(Microsoft Smooth Streaming遮斥,切片格式為 mp4峦失,索引文件為ism/ismc)
目前我們項目中使用的ExoPlayer 提供了
DASH
(DashMediaSource)
SmoothStreaming (SsMediaSource),HLS
(HlsMediaSource)` and regular media files (ExtractorMediaSource)
實時傳輸協(xié)議 vs HTTP 自適應(yīng)流
有些實時傳輸協(xié)議被許多公司防火墻拒絕,而HTTP可以作為一個普通的文件通過术吗;流傳輸協(xié)議適合于大數(shù)據(jù)量尉辑、高可用性的流,如直播事件较屿、長事件或大型文材蹬,可實時對流進(jìn)行一些操作,如暫停吝镣、快進(jìn)等
HTTP 自適應(yīng)流 適合于較小的數(shù)據(jù)傳輸和交互,只能在分片文件流下載完成后堤器,本地模擬暫停、快進(jìn)操作末贾,并非真正的實時流闸溃。
ps:我們現(xiàn)在播放預(yù)告片就是使用HTTP漸進(jìn)式下載,依賴是HTTP漸進(jìn)式下載技術(shù)。以MP4文件舉例辉川,只有在下載到媒體的元信息(Moov box)才能開始播放表蝙,Moov box中有媒體數(shù)據(jù)的索引表及開始位置,通過HTTP的range 字段獲取我需要的媒體數(shù)據(jù)乓旗。如果Moov atom 放在最后府蛇,則需要下載全部文件內(nèi)容才能開始播放。