在介紹主要內容之前,先介紹一下當前各協議的應用場景
rtmp:一般用作直播,允許丟包
rtsp:一般用作安防,不允許丟包
hls:即http live stream,蘋果公司封裝的基於http協議的直播協議
直播:根據其對實時性要求高,如中途進入直播間的觀眾,要盡快出現i幀讓使用者能看到影象,不能讓觀眾等待太久,而丟失部分幀並不影響**效果。可以減少i幀間隔,即gop間距盡量小,同時減小位元速率
下面開始正式內容,介紹rtmp協議資料傳輸格式:
對http協議有了解的大概都知道,http協議無論是get、post、put、delate方式,只是通過設定資料的不同位置和不同格式產生不同的請求效果
rtmp如是,其他任何一種協議也如是,都是設定了一套資料傳輸格式,並給他起名,作為一種資料傳輸標準
sps資料正常情況下為0x67
pps資料正常情況下為0x68
i幀資料正常情況下為0x65
取後5位,即:
sps型別: 0x67 & 0x1f = 7
pps型別: 0x68 & 0x1f = 8
i幀型別: 0x65 & 0x1f = 5
分離h264中的各型別幀的資料,只需根據型別進行切割即可,本章不做介紹。
為了方便解說,我列了乙個表
位元組索引01
234...
sps pps
0x17
0x00
0x00
0x00
0x00
...關鍵幀(i幀)
0x17
0x01
0x00
0x00
0x00
...非關鍵幀(p/b幀)
0x27
0x00
0x00
0x00
0x00
...可以看到,前5個位元組中,sps pps資料第乙個位元組和i幀第乙個位元組是相同,不同之處在於第二個位元組,i幀使用0x01,sps pps 使用0x00, p/b幀則第一位元組使用0x27
下面分別從第5位索引開始介紹各幀型別的資料格式
sps pps幀:
位元組索引
占用位元組
資料含義51
0x01
版本號6
1sps[1]
即0x67後面一位的位元組71
sps[2]
即0x67後面第二位的位元組81
sps[3]
即0x67後面第三位的位元組91
0xff
恆定值10
10xe1
sps個數(即0xe1 & 0x1f = 1)恆定值111
(spslen >> 8) & 0xff
sps長度,使用兩個位元組儲存121
len & 0xff
13...13+spslen-1
spslen
sps內容
sps內容
13+spslen
10x01
pps個數
13+spslen+1
1(ppslen >> 8) & 0xff
pps長度,使用兩個位元組儲存
13+spslen+2
1ppslen & 0xff
13+spslen+3...13+spslen+3+ppslen-1
ppslen
pps內容
pps內容
i/p/b幀:
位元組索引
占用位元組
資料含義51
(framelen >> 24) & 0xff
幀資料長度,使用4個自己儲存61
(framelen >> 16) & 0xff71
(framelen >>8) & 0xff81
framelen & 0xff
9...9+framelen-1
1frame資料內容
幀資料內容
以上**中,spslen為sps去除00 00 00 01後的資料長度,ppslen為pps去除00 00 00 01後的資料長度,framelen為i/p/b幀去除00 00 00 01後的資料長度。
二、音訊資料:
音訊資料相對簡單,不過需要分為兩步
第二步:音訊資料
同樣,列表說明
資料索引
占用位元組資料0
10xaf11
0x0021
0x1231
0x08
傳送音訊資料:
資料索引
占用位元組資料0
10xaf11
0x01
2...2+audiolen-1
audiolen
音訊資料內容
以上**中,audiolen為音訊取樣資料長度。
以上內容即為rtmp協議資料解析全部內容,本章內容結束。
RTMP協議概述
rtmp協議概述 介紹 rtmp協議就像乙個用來裝資料報的容器,這些資料可以是amf格式的資料,也可以是flv中的視 音訊資料.乙個單一的連線可以通過不同的通道傳輸多路網路流.這些通道中的包都是按照固定大小的包傳輸的.網路連線 connection copy to clipboard code va...
RTMP協議分析
rtmp協議封包 由乙個包頭和乙個包體組成,包頭可以是4種長度的任意一種 12,8,4,1 byte s 完整的rtmp包頭應該是12bytes,包含了時間戳,amfsize,amftype,streamid資訊,8位元組的包頭只紀錄了時間戳,amfsize,amftype,其他位元組的包頭紀錄資訊...
rtmp 協議詳解
rtmp協議是乙個網際網路tcp ip五層體系結構中應用層的協議。rtmp協議中基本的資料單元稱為訊息 message 當rtmp協議在網際網路中傳輸資料的時候,訊息會被拆分成更小的單元,稱為訊息塊 chunk 1 訊息 2 訊息塊 在網路上傳輸資料時,訊息需要被拆分成較小的資料塊,才適合在相應的網...