轉載:http://blog.csdn.net/leixiaohua1020/article/details/11694129
RTMP協議是一個互聯網TCP/IP五層體系結構中應用層的協議。RTMP協議中基本的數據單元稱爲消息(Message)。當RTMP協議在互聯網中傳輸數據的時候,消息會被拆分成更小的單元,稱爲消息塊(Chunk)。
1 消息
消息是RTMP協議中基本的數據單元。不同種類的消息包含不同的Message Type ID,代表不同的功能。RTMP協議中一共規定了十多種消息類型,分別發揮着不同的作用。例如,Message Type ID在1-7的消息用於協議控制,這些消息一般是RTMP協議自身管理要使用的消息,用戶一般情況下無需操作其中的數據。Message Type ID爲8,9的消息分別用於傳輸音頻和視頻數據。Message Type ID爲15-20的消息用於發送AMF編碼的命令,負責用戶與服務器之間的交互,比如播放,暫停等等(PS:AMF(Action Message Format)是Flash與服務端通信的一種常見的二進制編碼模式,其傳輸效率高,可以在HTTP層面上傳輸)。消息首部(Message Header)有四部分組成:標誌消息類型的Message Type ID,標誌消息長度的Payload Length,標識時間戳的Timestamp,標識消息所屬媒體流的Stream ID。消息的報文結構如圖3所示。
消息
2 消息塊
在網絡上傳輸數據時,消息需要被拆分成較小的數據塊,才適合在相應的網絡環境上傳輸。RTMP協議中規定,消息在網絡上傳輸時被拆分成消息塊(Chunk)。消息塊首部(Chunk Header)有三部分組成:用於標識本塊的Chunk Basic Header,用於標識本塊負載所屬消息的Chunk Message Header,以及當時間戳溢出時纔出現的Extended Timestamp。消息塊的報文結構如圖4所示。
消息塊
3 消息分塊
在消息被分割成幾個消息塊的過程中,消息負載部分(Message Body)被分割成大小固定的數據塊(默認是128字節,最後一個數據塊可以小於該固定長度),並在其首部加上消息塊首部(Chunk Header),就組成了相應的消息塊。消息分塊過程如圖5所示,一個大小爲307字節的消息被分割成128字節的消息塊(除了最後一個)。
RTMP分塊
RTMP傳輸媒體數據的過程中,發送端首先把媒體數據封裝成消息,然後把消息分割成消息塊,最後將分割後的消息塊通過TCP協議發送出去。接收端在通過TCP協議收到數據後,首先把消息塊重新組合成消息,然後通過對消息進行解封裝處理就可以恢復出媒體數據。
RTMP協議規範(中文翻譯):http://download.csdn.net/detail/leixiaohua1020/6563059