先介紹下RTP協議:
實時傳輸協議RTP(Real-time Transport Protocol)是一個網絡傳輸協議 ,該協議詳細說明了在互聯網上傳遞音頻和視頻的標準數據包格式 。
RTP標準定義了兩個子協議 ,RTP和RTCP
數據傳輸協議RTP,用于實時傳輸數據。該協議提供的信息包括:時間戳(用于同步)、序列號(用于丟包和重排序檢測)、以及負載格式(用于說明數據的編碼格式)。
控制協議RTCP,用于QoS反饋和同步媒體流。相對于RTP來說,RTCP所占的帶寬非常小,通常只有5%。
TCP會通過超時和重傳機制保證數據流的每一個bit的正確性,但這樣會使得無論從協議的實現還是傳輸的過程都變得非常的復雜。而且,當傳輸過程中有數據丟失的時候,由于對數據丟失的檢測(超時檢測)和重傳,會數據流的傳輸被迫暫停和延時。
RTP協議是一種基于UDP的傳輸協議,RTP本身并不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。
對于那些丟棄的包,也可以由上層根據其重要性來選擇性的重傳。比如,對于I幀、P幀、B幀數據,由于其重要性依次降低。
RTP是建立在UDP之上的傳輸層協議。
RTP會話過程:
當應用程序建立一個RTP會話時,應用程序將確定一對目的傳輸地址。目的傳輸地址由一個網絡地址和一對端口組成,有兩個端口:
一個給RTP包,一個給RTCP包,使得RTP/RTCP數據能夠正確發送。RTP數據發向偶數的UDP端口,而對應的控制信號RTCP數據發向相鄰的奇數UDP端口(偶數的UDP端口+1),這樣就構成一個UDP端口對。
RTP協議從上層接收流媒體信息碼流(如H.264),封裝成RTP數據包;RTCP從上層接收控制信息,封裝成RTCP控制包。
RTP將RTP 數據包發往UDP端口對中偶數端口;RTCP將RTCP控制包發往UDP端口對中的接收端口,即奇數端口。
接下來再介紹下標準流媒體協議:
流媒體(streaming media)是指將一連串數據壓縮后,經過網絡分段發送,即時傳輸以供觀看音視頻的一種技術。
通過使用 streaming media 技術,用戶無需將文件下載到本地即可播放。由于媒體是以連續的數據流發送的,因此在媒體到達時即可播放。可以像下載的文件一樣進行暫停、快進或后退操作。
對于流視頻協議,大多數數字視頻是為了兩件事情:存儲和播放。要滿足這樣的需求,視頻需要滿足小文件和通用播放這兩點。
大多數視頻文件都不適合流式傳輸。流式傳輸需要將音視頻分割成小塊(chunk),將這些小塊按順序發送,并在接收時播放。如果正在直播,則視頻源來自于攝像機;否則,來自于文件。
流媒體協議是一種標準化的傳遞方法,用于將視頻分解為多個塊,將其發送給視頻播放器,播放器重新組合播放。 大部分流協議是碼率自適應(adaptive bitrate)的,這項技術可以在任一時間為用戶提供最佳質量視頻。
編、解碼器(codec)指視頻壓縮技術。不同的編、解碼器用于不同的目的。 即使不需要使用流式協議,視頻也需要使用解編碼器進行編碼、解碼。
通常,視頻格式指視頻文件格式(container format)。常見 container format 包括 .mp4、.m4v、.avi、.mov等,container format 只是一個框(box),框中通常包含視頻文件、音頻文件和元數據。視頻文件格式并不是流式的核心概念。
形象比喻: 假設你是商人,需要批量運輸衣服(衣服就是視頻)。編解碼器就是將衣服壓縮成捆以節省空間的機器。容器格式就是裝壓縮后衣服的集裝箱。流協議就是將其運輸到目的地的鐵軌、信號燈和駕駛員。
常見的流協議有:RTMP、MPEG-DASH、MSS、HDS、HLS
Reference:
https://www.cnblogs.com/yuweifeng/p/7563265.html
https://blog.csdn.net/zhangbijun1230/article/details/90407090
https://www.jianshu.com/p/d71ceef679de