rtmp 協議詳解

2021-07-14 05:31:34 字數 2302 閱讀 1004

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資料

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協議中稱...