RTMP協(xié)議與RTMP視頻播放器的應(yīng)用

RTMP:Routing Table Maintenance Protocol(路由選擇表維護(hù)協(xié)議)
在 AppleTalk 協(xié)議組中,路由選擇表維護(hù)協(xié)議(RTMP,Routing Table Protocol)是一種傳輸層協(xié)議,它在 AppleTalk 路由器中建立并維護(hù)路由選擇表。RTMP 基于路由選擇信息協(xié)議(RIP)。正如 RIP 一樣,RTMP 使用跳數(shù)作為路由計(jì)量標(biāo)準(zhǔn)。一個數(shù)據(jù)包從源網(wǎng)絡(luò)發(fā)送到目標(biāo)網(wǎng)絡(luò),必須通過的路由器或其它中間介質(zhì)節(jié)點(diǎn)數(shù)目的計(jì)算結(jié)果即為跳數(shù)。
Real Time Messaging Protocol(實(shí)時消息傳送協(xié)議協(xié)議)概述
實(shí)時消息傳送協(xié)議是Adobe Systems公司為Flash播放器和服務(wù)器之間音頻、視頻和數(shù)據(jù)傳輸開發(fā)的私有協(xié)議。它有三種變種:
1)工作在TCP之上的明文協(xié)議,使用端口1935;
2)RTMPT封裝在HTTP請求之中,可穿越防火墻;
3)RTMPS類似RTMPT,但使用的是HTTPS連接;
介紹:
RTMP協(xié)議是被Flash用于對象,視頻,音頻的傳輸.該協(xié)議建立在TCP協(xié)議或者輪詢HTTP協(xié)議之上.
RTMP協(xié)議就像一個用來裝數(shù)據(jù)包的容器,這些數(shù)據(jù)可以是AMF格式的數(shù)據(jù),也可以是FLV中的視/音頻數(shù)據(jù).
一個單一的連接可以通過不同的通道傳輸多路網(wǎng)絡(luò)流.這些通道中的包都是按照固定大小的包傳輸?shù)?
網(wǎng)絡(luò)連接(Connection)
一個Actionscript連接并播放一個流的簡單代碼:
以下為引用的內(nèi)容: var videoInstance:Video = your_video_instance; var nc:NetConnection = new NetConnection(); var connected:Boolean = nc.connect("rtmp:/localhost/myapp"); var ns:NetStream = new NetStream(nc); videoInstance.attachVideo(ns); ns.play("flvName"); |
默認(rèn)端口為1935
Client → Server :向服務(wù)器發(fā)出握手請求.這不屬于協(xié)議包一部分,該握手請求第一個字節(jié)為(0×03),其后跟著1536個字節(jié).經(jīng)管看上去這部分的內(nèi)容對于RTMP協(xié)議來說并不是至關(guān)重要的,但也不可隨意對待.
Server → Client :服務(wù)器向客戶端回應(yīng)握手請求.這部分的數(shù)據(jù)仍然不屬于RTMP協(xié)議的部分.該回應(yīng)的其實(shí)字節(jié)仍然為(0x03),但是后邊跟著個長度為1536個字節(jié)(一共為3072 )的包塊.第一個1536塊看上去似乎可以是任意內(nèi)容,甚至好像可以是Null都沒有關(guān)系.第二個1536的代碼塊,是上一步客戶端向服務(wù)器端發(fā)送的握手請求的內(nèi)容.
Client→Server:把上一步服務(wù)器向客戶端回應(yīng)的第二塊1536個字節(jié)的數(shù)據(jù)塊.
至此客戶端與服務(wù)器端的握手結(jié)束,下面將發(fā)送RTMP協(xié)議的包內(nèi)容.
Client → Server :向服務(wù)器發(fā)送連接包.
Server → Client :服務(wù)器回應(yīng). ... .... 等等... ...
RTMP 數(shù)據(jù)類型
0×01 Chunk Size changes the chunk size for packets
0×02 Unknown anyone know this one?
0×03 Bytes Read send every x bytes read by both sides
0×04 Ping ping is a stream control message, has subtypes
0×05 Server BW the servers downstream bw
0×06 Client BW the clients upstream bw
0×07 Unknown anyone know this one?
0×08 Audio Data packet containing audio
0×09 Video Data packet containing video data
0x0A - 0×11 Unknown anyone know?
0×12 Notify an invoke which does not expect a reply
0×13 Shared Object has subtypes
0×14 Invoke like remoting call, used for stream actions too.
Shared Object 數(shù)據(jù)類型
0×01 Connect
0×02 Disconnect
0×03 Set Attribute
0×04 Update Data
0×05 Update Attribute
0×06 Send Message
0×07 Status
0×08 Clear Data
0×09 Delete Data
0x0A Delete Attribute
0x0B
Initial Data
RTMP包結(jié)構(gòu)
RTMP包包含一個固定長度的包頭和一個最長為128字節(jié)的包體.包頭可以是下面4種長度的任意一種:12, 8, 4, or 1 byte(s).
第一個字節(jié)的前兩個Bit很重要,它決定了包頭的長度.它可以用掩碼0xC0進(jìn)行"與"計(jì)算.下面的表格羅列了可能的包頭長度:Bits Header Length
00 12 bytes
01 8 bytes
10 4 bytes
11 1 byte
我們在這里討論關(guān)RTMP包結(jié)構(gòu)的問題并不是非常的詳細(xì).我們在以后有時間會討論關(guān)于AMF的問題(敬請期待...:loveliness:),其實(shí)RTMP包結(jié)構(gòu)就是使用了AMF格式.
流
關(guān)于流的操作我們需要進(jìn)一步研究,在論壇中的http://www.openred5.com/bbs/viewthread.php?tid=175&extra=page%3D1(被和諧)這篇文章研究的還是不錯的,大家可以參考.不過下面可以列一個關(guān)于客戶端向服務(wù)器端發(fā)送流的流程:
Client→Server :發(fā)送一個創(chuàng)建流的請求.
Server→Client :返回一個表示流的索引號.
Client→Server :開始發(fā)送.
Client→Server :發(fā)送視音頻數(shù)據(jù)包(這些包在同一個頻道(channel)并用流的索引號來唯一標(biāo)識).
相關(guān)文章
電腦音頻播放器哪個最好用? 10款好用的Windows本地音樂播放器推薦
再好聽的音樂也要有音頻播放器才能順利播放,而有些音頻播放器會損傷音樂原本的音質(zhì),或是廣告太多等,下面就為大家推薦一些最好用的Windows端音頻播放器,讓你收獲更好的2025-01-16抖音電腦版怎么設(shè)置直播可見范圍? 抖音電腦版設(shè)置誰不能看的技巧
有的小伙伴在使用抖音直播伴侶的過程中想要更改直播間的可見范圍,設(shè)置只給粉絲看,或是不給某些人看,想要完成該設(shè)置,詳細(xì)請看下文介紹2024-09-23優(yōu)酷彈幕怎么沒了怎么辦? 電腦上優(yōu)酷視頻不顯示彈幕的解決辦法
看視頻很喜歡看字幕,但是發(fā)現(xiàn)電腦端的優(yōu)酷視頻竟然沒有字幕,該怎么辦呢?下面我們就來看看優(yōu)酷顯示視頻字幕的教程2024-08-09PotPlayer 和 LAVFilters配置滿足基本BDRIP回放需求
potplayer播放器內(nèi)置的解碼器是非常強(qiáng)大的,幾乎能流暢播放所有音視頻文件,但是因?yàn)橐恍┨厥庑枨螅蛘呦氆@得更高級的觀賞體驗(yàn),更流暢清晰的畫面質(zhì)量,我們就需要借助第2024-07-30基于PotPlayer 和 madVR 的播放器設(shè)置教程
Potplayer 是高清影視常用的播放器,想要結(jié)合madVR實(shí)現(xiàn)最強(qiáng)畫質(zhì),該怎么操作呢?下面我們就來看看詳細(xì)的設(shè)置圖文教程2024-07-30PotPlayer+LAV+MadVR+XySubFilter配置保姆級教程
Potplayer 作為 Windows 上很受歡迎的一款播放器,公認(rèn)的最佳配置為結(jié)合 LAV、madVR、XySubfilter 進(jìn)行使用,本文將介紹一種對其簡單配置的方法2024-07-30PotPlayer播放器中如何進(jìn)行截圖 PotPlayer播放器中進(jìn)行截圖的方法
PotPlayer播放器中如何進(jìn)行截圖?依次點(diǎn)擊視頻——圖片截取,在子選項(xiàng)中就可以找到截圖功能,下方是關(guān)于如何使用PotPlayer播放器進(jìn)行截圖的具體操作方法2024-07-30potplayer如何設(shè)置多媒體鍵用于全局窗口 potplayer設(shè)置將多媒體鍵用于
potplayer如何設(shè)置多媒體鍵用于全局窗口?可以進(jìn)入到選項(xiàng)設(shè)置的窗口中,點(diǎn)擊打開快捷鍵選項(xiàng),找到其中的多媒體鍵設(shè)置選項(xiàng),之后進(jìn)行相應(yīng)的設(shè)置就好了2024-07-30PotPlayer如何將波形音量設(shè)為最大值 PotPlayer系統(tǒng)波形音量設(shè)為最大值
PotPlayer如何將波形音量設(shè)為最大值?只需要進(jìn)入到音量控制設(shè)置的窗口中,在設(shè)置頁面上將系統(tǒng)波形音量設(shè)為最大值選項(xiàng)進(jìn)行勾選上,之后點(diǎn)擊確定按鈕就可以了2024-07-30PotPlayer使用LAV+madvr渲染器播放4k原盤掉幀卡頓怎么辦?
madVR是一款非常強(qiáng)大的視頻渲染器,配合PotPlayer播放視頻可以提高畫面質(zhì)量,提高視頻幀率,讓畫面看起來更加生動流暢,但是出現(xiàn)掉幀怎么辦呢?下面我們分享有效的解決辦法2024-07-25