流媒體協議:(RTP、RTCP、RTSP、MMS、HLS、HTTP progressive streaming)
當前在internet上傳送音頻和視頻等信息主要有兩種方式:
- 下載,完整下載一個視頻,再去播放
- 流式傳輸,如優酷、愛奇藝等視頻網址(土豆,優酷網的視頻傳輸方法)
下面介紹的這些協議,都是流式傳輸
RTP
實時傳輸協議(Real-time Transport Protocol或簡寫RTP)是一個網絡傳輸協議
RTP協議詳細說明了在互聯網上傳遞音頻和視頻的標准數據包格式。
它一開始被設計為一個多播協議,但后來被用在很多單播應用中。
RTP協議常用於流媒體系統(配合RTSP協議),視頻會議和一鍵通(Push to Talk)系統(配合H.323或SIP),使它成為IP電話產業的技術基礎。
RTP為Internet上端到端的實時傳輸提供時間信息和流同步,但並不保證服務質量,服務質量由RTCP來提供。
傳輸層:
RTP協議和RTCP(RTP控制協議)一起使用,而且它是創建在UDP協議上的。
RTCP
實時傳輸控制協議(Real-time Transport Control Protocol或RTP Control Protocol或簡寫RTCP)是實時傳輸協議(RTP)的一個姐妹協議。
RTCP為RTP媒體流提供信道外(out-of-band)控制。RTCP本身並不傳輸數據,但和RTP一起協作將多媒體數據打包和發送。RTCP定期在多媒體流會話參加者之間傳輸控制數據。
RTCP的主要功能是為RTP所提供的服務質量(Quality of Service)提供反饋。
RTCP收集相關媒體連接的統計信息,例如:傳輸字節數,傳輸分組數,丟失分組數,jitter,單向和雙向網絡延遲等等,網絡應用程序即可利用RTCP的統計信息來控制傳輸的品質,比如當網絡帶寬高負載時限制信息流量或改用壓縮比較小的編解碼器。
傳輸層:
RTP 使用一個 偶數 UDP port ;而RTCP 則使用 RTP 的下一個 port,也就是一個奇數 port。
RTSP
即時串流協定(Real Time Streaming Protocol,RTSP)是用來控制聲音或影像的多媒體串流協議,並允許同時多個串流需求控制
允許同時多個串流需求控制(Multicast),除了可以降低服務器端的網絡用量,更進而支持多方視訊會議(Video Conference)。
因為與HTTP1.1的運作方式相似,所以代理服務器(Proxy)的緩沖功能(Cache)也同樣適用於RTSP,並因RTSP具有重新導向功能,可視實際負載情況來轉換提供服務的服務器,以避免過大的負載集中於同一服務器而造成延遲。
傳輸層:
傳輸時所用的網絡通訊協定並不在其定義的范圍內,服務器端可以自行選擇使用TCP或UDP來傳送串流內容,它的語法和運作跟HTTP 1.1類似,但並不特別強調時間同步,所以比較能容忍網絡延遲。
RTSP 、RTP、RTCP的區別
https://www.zhihu.com/question/20278635
http://blog.csdn.net/shinichr/article/details/24111401
RTP: 一般用於多媒體數據的傳輸。
RTCP: 同RTP一起用於數據傳輸的監視,控制功能。
RTSP: 用於多媒體數據流的控制,如播放,暫停等。
為什么要搭配這些協議呢?
RTP位於傳輸層(通常是UDP)之上,應用程序之下,實時語音、視頻數據經過模數轉換和壓縮編碼處理后,先送給RTP封裝成為RTP數據單元,RTP數據單元被封裝為UDP數據報,然后再向下遞交給IP封裝為IP數據包。這么說RTP是沒有保證傳輸成功的,
那怎么保證呢?就要用到RTCP。
RTCP消息含有已發送數據的丟包統計和網絡擁塞等信息,服務器可以利用這些信息動態的改變傳輸速率,甚至改變凈荷的類型。RTCP消息也被封裝為UDP數據報進行傳輸。
嚴格來說:RTP、RTCP位於傳輸層(通常是UDP)之上,應用程序之下。
RTMP/RTMPS
RTMP(Real Time Messaging Protocol)實時消息傳送協議是Adobe Systems公司為Flash播放器和服務器之間音頻、視頻和數據傳輸 開發的開放協議。
它有三種變種:
- 工作在TCP之上的明文協議,使用端口1935;
- RTMPT封裝在HTTP請求之中,可穿越防火牆;
-
RTMPS類似RTMPT,但使用的是HTTPS連接;
RTMP協議(Real Time Messaging Protocol)是被Flash用於對象,視頻,音頻的傳輸.這個協議建立在TCP協議或者輪詢HTTP協議之上.
RTMP協議就像一個用來裝數據包的容器,這些數據既可以是AMF格式的數據,也可以是FLV中的視/音頻數據.一個單一的連接可以通過不同的通道傳輸多路網絡流.這些通道中的包都是按照固定大小的包傳輸的.
MMS
MMS(Microsoft Media Server)是一種串流媒體傳送協議,用來訪問並流式接收Windows Media服務器中.asf文件的一種協議。
MMS協議用於訪問Windows Media發布點上的單播內容。MMS是連接Windows Media單播服務的默認方法。若觀眾在Windows Media Player中鍵入一個URL以連接內容,而不是通過超級鏈接訪問內容,則他們必須使用MMS協議引用該流。MMS的預設埠(端口)是1755。
當使用 MMS 協議連接到發布點時,使用協議翻轉以獲得最佳連接。
- “協議翻轉”始於試圖通過 MMSU 連接客戶端。 MMSU 是 MMS 協議結合 UDP 數據傳送。
- 如果 MMSU 連接不成功,則服務器試圖使用 MMST。MMST 是 MMS 協議結合 TCP 數據傳送。
如果連接到編入索引的 .asf 文件,想要快進、后退、暫停、開始和停止流,則必須使用 MMS。不能用 UNC 路徑快進或后退。若您從獨立的 Windows Media Player 連接到發布點,則必須指定單播內容的 URL。
若內容在主發布點點播發布,則 URL 由服務器名和 .asf 文件名組成。例如:mms://windows_media_server/sample.asf。
- windows_media_server 是 Windows Media 服務器名,
- sample.asf 是您想要使之轉化為流的 .asf 文件名。
HLS - HTTP live streaming (M3U8)
HTTP Live Streaming(HLS)是蘋果公司(Apple Inc.)實現的基於HTTP的流媒體傳輸協議,可實現流媒體的直播和點播,主要應用在iOS系統,為iOS設備(如iPhone、iPad)提供音視頻直播和點播方案。
HLS點播,基本上就是常見的分段HTTP點播,不同在於,它的分段非常小。
相對於常見的流媒體直播協議,例如RTMP協議、RTSP協議、MMS協議等,HLS直播最大的不同在於,直播客戶端獲取到的,並不是一個完整的數據流。HLS協議在服務器端將直播數據流存儲為連續的、很短時長的媒體文件(MPEG-TS格式),而客戶端則不斷的下載並播放這些小文件,因為服務器端總是會將最新的直播數據生成新的小文件,這樣客戶端只要不停的按順序播放從服務器獲取到的文件,就實現了直播。
由此可見,基本上可以認為,HLS是以點播的技術方式來實現直播。由於數據通過HTTP協議傳輸,所以完全不用考慮防火牆或者代理的問題,而且分段文件的時長很短,客戶端可以很快的選擇和切換碼率,以適應不同帶寬條件下的播放。不過HLS的這種技術特點,決定了它的延遲一般總是會高於普通的流媒體直播協議。
M3U8
http://www.voidcn.com/blog/sqc3375177/article/p-1009883.html
1.M3U8是一種可擴展的播放列表文件格式。它是一個包含UTF-8編碼文字的m3u播放列表。m3u是包含媒體文件URL的一個事實上的播放列表標准。這種格式被用來作為HTTP Live 媒體流索引文件的格式。
2.m3u8是一種視頻列表格式,里面有真正的視頻的鏈接,另外在m3u8里面還可以再嵌套一層m3u8
3.m3u8是視頻列表,視頻編碼可以是h.264等。
4.m3u8並非蘋果獨占,m3u8這種列表其實編碼格式是公開的。
progressive download
科普掃盲:live streaming vs. progressive download
從progressive download開講 (這個概念比較寬泛,大體上包含了live streaming的概念)。就是說,不管對正在直播的視頻或者其他非直播視頻,用戶可以下載到手機上,緩沖足夠時間后開始播放。
在用戶界面來講,點擊某視頻的超鏈接后,以sdp為后綴的描述文件將會存到手機上,下載結束后,根據相關信息連接到對應的http服務器開始下載視頻文件,並在緩沖足夠時開始播放。用戶只需下載一次就可反復播放
HTTP progressive streaming
https://groups.google.com/forum/#!topic/android-developers/4Z5TAn1HDsw
Flash vs. HTTP Progressive Streaming vs. HLS
Progressive streaming is like progressive download except that the
media file is partially cached in memory rather than writing to
permanent storage.
HTTP progressive streaming類似於progressive download的協議,Progressive streaming是把視頻緩存在內存中,而不是永久存儲設備中
when we discuss HTTP Progressive Streaming, we’re really talking about what amounts to a fancy buffered download,
流媒體測試地址
轉載:https://www.vitamio.org/docs/Basic/2013/0508/14.html
HLS - Apple HTTP live streaming - m3u8
http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8
http://live.3gv.ifeng.com/zixun.m3u8 (直播)
HTTP
http://www.modrails.com/videos/passenger_nginx.mov
http://wsmp32.bbc.co.uk/
RTSP
http://m.livestream.com (site)
rtsp://xgrammyawardsx.is.livestream-api.com/livestreamiphone/grammyawards
MMS
mms://video.fjtv.net/setv mms://ting.mop.com/mopradio mms://112.230.192.196/zb12