直播未來屬於RTMP還是HTTP?

tinywan1227發表於2016-12-01

直播未來屬於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播放

暫不支援

不支援

大部分支援

極大部分支援

伺服器程式設計難易

簡單

一般

一般+

中等


相關文章