直播未來屬於RTMP還是HTTP?
直播未來屬於RTMP還是HTTP?
HTTP 傳視訊比 RTMP 實現起來簡單?HTTP 延遲太高?
答:直播通訊未來是屬於html5的。
1,協議使用份額
如今國內90%的面向大眾的直播平臺都是採用的rtmp和httpflv的混合,hls很少,而國外大部分採用的dash,少部分用hls和其他協議。
2,先簡單的描述下這些協議
httpflv:這種直播傳輸實際上就是利用的flv檔案的特點,只需要一個matedata和音視訊各自header,後面的音視訊資料就可以隨意按照時間戳傳輸,當然視訊得按照gop段來傳輸,這種直播資料實際上就是一個無限大的http傳輸的flv檔案,視訊地址類似:
http://mywebsite.com/live.flv,客戶端利用flv特性,可以一邊接受資料邊解碼播放。
rtmp:rtmp是adobe研發的開放協議,rtmp其實實質上也是傳輸的flv格式的資料,同樣是flv tag,只不過rtmp在傳輸上封裝了一層,比如rtmp不僅可以直播,也可以推流。rtmp的直播原理同樣也是利用了flv檔案的特性,只需要一些頭資訊,後面就可以隨意傳輸音視訊資料,達到邊傳輸邊播放。
hls:hls是蘋果公司開發的協議,http輪詢傳輸,該協議主要的資料格式是ts視訊檔案,大致就是將裸流h264和音訊直播資料,切片封裝成ts段,形成無數的ts小檔案,客戶端先請求一個m3u8檔案,該檔案內部會有一列ts檔案的地址,客戶端按照順序依次播放ts,以此類推,hls地址類似:http://mywebsite.com/live.m3u8,hls在大部分的瀏覽器利用html5video是可以直接播放的。
dash:這個協議國內用的不多,http輪詢傳輸,但是國外很多平臺都在用,比如youtube直播,該協議是google公司研發的,和hls如出一轍,同樣是將直播流資料切片,只不過不是ts檔案,而是mp4或者3gp檔案,又或者webm(vp8,vp9)檔案,該協議同樣和hls一樣也是http傳輸,同樣和hls主打的是“自適應動態位元速率”,大概意思就是當客戶端網路不好的時候會無縫切換到低位元速率的路線。
3,各種協議延時及其原因
rtmp和httpflv:這兩種協議大致資料一致,所以延時原因都是差不多的。按理說tcp流式傳輸直播因該都是延時極低的,為什麼rtmp和httpflv還有延時呢?原因在h264上,rtmp和httpflv都是傳輸的flv tag,視訊tag的資料平常就是h264資料,h264解碼有個IBP,I是關鍵幀,是一幀完整的影像,必須要先有個I才能解碼後面的BP,BP幀可以隨便少,但是I幀不能少,所以I幀必須是在flv tag傳輸中第二個傳輸的(第一個是h264spspps),但是I幀在h264流裡不是常有的,是隔一段才有個I幀,這個一段的間隔,俗稱GOP,當編碼時候GOP設定很短,當客戶端連線上來,伺服器會以最快速度找到流中最近I幀,從I幀開始傳送直播資料,然而當GOP很長,I幀間隔很長,或者等待下一個I幀開始向新連線傳送資料,或者在快取裡找最近的上一個I幀開始傳送,這裡就是rtmp和hls協議延時的關鍵了,在各大cdn平臺,叫“rtmp秒開技術”,原理就是將推流資料二次解編碼,設定很小的gop。總的來說,gop設定1s,在不考慮網路傳輸鏈路延時情況,資料延時最大就為1s,運氣好剛好就是I幀就是0延時!
hls和dash:這兩種協議延時原因大致都是差不多的,因為切片了,切成小端的檔案,單獨開始傳輸,這就是延時的關鍵了,當然可以設定切成小檔案,越小延時越低。按理說dash切片要比hls稍微先進一點,所以延時上dash要比hls低,但是同樣的,切片了,就註定延時。
4,關於解碼播放的優劣勢
首先,我想說flash真的要被淘汰了,rtmp和httpflv目前在網頁上只能用flash或者外掛的方式解碼播放,而且flash在cpu和記憶體上都是佔用很高。但是在客戶端app上,不用網頁播放,你可以不用擔心這個問題。網頁上播放,hls和dash的優勢就體現出來了,可以用html5直接播放,當然理論上,dash的mp4的相容性要比hls更好。而且hls和dash支援動態適應網路,無縫調節位元速率,這在網路波動很大的地方,這個功能不錯,當然個人對於這個功能無所謂,我情願線下看高清,也不線上看馬賽克。
5,總結
對於各種面向使用者的直播協議,我只講了一部分的,當然還有更多,這裡就不一一列舉了。以後在瀏覽器上肯定是html5的市場,無論是hls也好dash也罷,或者新興的很多websocket直播也好,技術反正是在不斷更替的,或許有天,html5突然支援flv播放了呢?
我列一個表作為總結:
協議 |
httpflv |
rtmp |
hls |
dash |
傳輸層 |
http流 |
tcp流 |
http |
http |
視訊格式 |
flv |
flv tag |
Ts檔案 |
Mp4 3gp webm |
延時 |
低 |
低 |
很高 |
高 |
資料分段 |
連續流 |
連續流 |
切片檔案 |
切片檔案 |
Html5播放 |
暫不支援 |
不支援 |
大部分支援 |
極大部分支援 |
伺服器程式設計難易 |
簡單 |
一般 |
一般+ |
中等 |
相關文章
- 直播協議詳解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP協議HTTPWeb
- Metaverse究竟是泡沫還是未來?Metaverse
- 轉賬問題是屬於業務問題還是屬於技術問題?
- NFT元宇宙區塊鏈是泡沫還是未來?元宇宙區塊鏈
- 5G到來,App的未來,是JavaScript,Flutter還是Native ?APPJavaScriptFlutter
- 從過去到未來:關於 HTTP2 的研究HTTP
- 周正寧:未來五年屬於WebRTC+AV1Web
- 頭部主播批量被封,直播電商還有未來嗎?
- 國密是什麼意思?屬於商密還是普密?
- 基於SRS搭建RTMP直播流媒體伺服器伺服器
- 幽默:未來大事情是人工智慧還是區塊鏈?人工智慧區塊鏈
- FMEA屬於事前行為還是事後行為?
- nginx 轉發 rtmp 直播流Nginx
- 人類未來:性愛機器人是美女還是野獸機器人
- 專家如何看待SASE,話題炒作還是未來方向?
- HTTP/3 都來了,你卻還在用 HTTP/1.1?HTTP
- 互動內容是娛樂的未來,還是遊戲的“附庸”?遊戲
- RTMP是什麼?
- RTMP、HTTP-FLV、HLS,你瞭解常見的三大直播協議嗎HTTP協議
- checked屬性值是true還是checked
- 遊戲AI:AI的遊戲還是遊戲的未來遊戲AI
- 這一天終於還是來了嗎
- AI的未來是一個巨大的模型,還是多個specialized小模型AI模型Zed
- 人工智慧是攝影的未來還是攝影技術的末日?人工智慧
- rtsp->rtmp 推流直播 Plan B
- 使用Exo-Media Player播放RTMP直播
- HTTP代理,HTTPS代理還是SOCKS代理?HTTP
- 為了做屬於未來的產品,NExT Studios做了哪些準備?iOS
- 未來屬於人工智慧工程師,但成功轉型不容易人工智慧工程師
- Python屬於後端開發還是前端開發?Python入門!Python後端前端
- 未來Hadoop還會有生命嗎?Hadoop
- python利用ffmpeg進行rtmp推流直播Python
- 都說Kubernetes是未來,那未來到底是什麼樣子?
- “香餑餑”Metaverse是資本的金錢遊戲還是未來發展主流?Metaverse遊戲
- 直播原始碼如何搭建一個屬於自己的直播平臺?原始碼
- 移動開發還有未來嗎?移動開發
- 外媒評手機進化史:未來不僅僅屬於智慧手機
- 零基礎解讀ChatGPT:對人類未來工作是威脅還是幫助?ChatGPT
- 配置Nginx以支援RTMP直播及HLS流播放Nginx