1. 程式人生 > 其它 >RTP/RTCP/RTSP/RTMP協議概述

RTP/RTCP/RTSP/RTMP協議概述

隨著互連網的發展,人們已經不滿足於傳統的HTTP,FTP和電子郵件等文字資訊和服務,而對內容豐富多彩的多媒體資訊,服務以及多媒體通訊方式提出了需求,包括聲音,圖象,圖形,視訊資訊等等,而這些不但傳輸的資料量大而且對互動性和實時性要求很高。基於HTTP的TCP協議無法達到要求,故產生RTP協議來進行多媒體資料實時傳輸。

一 TCP vs RTP

TCP有以下4個特點:
1.TCP重傳機制
2.TCP擁塞控制機制
3.TCP報文頭比UDP報文頭要大
4.TCP的啟動速度慢。
RTP由IETF(Internet Engineering Task Force,網際網路工程任務組)的音訊/視訊傳輸工作組制定,主要實現實時資料的傳輸,它在包頭中提供編碼型別,包中資料的取樣時刻和資料包的序號,根據這些資訊傳送和接受方可以協商編碼型別,可以對接收到的資料包進行排序等工作;RTCP主要負責傳輸質量的監控以及傳送傳送者的一些標誌資訊。試驗和研究表明,RTP/RTCP所提出的實時資料的傳輸機制是行之有效的。
RTP提供時間標誌,序列號以及其他能夠保證在實時資料傳輸時處理時間的方法,RTCP是RTP的控制部分,是用來保證服務質量和成員管理,RTSP具體資料傳輸交給RTP,提供對流的遠端控制
對比記憶
IP:資料傳輸
RTP:多媒體資料實時傳輸
TCP:保證資料傳輸可靠
RTCP:保證多媒體資料傳輸的可靠

二 RTSP 與RTMP

兩者都屬流媒體協議,RTMP協議是 Adobe 的私有協議,未完全公開,一般傳輸的是 flv,f4v 格式流。在 TCP 1個通道上傳輸命令和資料。RTSP協議是共有協議,並有專門機構做維護,一般傳輸的是 ts、mp4 格式的流。傳輸一般需要 2-3 個通道,命令和資料通道分離。

RTMP——Real Time Messaging Protocol(實時訊息傳輸協議)


RTMP是由Adobe公司提出的,在網際網路TCP/IP五層體系結構中應用層,RTMP協議是基於TCP協議的,也就是說RTMP實際上是使用TCP作為傳輸協議。TCP協議在處在傳輸層,是面向連線的協議,能夠為資料的傳輸提供可靠保障,因此資料在網路上傳輸不會出現丟包的情況。不過這種可靠的保障也會造成一些問題,也就是說前面的資料包沒有交付到目的地,後面的資料也無法進行傳輸。
RTMP傳輸的資料的基本單元為Message,但是實際上傳輸的最小單元是Chunk(訊息塊),因為RTMP協議為了提升傳輸速度,在傳輸資料的時候,會把Message拆分開來,形成更小的塊,這些塊就是Chunk。

Message結構分析


1.Message Type:它是一個訊息型別的ID,通過該ID接收方可以判斷接收到的資料的型別,從而做相應的處理。Message Type ID在1-7的訊息用於協議控制,這些訊息一般是RTMP協議自身管理要使用的訊息,使用者一般情況下無需操作其中的資料。Message Type ID為8,9的訊息分別用於傳輸音訊和視訊資料。Message Type ID為15-20的訊息用於傳送AMF編碼的命令,負責使用者與伺服器之間的互動,比如播放,暫停等。
2.Playload Length: 訊息負載的長度,即音視訊相關資訊的的資料長度,4個位元組
3.TimeStamp:時間戳,3個位元組。
4.Stream ID:訊息的唯一標識。拆分訊息成Chunk時新增該ID,從而在還原時根據該ID識別Chunk屬於哪個訊息。
5.Message Body:訊息體,承載了音視訊等資訊。

訊息塊(Chunk)

訊息塊在結構上與與訊息類似,有Header和Body。

1.Basic Header:基本的頭部資訊,在頭部資訊裡面包含了chunk stream ID(流通道Id,用來標識指定的通道)和chunk type(chunk的型別)。
2.Message Header:訊息的頭部資訊,包含了要傳送的實際資訊(可能是完整的,也可能是一部分)的描述資訊。Message Header的格式和長度取決於Basic Header的chunk type。
3.Extended TimeStamp:擴充套件時間戳。
4.Chunk Data:塊資料。
RTMP在傳輸資料的時候,傳送端會把需要傳輸的媒體資料封裝成訊息,然後把訊息拆分成訊息塊,再一個一個進行傳輸。接收端收到訊息塊後,根據Message Stream ID重新將訊息塊進行組裝、組合成訊息,再解除該訊息的封裝處理就可以還原出媒體資料。由此可以看出,RTMP收發資料是以Chunk為單位,而不是以Message為單位。需要注意的是,RTMP傳送Chunk必須是一個一個傳送,後面的Chunk必須等前面的Chunk傳送完成。