RTMP協議推流交互流程
- 2020 年 3 月 5 日
- 筆記
RTMP協議推流交互流程
想了解下直播常見協議RTMP,可是看着網文,頭疼,這裡記錄下RTMP協議推流播放的交互流程,細節可以再看規範,感覺會舒服一些。
RTMP(Real Time Messaging Protocol 實時消息傳輸協議)
RTMP是由Adobe公司提出的,在互聯網TCP/IP五層體系結構中應用層,RTMP協議是基於TCP協議的······ , 吧啦吧啦的就不看了,先只了解它是基於tcp且可以用來推流的一個應用層協議就行了。
RTMP協議推流流程
然後看看它的一個推流過程
在TCP三次握手後(補個圖)

用RTMP協議的流媒體推流還需要經過以下幾個步驟:
握手(RTMP連接都是以握手作為開始)
建立連接 (建立客戶端與服務器之間的「網絡連接」)
建立流 (建立客戶端與服務器之間的「網絡流」)
推流&播放
RTMP握手
首先服務端與客戶端需要通過3次交換報文完成握手,RTMP是由三個靜態大小的塊,而不是可變大小的塊組成的,客戶端與服務器發送相同的三個chunk,客戶端發送c0,c1,c2,服務端發送s0,s1,s2。

●客戶端發送 C0,C1 塊,握手開始。
●客戶端在發送 C2 之前客戶端必須等待接收 S1 。
●客戶端在發送任何數據之前客戶端必須等待接收 S2。
●服務端在發送 S0 和 S1 之前必須等待接收 C0,也可以等待接收 C1。
●服務端在發送 S2 之前必須等待接收 C1。
●服務端在發送任何數據之前必須等待接收 C2。
RTMP建立連接
●客戶端發送命令消息中的「連接」(connect)到服務器,請求與一個服務應用實例建立連接。
●服務器接收到連接命令消息後,發送確認窗口大小(Window Acknowledgement Size)協議消息到客戶端,同時連接到連接命令中提到的應用程序。
●服務器發送設置帶寬協議(Set Peer Bandwidth)消息到客戶端。
●客戶端處理設置帶寬協議消息後,發送確認窗口大小(Window Acknowledgement Size)協議消息到服務器端。
●服務器發送用戶控制消息中的「流開始」(Stream Begin)消息到客戶端。
●服務器發送命令消息中的「結果」(_result),通知客戶端連接的狀態。

RTMP建流&Play
●客戶端在收到來自服務器的建流命令(createstream)的成功結果(_result)後發送(play)命令。
●服務器在接收到play命令後,發送一個來設置塊大小(SetChunkSize)消息。
●服務器發送另一個用戶控制消息,指定事件「流記錄」(StreamIsRecorded)和流ID。這個消息的頭2位元組攜帶事件類型,最後4位元組攜帶流ID。
●服務器發送另一個用戶控制消息,指定事件「流開始」(StreamBegin)。向客戶端指示流的開始。
●如果客戶端發送的播放(play)命令成功,服務器發送命令消息(onStatus),NeStream.Play.Start & NeStream.Play.Reset。
只有當客戶端發送的play命令設置了reset標誌時,服務器才會發送NeStream.Play.Reset。
●如果沒有找到要播放的流,服務器將發送onStatus消息NeStream.Play.StreamNotFound。
●之後,客戶端播放服務器發送的音頻和視頻數據

Wireshark抓個RTMP流
湖南衛視的RTMP流
ffplay rtmp://58.200.131.2:1935/livetv/hunantv

拋開握手不看流程如下:
Client :
connect(‘livetv’)
Server :
Window Acknowledgement Size 5000000
Set Peer Bandwidth 5000000,Dynamic
Set Chunk Size 4096
_result(‘NetConnection.Connect.Success’)
Client :
Window Acknowledgement Size 5000000
createStream()
Server :
_result()
Client :
getStreamLength()
play(‘hunantv’)
Set Buffer Length 1,3000ms
Server :
Stream Begin 1
onStatus(‘NetStream.Play.Start’)
RtmpSampleAccess()
onMetaData()
Server :
Video Data
Audio Data
…
其他關於協議細節再看看協議規範 rtmp_specification_1.0.pdf
參考 :rtmp_specification_1.0.pdf


