視頻格式 | 播放體驗 | 流量占用情況 |
---|---|---|
DASH | 統(tǒng)計直播推流端到播放端延時乳附。支持和視頻幀綁定的內(nèi)容交互。比如色罚,直播答題在播放端的彈窗等。 | 小 |
HLS | 對視頻進行切片账劲,按切片播放戳护,緩存小起播快金抡;拖動時間軸到任意時間播放時,可以快速定位到對應的切片進行播放腌且,響應快梗肝。 | 整體占用小,播放一個切片只下載一個切片內(nèi)容铺董;對于低碼率的視頻場景巫击,因封裝代價高導致流量占用相對較高。 |
MP4 | 頭文件較大精续,邊下邊緩存坝锰,起播相對HLS和DASH慢一些;拖動時間軸播放時重付,需要一定的時間緩存顷级;市場上大多數(shù)的瀏覽器客戶端均能夠播放,播放成功率高确垫。 | 拖動時間軸播放時弓颈,仍然需要下載整個頭文件,耗費流量大删掀;因流量占用較大翔冀,建議用在短視頻處理的場景。 |
1.HLS格式
1.1 如何區(qū)分直播和點播
- 判斷是否存在 #EXT-X-ENDLIST
- 一個M3U8文件披泪,如果結尾不存在 #EXT-X-ENDLIST纤子,那么一定是 直播,不是點播
- 判斷 #EXT-X-PLAYLIST-TYPE 類型
- '#EXT-X-PLAYLIST-TYPE'有兩種類型:
- VOD 即 Video on Demand付呕,表示該視頻流為點播源
- EVENT 表示該視頻流為直播源
- '#EXT-X-PLAYLIST-TYPE'有兩種類型:
1.2 HLS如何實現(xiàn)自適應碼率
HLS有兩種類型:
- Media Playlist
- Master Playlist:內(nèi)部提供的是同一份媒體資源的多份流列表資源计福。其格式如下所示:
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST
碼率自適應技術:
- Adaptive Bitrate Streaming,一種視頻碼率可以根據(jù)網(wǎng)絡狀況或客戶端播放buffer情況自動調(diào)整的視頻傳輸技術徽职。
有三種不同的碼率自適應算法:
- Buffer-based:基于客戶端的播放緩沖區(qū)buffer情況決策下一片段的碼率檔位
- 設置保護窗口象颖,當buffer小于保護窗的時候,降低碼率姆钉;
- 設置緩存限制:當buffer長度大于該限制的時候说订,提高碼率;
- Rate-based:基于預測的帶寬去決策下一片段的碼率檔位
- 通過對之前下載的視頻切片的帶寬進行收集處理, 進而預測下載下一個切片的網(wǎng)絡帶寬
- 同時考慮預測吞吐量和buffer信息決策下一片段的碼率檔位
1.3 #EXT-X-DISCONTINUITY
當HLS播放過程中編碼參數(shù)發(fā)生變化的時候潮瓶,需要加上#EXT-X-DISCONTINUITY字段分隔開陶冷,重啟編碼器。如果我想在HLS中插入廣告毯辅,就需要加上這個字段埂伦。
- file format
- number and type of tracks
- encoding parameters
- encoding sequence
- timestamp sequeue
1.4 TS結構介紹
TS也稱MPEG-TS,其中TS是"Transport Stream"思恐,MPEG2-TS格式的特點就是要求從視頻流的任一片段開始都是可以獨立解碼的沾谜。
- TS格式是主要用于直播的碼流結構膊毁,具有很好的容錯能力。
- TS流中不包含快速seek的機制基跑,只能通過協(xié)議層實現(xiàn)seek婚温。HLS協(xié)議基于TS流實現(xiàn)的。
TS文件(流)可以分為三層:
- TS層(Transport Stream)媳否,TS層在PES層上加入了數(shù)據(jù)流標識和傳輸?shù)谋匾畔ⅰ?/li>
- PES層(Packet Elemental Stream)栅螟,PES層在音視頻數(shù)據(jù)上加了時間戳等對數(shù)據(jù)幀的說明信息。
- ES層(Elementary Stream)篱竭,ES層就是音視頻數(shù)據(jù)
1.5 fMP4
fMP4 跟普通 mp4 基本文件結構是一樣的力图。普通mp4用于點播場景,fmp4通常用于直播場景室抽。
- 普通mp4的時長搪哪、內(nèi)容通常是固定的。fMP4 時長坪圾、內(nèi)容通常不固定晓折,可以邊生成邊播放;
- 普通mp4完整的metadata都在moov里兽泄,需要加載完moov box后漓概,才能對mdat中的媒體數(shù)據(jù)進行解碼渲染;
- fMP4中病梢,媒體數(shù)據(jù)的metadata在moof box中胃珍,moof 跟 mdat (通常)結對出現(xiàn)。moof 中包含了sample duration蜓陌、sample size等信息觅彰,因此,fMP4可以邊生成邊播放钮热;
一個完整的fMP4文件是:moov + (moof + mdat)* N
2.DASH格式
工作原理:
- 下載MPD文件填抬,解析DASH相關信息;
- 下載視頻的Initialization Segment和音頻的Initialization Segment隧期;
- 下載視頻的第一個分片飒责,下載音頻的第一個分片;
- 當視頻和音頻的第一個分片都下載完仆潮,播放器內(nèi)部再進行一些相關處理后宏蛉,就可以開始播放出畫面。后續(xù)就是不斷輪詢更新MPD文件和下載后續(xù)的音頻和視頻分片性置。