直播未来属于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还是HTTP?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点号与冒号操作符的区别
- 下一篇: HTTP-FLV的两种方式