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 objectpair)
play,publish,seek,pause等命令可以在netstream中傳送。
2.3 ext time stamp
2.4資料 3
rtmp協議英文版
開源專案 rtmp dump
python協議 Python 協議小總
每個程式語言都有自己的最佳實踐.通常你不能套用別的語言來寫出pythonic的 python 是一門初學簡單,越學越難的語言.在python的世界中,萬物皆物件.當我們說某個物件是什麼型別時,在根本上其實指的是 這個物件滿足了該型別的特定介面規範,可以被當成這個型別來使用.如何定義乙個物件的特定介面...
Xamarin for android學習總結一
1.adapter就是資料讀入記憶體後的 記憶體中介 2.intend,broadcast,server,provider,activity,執行關係圖 3.toast用於向使用者顯示一些幫助 提示 c 中toast是由其他執行緒呼叫更新ui主線程之用 4.android中ui執行緒與後台執行緒互動...
UPS電總協議 LENGTH和CHKSUM計算
一.length計算 length共2個位元組,由lenid和lchksum組成,lenid表示info項的ascii碼位元組數,當 lenid 0時,info為空,即無該項。length傳輸中先傳高位元組,再傳低位元組,分四個ascii碼傳 送。校驗碼的計算 d11d10d9d8 d7d6d5d4...