在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    直播背后的原理是?初識(shí)視頻流協(xié)議 HLS 和 RTMP

    直播背后的原理是?初識(shí)視頻流協(xié)議 HLS 和 RTMP

    HTTP Live Streaming (HLS)

    HTTP Live Streaming 簡(jiǎn)稱(chēng)為 HLS, 是一個(gè)基于 HTTP 的視頻協(xié)議,由 APPLE 公司提出和實(shí)現(xiàn)。蘋(píng)果公司的很多產(chǎn)品都支持 HLS 協(xié)議,譬如 Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari。蘋(píng)果 2009 年提出該協(xié)議,HLS 是 iOS 設(shè)備默認(rèn)要求的視頻流標(biāo)準(zhǔn)。安卓也支持HLS,見(jiàn)文章Guide to Mobile Video Streaming with HLS | Mux blog

    Since then, Android has added support, as have most other platforms.

    HLS 因?yàn)橐韵聨讉€(gè)原因比較受歡迎。

    • HLS 幾乎可隨處播放。 幾個(gè)大平臺(tái) web、mobile、tv 基本都有免費(fèi)的HLS 播放器支持。
    • 蘋(píng)果 要求 HLS。 如果你想在 iOS 設(shè)備直播,逃不了的。
    • HLS 相對(duì)簡(jiǎn)單。 它使用了普遍且已經(jīng)存儲(chǔ)的視頻格式(MP4 或 TS,伴隨著 H.264 和 AAC 等編解碼器), 另外附加了一個(gè)丑陋但人類(lèi)可讀的文本格式(m3u8).
    • 它通過(guò) HTTP 工作。 不需要跑特殊的服務(wù)(不像老舊校風(fēng)派的 RTMP 協(xié)議或者新潮的 WebRTC 協(xié)議). HLS 可以方便的透過(guò)防火墻或者代理服務(wù)器,而且可以很方便的利用 CDN 進(jìn)行分發(fā)加速,并且客戶(hù)端實(shí)現(xiàn)起來(lái)也很方便。

    原理

    HLS 協(xié)議基于 HTTP,而一個(gè)提供 HLS 的服務(wù)器需要做兩件事:

    • 編碼: 以 H.264 格式對(duì)圖像進(jìn)行編碼,以 MP3 或者 HE-AAC 對(duì)聲音進(jìn)行編碼,最終打包到 MPEG-2 TS(Transport Stream)容器之中;
    • 分割: 把編碼好的 TS 文件等長(zhǎng)切分成后綴為 ts 的小文件,并生成一個(gè) .m3u8 的純文本索引文件

    HLS 把整個(gè)流分成一個(gè)個(gè)小的基于 HTTP 的文件來(lái)下載,每次只下載一些。HLS 協(xié)議由三部分組成:HTTP、M3U8、TS。這三部分中,HTTP 是傳輸協(xié)議,M3U8 是索引文件,TS 是音視頻的媒體信息。

    瀏覽器使用的是 m3u8 文件。在 HTML5 頁(yè)面上使用 HLS 非常簡(jiǎn)單,直接

    或者

    HLS的index文件就是m3u8的文件,先下載一級(jí)index file(master_playlist.m3u8),它里面記錄了二級(jí)索引文件的地址(Alternate-A、Alternate-B、Alternate-C)的地址,然后客戶(hù)端再去下載二級(jí)索引文件,二級(jí)索引文件中又記錄了TS文件的下載地址,這樣客戶(hù)端就可以按順序下載TS視頻文件并連續(xù)播放。

    一個(gè)典型的一級(jí)索引 m3u8 文件格式如下:

    #EXTM3U#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2000000,CODECS=”mp4a.40.2, avc1.4d401f”skiing-720p.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=375000,CODECS=”mp4a.40.2, avc1.4d4015″skiing-360p.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000,CODECS=”mp4a.40.2, avc1.4d401e”skiing-480p.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3500000,CODECS=”mp4a.40.2, avc1.4d401e”skiing-1080p.m3u8

    [免費(fèi)分享]007,資料包括《Andoird音視頻開(kāi)發(fā)必備手冊(cè)+音視頻學(xué)習(xí)視頻+學(xué)習(xí)文檔資料包+大廠面試真題+2022最新學(xué)習(xí)路線(xiàn)圖》等,點(diǎn)擊下方鏈接加衛(wèi)星獲取

    FFmpegWebRTCRTMPRTSPHLSRTP播放器-音視頻流媒體高級(jí)開(kāi)發(fā)

    詳細(xì)介紹如下:

    • bandwidth指定視頻流的比特率
    • PROGRAM-ID無(wú)用無(wú)需關(guān)注,
    • 每一個(gè)#EXT-X-STREAM-INF的下一行是二級(jí)index文件的路徑,可以用相對(duì)路徑也可以用絕對(duì)路徑。例子中用的是相對(duì)路徑。

    一級(jí)索引 m3u8 文件中記錄了不同比特率視頻流的二級(jí)index文件路徑,客戶(hù)端可以自己判斷自己的現(xiàn)行網(wǎng)絡(luò)帶寬,來(lái)決定播放哪一個(gè)視頻流。也可以在網(wǎng)絡(luò)帶寬變化的時(shí)候平滑切換到和帶寬匹配的視頻流。

    一個(gè)二級(jí)索引文件格式內(nèi)容如下 (skiing-480p.m3u8):

    #EXTM3U#EXT-X-TARGETDURATION:10#EXT-X-VERSION:3#EXT-X-MEDIA-SEQUENCE:0#EXT-X-PLAYLIST-TYPE:VOD#EXTINF:9.97667,file000.ts#EXTINF:9.97667,file001.ts#EXTINF:9.97667,file002.ts#EXTINF:9.97667,file003.ts#EXTINF:9.97667,file004.ts

    可以簡(jiǎn)單的認(rèn)為二級(jí) m3u8 就是包含多個(gè) ts 文件的播放列表。播放器按順序逐個(gè)播放,全部放完再請(qǐng)求一下 m3u8 文件,獲得包含最新 ts 文件的播放列表繼續(xù)播,周而復(fù)始。整個(gè)直播過(guò)程就是依靠一個(gè)不斷更新的 m3u8 和一堆小的 ts 文件組成,m3u8 必須動(dòng)態(tài)更新,ts 可以走 CDN。

    整體架構(gòu)

    HLS的架構(gòu)分為三部分:Server,CDN,Client 。即服務(wù)器、分發(fā)組件和客戶(hù)端。架構(gòu)圖如下:

    HLS 缺點(diǎn)

    HLS 不是萬(wàn)能的,它也有一個(gè)致命的弱點(diǎn):延遲現(xiàn)象非常明顯。如果每個(gè) ts 按照 5 秒來(lái)切分,一個(gè) m3u8 放 6 個(gè) ts 索引,那么至少就會(huì)帶來(lái) 30 秒的延遲。如果減少每個(gè) ts 的長(zhǎng)度,減少 m3u8 中的索引數(shù),延時(shí)確實(shí)會(huì)減少,但會(huì)帶來(lái)更頻繁的緩沖,對(duì)服務(wù)端的請(qǐng)求壓力也會(huì)成倍增加。所以只能根據(jù)實(shí)際情況找到一個(gè)折中的點(diǎn)。

    另外一點(diǎn), HLS 基于短連接 HTTP,HTTP 是基于 TCP 的,這就意味著 HLS 需要不斷地與服務(wù)器建立連接,TCP 每次建立連接時(shí)的三次握手、慢啟動(dòng)過(guò)程、斷開(kāi)連接時(shí)的四次揮手都會(huì)產(chǎn)生消耗。

    Real Time Messaging Protocol (RTMP)

    Real Time Messaging Protocol(簡(jiǎn)稱(chēng) RTMP)是 Macromedia 開(kāi)發(fā)的一套視頻直播協(xié)議,現(xiàn)在屬于 Adobe。

    協(xié)議基于 TCP,是一個(gè)協(xié)議族,包括 RTMP 基本協(xié)議及 RTMPT/RTMPS/RTMPE 等多種變種。RTMP 是一種設(shè)計(jì)用來(lái)進(jìn)行實(shí)時(shí)數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議,主要用來(lái)在 Flash/AIR 平臺(tái)和支持RTMP協(xié)議的流媒體/交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信。

    無(wú)法支持移動(dòng)端 WEB 播放是它的硬傷。雖然無(wú)法在iOS的H5頁(yè)面播放,但是iOS原生應(yīng)用可以寫(xiě)解碼去解析的。瀏覽器端,HTML5 video標(biāo)簽無(wú)法播放 RTMP 協(xié)議的視頻,可以通過(guò) video.js 來(lái)實(shí)現(xiàn)。

    其主要優(yōu)點(diǎn):

    • 實(shí)時(shí)性非常好,延時(shí)較小,通常為 1-3s
    • 基于 TCP 長(zhǎng)連接,不需要多次建連。

    HLS 和 RTMP 對(duì)比

    整體直播方案

    如上所見(jiàn),兩個(gè)協(xié)議各有所長(zhǎng),所以實(shí)際項(xiàng)目中需要自己抉擇到底采用哪種方案。直播整體架構(gòu)如下。

    【學(xué)習(xí)更多-進(jìn)入鏈接點(diǎn)擊免費(fèi)報(bào)名,即可開(kāi)始學(xué)習(xí)~】

    【免費(fèi)】FFmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級(jí)開(kāi)發(fā)-學(xué)習(xí)視頻教程-騰訊課堂

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶(hù)投稿
    上一篇 2022年6月25日 06:23
    下一篇 2022年6月25日 06:23

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息