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

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

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

想了解下直播常見(jiàn)協(xié)議RTMP,可是看著網(wǎng)文,頭疼,這里記錄下RTMP協(xié)議推流播放的交互流程,細(xì)節(jié)可以再看規(guī)范,感覺(jué)會(huì)舒服一些。

RTMP(Real Time Messaging Protocol 實(shí)時(shí)消息傳輸協(xié)議)

RTMP是由Adobe公司提出的,在互聯(lián)網(wǎng)TCP/IP五層體系結(jié)構(gòu)中應(yīng)用層,RTMP協(xié)議是基于TCP協(xié)議的······ , 吧啦吧啦的就不看了,先只了解它是基于tcp且可以用來(lái)推流的一個(gè)應(yīng)用層協(xié)議就行了。

RTMP協(xié)議推流流程

然后看看它的一個(gè)推流過(guò)程

在TCP三次握手后(補(bǔ)個(gè)圖)

RTMP協(xié)議推流交互流程

 

用RTMP協(xié)議的流媒體推流還需要經(jīng)過(guò)以下幾個(gè)步驟:

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

建立連接(建立客戶(hù)端與服務(wù)器之間的“網(wǎng)絡(luò)連接”)

建立流(建立客戶(hù)端與服務(wù)器之間的“網(wǎng)絡(luò)流”)

推流&播放

RTMP握手

首先服務(wù)端與客戶(hù)端需要通過(guò)3次交換報(bào)文完成握手,RTMP是由三個(gè)靜態(tài)大小的塊,而不是可變大小的塊組成的,客戶(hù)端與服務(wù)器發(fā)送相同的三個(gè)chunk,客戶(hù)端發(fā)送c0,c1,c2,服務(wù)端發(fā)送s0,s1,s2。

RTMP協(xié)議推流交互流程

 

●客戶(hù)端發(fā)送 C0,C1 塊,握手開(kāi)始。

●客戶(hù)端在發(fā)送 C2 之前客戶(hù)端必須等待接收 S1 。

●客戶(hù)端在發(fā)送任何數(shù)據(jù)之前客戶(hù)端必須等待接收 S2。

●服務(wù)端在發(fā)送 S0 和 S1 之前必須等待接收 C0,也可以等待接收 C1。

●服務(wù)端在發(fā)送 S2 之前必須等待接收 C1。

●服務(wù)端在發(fā)送任何數(shù)據(jù)之前必須等待接收 C2。

RTMP建立連接

●客戶(hù)端發(fā)送命令消息中的“連接”(connect)到服務(wù)器,請(qǐng)求與一個(gè)服務(wù)應(yīng)用實(shí)例建立連接。

●服務(wù)器接收到連接命令消息后,發(fā)送確認(rèn)窗口大小(Window Acknowledgement Size)協(xié)議消息到客戶(hù)端,同時(shí)連接到連接命令中提到的應(yīng)用程序。

●服務(wù)器發(fā)送設(shè)置帶寬協(xié)議(Set Peer Bandwidth)消息到客戶(hù)端。

●客戶(hù)端處理設(shè)置帶寬協(xié)議消息后,發(fā)送確認(rèn)窗口大小(Window Acknowledgement Size)協(xié)議消息到服務(wù)器端。

●服務(wù)器發(fā)送用戶(hù)控制消息中的“流開(kāi)始”(Stream Begin)消息到客戶(hù)端。

●服務(wù)器發(fā)送命令消息中的“結(jié)果”(_result),通知客戶(hù)端連接的狀態(tài)。

RTMP協(xié)議推流交互流程

 

RTMP建流&Play

●客戶(hù)端在收到來(lái)自服務(wù)器的建流命令(createstream)的成功結(jié)果(_result)后發(fā)送(play)命令。

●服務(wù)器在接收到play命令后,發(fā)送一個(gè)來(lái)設(shè)置塊大小(SetChunkSize)消息。

●服務(wù)器發(fā)送另一個(gè)用戶(hù)控制消息,指定事件“流記錄”(StreamIsRecorded)和流ID。這個(gè)消息的頭2字節(jié)攜帶事件類(lèi)型,最后4字節(jié)攜帶流ID。

●服務(wù)器發(fā)送另一個(gè)用戶(hù)控制消息,指定事件“流開(kāi)始”(StreamBegin)。向客戶(hù)端指示流的開(kāi)始。

●如果客戶(hù)端發(fā)送的播放(play)命令成功,服務(wù)器發(fā)送命令消息(onStatus),NeStream.Play.Start & NeStream.Play.Reset。

只有當(dāng)客戶(hù)端發(fā)送的play命令設(shè)置了reset標(biāo)志時(shí),服務(wù)器才會(huì)發(fā)送NeStream.Play.Reset。

●如果沒(méi)有找到要播放的流,服務(wù)器將發(fā)送onStatus消息NeStream.Play.StreamNotFound。

●之后,客戶(hù)端播放服務(wù)器發(fā)送的音頻和視頻數(shù)據(jù)

RTMP協(xié)議推流交互流程

 

Wireshark抓個(gè)RTMP流

湖南衛(wèi)視的RTMP流

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

RTMP協(xié)議推流交互流程

 

拋開(kāi)握手不看流程如下:

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  ...

其他關(guān)于協(xié)議細(xì)節(jié)再看看協(xié)議規(guī)范 rtmp_specification_1.0.pdf

參考 : rtmp_specification_1.0.pdf

分享到:
標(biāo)簽:協(xié)議 RTMP
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定