日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RTMP协议分析及推流过程

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RTMP协议分析及推流过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:

1.RTMP(實時消息傳輸協議)是Adobe 公司開發的一個基于TCP的應用層協議。

2.RTMP協議中基本的數據單元稱為消息(Message)。

3.當RTMP協議在互聯網中傳輸數據的時候,消息會被拆分成更小的單元,稱為消息塊(Chunk)。


RTMP 握手(Handshake):


1.握手開始于客戶端發送C0、C1塊。服務器收到C0或C1后發送S0和S1。
2.當客戶端收齊S0和S1后,開始發送C2。當服務器收齊C0和C1后,開始發送S2。
3.當客戶端和服務器分別收到S2和C2后,握手完成。


在實際工程應用中,一般是客戶端先將C0, C1塊同時發出,服務器在收到C1 之后同時將S0, S1, S2發給客戶端。之后客戶端向服務器端發送C2塊,簡單握手完成。


建立網絡連接(NetConnection):


1. 客戶端發送命令消息中的“連接”(connect)到服務器,請求與一個服務應用實例建立連接。


2. 服務器接收到連接命令消息后,發送確認窗口大小(Window Acknowledgement Size)協議消息到客戶端,同時連接到連接命令中提到的應用程序。


3. 服務器發送設置帶寬協議消息到客戶端。


4. 客戶端處理設置帶寬協議消息后,發送確認窗口大小(Window Acknowledgement Size)
協議消息到服務器端。


5. 服務端向客戶端發送“流開始”(Stream Begin)。


6. 服務器發送命令消息中的“結果”(_result),通知客戶端連接的狀態。


建立網絡流(Create Stream):


1. 客戶端發送命令消息中的“創建流”(CreateStream)命令到服務器端。
2. 服務器端接收到“創建流”命令后,發送命令消息中的“結果”(_result),通知客戶端流的狀態。


播放(Play):



1. 客戶端發送命令“播放”給服務器
2. 接收到播放命令后,服務器發送設置塊大小(ChunkSize)協議消息給客戶端
3. 服務器發送“stream begin”給客戶端,告訴客戶端流的id
4. 播放命令成功的話,服務器發送命令消息中的“響應狀態” NetStream.Play.Start & NetStream.Play.Reset,告知客戶端“播放”命令執行成功
5. 服務器發送客戶端要播放的音頻和視頻數據


小結:

? ? ?關系圖:


播放一個RTMP協議的流媒體需要經過以下幾個步驟:


下面用wireshark 抓包來分析一下過程:




RTMP 消息結構:


RTMP消息塊:

在網絡上傳輸數據時,消息需要被拆分成較小的數據塊,才適合在相應的網絡環境上傳輸。RTMP協議中規定,消息在網絡上傳輸時被拆分成消息塊(Chunk)。


RTMP 消息分塊:



總結

以上是生活随笔為你收集整理的RTMP协议分析及推流过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。