1. 程式人生 > >幾種直播流媒體協議

幾種直播流媒體協議

題外話:

HTTP漸進下載流媒體播放:  基於TCP。

yy、樂視、愛奇藝、優酷土豆、搜狐視訊、花椒直播,主要還是通過rtmp&hls來實現的,

但他們也意識到rtmp的天生缺陷,所以不管是技術預研也好,還是測試版也好,都已經或多或少在弄WebRTC了。

流媒體概述:

所謂流媒體是指採用流式傳輸的方式在 Internet 播放的媒體格式。 
流媒體又叫流式媒體,它是指商家用一個視訊傳送伺服器把節目當成資料包發出,傳送到網路上。
使用者通過解壓裝置對這些資料進行解壓後,節目就會像傳送前那樣顯示出來。
流媒體以流的方式在網路中傳輸音訊、視訊和多媒體檔案的形式。
流媒體檔案格式是支援採用流式傳輸及播放的媒體格式。
流式傳輸方式是將視訊和音訊等多媒體檔案經過特殊的壓縮方式分成一個個壓縮包,
由伺服器向用戶計算機連續、實時傳送。在採用流式傳輸方式的系統中,使用者不必像非流式播放那樣等到整個檔案
全部下載完畢後才能看到當中的內容,而是隻需要經過幾秒鐘或幾十秒的啟動延時即可在使用者計算機上利用
相應的播放器對壓縮的視訊或音訊等流式媒體檔案進行播放,剩餘的部分將繼續進行下載,直至播放完畢。

RTP :(Real-time Transport Protocol)

是用於Internet上針對多媒體資料流的一種傳輸層協議.RTP 協議和 RTP 控制協議 RTCP 一起使用,
而且它是建立在 UDP 協議上的.
RTP 不像http和ftp可完整的下載整個影視檔案,它是以固定的資料率在網路上傳送資料,客戶端也是按照這種速度觀看影視檔案,當
影視畫面播放過後,就不可以再重複播放,除非重新向伺服器端要求資料。

RTCP:Real-time Transport Control Protocol 或 RTP Control Protocol或簡寫 RTCP)

實時傳輸控制協議,是實時傳輸協議(RTP)的一個姐妹協議.

注:--:RTP 協議和 RTP控制協議(RTCP) 一起使用,而且它是建立在UDP協議上的

RTSP:(Real Time Streaming Protocol)

實時流媒體會話協議,SDP(會話描述協議),RTP(實時傳輸協議)。

是用來控制聲音或影像的多媒體串流協議,RTSP 提供了一個可擴充套件框架,使實時資料,如音訊與視訊的受控、點播成為可能。
媒體資料使用rtp,rtcp協議。
一般使用udp 作為傳輸層。適合IPTV場景。
資料來源包括現場資料與儲存在剪輯中的資料。該協議目的在於控制多個數據傳送連線,為選擇傳送通道,如UDP、多播UDP與TCP提供途
徑,併為選擇基於RTP上傳送機制提供方法
傳輸時所用的網路通訊協定並不在其定義的範圍內,伺服器端可以自行選擇使用TCP或UDP來傳送串流內容,比較能容忍網路延遲.


--->:RTSP 與 RTP 最大的區別在於:RTSP 是一種雙向實時資料傳輸協議,它允許客戶端向伺服器端傳送請求,如回放、快進、倒退等操作。當
然,RTSP 可基於 RTP 來傳送資料,還可以選擇 TCP、UDP、組播 UDP 等通道來發送資料,具有很好的擴充套件性。它時一種類似與http協議
的網路應用層協議.

WebRTC:

web端實現流媒體的協議。google剛推出WebRTC的時候巨頭們要麼冷眼旁觀,要麼抵觸情緒很大。使用RTP協議傳輸。


RTMP(Real Time Messaging Protocol)

Macromedia 開發的一套視訊直播協議,現在屬於 Adobe。和 HLS 一樣都可以應用於視訊直播,基於TCP不會丟失。
// 區別是 RTMP 基於 flash 無法在 iOS 的瀏覽器裡播放,但是實時性比 HLS 要好。
實時訊息傳送協議是 Adobe Systems 公司為 Flash 播放器和伺服器之間音訊、視訊和資料傳輸 開發的開放協議.
 // iOS 程式碼裡面一般常用的是使用 RTMP 推流,可以使用第三方庫 librtmp-iOS 進行推流,librtmp 封裝了一些核心的 API 供使用者呼叫
RTMP 協議也要客戶端和伺服器通過“握手”來建立 RTMP Connection,然後在Connection上傳輸控制資訊。RTMP 協議傳輸時會對資料格式化,而實際傳輸的時候為了更好地實現多路複用、分包和資訊的公平性,傳送端會把Message劃分為帶有 Message ID的Chunk,每個Chunk可能是一個單獨的Message,
也可能是Message的一部分,在接受端會根據Chunk中包含的data的長度,message id和message的長度把chunk還原成完整的Message,從而實現資訊的收發。

HLS:HTTP Live Streaming(HLS)

是蘋果公司(Apple Inc.)實現的基於HTTP的流媒體傳輸協議,

可實現流媒體的 直播 和 點播 ,主要應用在iOS系
統,為iOS裝置(如iPhone、iPad)提供音視訊直播和點播方案。
HLS 點播,基本上就是常見的分段HTTP點播,不同在於,它的分段非常小。
相對於常見的流媒體直播協議,例如RTMP協議、RTSP 協議、MMS 協議等,HLS 直播最大的不同在於,直播客戶端獲取到的,並不是一個完
整的資料流。
HLS 協議在伺服器端將直播資料流儲存為連續的、很短時長的媒體檔案(MPEG-TS格式),而客戶端則不斷的下載並播放這些小檔案,
因為伺服器端總是會將最新的直播資料生成新的小檔案,這樣客戶端只要不停的按順序播放從伺服器獲取到的檔案,就實現了直播。
由此可見,基本上可以認為,HLS 是以>>點播的技術方式來實現直播<<。由於資料通過 HTTP 協議傳輸,所以完全不用考慮防火牆或者代理的問
題,而且分段檔案的時長很短,客戶端可以很快的選擇和切換位元速率,以適應不同頻寬條件下的播放。不過HLS的這種技術特點,決定了它的
延遲一般總是會高於普通的流媒體直播協議。
// iOS和 Android 都天然支援這種協議,配置簡單,直接使用 video 標籤即可

***VLS :是一種流伺服器,專門用來解決流的各種問題,它也具有一些 VLC 的特徵。 videolan 作為伺服器可以輸出http,rtp,rtsp的流。


原則上,RTSP,RTMP,HTTP 都可以做直播和點播,但一般做 直播用 RTSP和RTMP,做點播用 HTTP。我們選用的是RTMP協議。