rtmp協議是乙個網際網路tcp/ip五層體系結構中應用層的協議。rtmp協議中基本的資料單元稱為訊息(message)。當rtmp協議在網際網路中傳輸資料的時候,訊息會被拆分成更小的單元,稱為訊息塊(chunk)。
1 訊息
2 訊息塊
在網路上傳輸資料時,訊息需要被拆分成較小的資料塊,才適合在相應的網路環境上傳輸。rtmp協議中規定,訊息在網路上傳輸時被拆分成訊息塊(chunk)。訊息塊首部(chunk header)有三部分組成:用於標識本塊的chunk basic header
,用於標識本塊負載所屬訊息的chunk message header
,以及當時間戳溢位時才出現的extended timestamp。訊息塊的報文結構如下圖所示。
3 訊息分塊
在訊息被分割成幾個訊息塊的過程中,訊息負載部分(message body)被分割成大小固定的資料塊(預設是128位元組,最後乙個資料塊可以小於該固定長度),並在其首部加上訊息塊首部(chunk header),就組成了相應的訊息塊。訊息分塊過程如下圖所示,乙個大小為307位元組的訊息被分割成128位元組的訊息塊(除了最後乙個)。
rtmp傳輸**資料的過程中,傳送端首先把**資料封裝成訊息,然後把訊息分割成訊息塊,最後將分割後的訊息塊通過tcp協議傳送出去
。接收端在通過tcp協議收到資料後,首先把訊息塊重新組合成訊息,然後通過對訊息進行解封裝處理就可以恢復出**資料。
2.1 chunk basic header [1-3位元組]
headertype+channelid組成,其中channelid的大小決定了整個chunk basic header的大小
2.1.1
這個字段編碼了訊息塊流的
id和訊息塊的型別,訊息塊型別決定了訊息包頭的編碼格式,長度完全
取決於可變長的訊息塊流
headertype(fmt):決定了chunk message header的編碼方式和大小,在第乙個位元組的高兩位
bits
chunk message header length
00 12 bytes
01 8 bytes
10 4 bytes
11 1 byte
2.1.2 channelid:
channelid 用途
02 ping 和byteread通道
03 invoke通道 我們的connect() publish()和自字寫的netconnection.call() 資料都是在這個通道的
04 audio和vidio通道
2.2
chunk message header
以最大fmt =00 length(
chunk message header
) == 12
為例chunk message header的結構是:timestamp,message_length,message_type,msg_stream_id
其中message_type是乙個列舉變數:
type為1,2,3,5,6的時候是協議控制訊息
type為4的時候表示 user control messages [event_type + event_data] event_type有stream begin
,stream end...
type為
8,音訊資料
type為
18 元資料訊息[amf0]
type為20 命令訊息 command message(rpc message)
these messages are sent to perform some operations like connect, createstream, publish, play, pause on the peer.
命令訊息主要分成兩種netconnection和netstream。
connect,call,close,createstream命令可以在netconnection中傳送。
coonect(name,transcationid,command object pair)
play,publish,seek,pause等命令可以在netstream中傳送。
2.3 ext time stamp
2.4資料
3
RTMP協議詳解(二)
rtmp的位元組序 rtmp的位元組序和大多數網路協議一樣是大端序,也有一些欄位是小端序的,不過都有特殊的說明。rtmp的head組成 rtmp的head在協議中的表現形式是chunk head,前面已經說到乙個message head可以分成乙個和多個chunk,為了區分這些chunk,肯定是需要...
RTMP協議詳解 (一) 握手
rtmp協議介紹 包結構 握手在rtmp連線建立後,服務端與客戶端需要通過3次交換報文完成握手.握手其他的協議不同,是由三個靜態大小的塊,而不是可變大小的塊組成的,客戶端與伺服器傳送相同的三個chunk,客戶端傳送c0,c1,c2 chunk,服務端傳送s0,s1,s2 chunk.傳送順序 握手開...
chunk rtmp 幀 RTMP協議詳解(三)
chunk msg header chunk msg header的長度是可變的,chunk msg header可變的原因是為了壓縮傳輸的位元組數,把一些相同型別的chunk的head去掉一些位元組,換句話說就是四種型別的包頭都可以通過一定的規則還原成11個位元組,這個壓縮和還原在rtmp協議中稱...