日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

想了解下直播常見協議RTMP,可是看著網文,頭疼,這里記錄下RTMP協議推流播放的交互流程,細節可以再看規范,感覺會舒服一些。

RTMP(Real Time Messaging Protocol 實時消息傳輸協議)

RTMP是由Adobe公司提出的,在互聯網TCP/IP五層體系結構中應用層,RTMP協議是基于TCP協議的······ , 吧啦吧啦的就不看了,先只了解它是基于tcp且可以用來推流的一個應用層協議就行了。

RTMP協議推流流程

然后看看它的一個推流過程

在TCP三次握手后(補個圖)

RTMP協議推流交互流程

 

用RTMP協議的流媒體推流還需要經過以下幾個步驟:

握手(RTMP連接都是以握手作為開始)

建立連接(建立客戶端與服務器之間的“網絡連接”)

建立流(建立客戶端與服務器之間的“網絡流”)

推流&播放

RTMP握手

首先服務端與客戶端需要通過3次交換報文完成握手,RTMP是由三個靜態大小的塊,而不是可變大小的塊組成的,客戶端與服務器發送相同的三個chunk,客戶端發送c0,c1,c2,服務端發送s0,s1,s2。

RTMP協議推流交互流程

 

●客戶端發送 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協議推流交互流程

 

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。

●之后,客戶端播放服務器發送的音頻和視頻數據

RTMP協議推流交互流程

 

Wireshark抓個RTMP流

湖南衛視的RTMP流

ffplay rtmp://58.200.131.2:1935/livetv/hunantv

RTMP協議推流交互流程

 

拋開握手不看流程如下:

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

分享到:
標簽:協議 RTMP
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定