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

RTMP:Routing Table Maintenance Protocol(路由選擇表維護協(xié)議)
在 AppleTalk 協(xié)議組中,路由選擇表維護協(xié)議(RTMP,Routing Table Protocol)是一種傳輸層協(xié)議,它在 AppleTalk 路由器中建立并維護路由選擇表。RTMP 基于路由選擇信息協(xié)議(RIP)。正如 RIP 一樣,RTMP 使用跳數(shù)作為路由計量標準。一個數(shù)據(jù)包從源網(wǎng)絡發(fā)送到目標網(wǎng)絡,必須通過的路由器或其它中間介質節(jié)點數(shù)目的計算結果即為跳數(shù)。
Real Time Messaging Protocol(實時消息傳送協(xié)議協(xié)議)概述
實時消息傳送協(xié)議是Adobe Systems公司為Flash播放器和服務器之間音頻、視頻和數(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)絡流.這些通道中的包都是按照固定大小的包傳輸?shù)?
網(wǎng)絡連接(Connection)
一個Actionscript連接并播放一個流的簡單代碼:
以下為引用的內容: 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"); |
默認端口為1935
Client → Server :向服務器發(fā)出握手請求.這不屬于協(xié)議包一部分,該握手請求第一個字節(jié)為(0×03),其后跟著1536個字節(jié).經(jīng)管看上去這部分的內容對于RTMP協(xié)議來說并不是至關重要的,但也不可隨意對待.
Server → Client :服務器向客戶端回應握手請求.這部分的數(shù)據(jù)仍然不屬于RTMP協(xié)議的部分.該回應的其實字節(jié)仍然為(0x03),但是后邊跟著個長度為1536個字節(jié)(一共為3072 )的包塊.第一個1536塊看上去似乎可以是任意內容,甚至好像可以是Null都沒有關系.第二個1536的代碼塊,是上一步客戶端向服務器端發(fā)送的握手請求的內容.
Client→Server:把上一步服務器向客戶端回應的第二塊1536個字節(jié)的數(shù)據(jù)塊.
至此客戶端與服務器端的握手結束,下面將發(fā)送RTMP協(xié)議的包內容.
Client → Server :向服務器發(fā)送連接包.
Server → Client :服務器回應. ... .... 等等... ...
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包結構
RTMP包包含一個固定長度的包頭和一個最長為128字節(jié)的包體.包頭可以是下面4種長度的任意一種:12, 8, 4, or 1 byte(s).
第一個字節(jié)的前兩個Bit很重要,它決定了包頭的長度.它可以用掩碼0xC0進行"與"計算.下面的表格羅列了可能的包頭長度:Bits Header Length
00 12 bytes
01 8 bytes
10 4 bytes
11 1 byte
我們在這里討論關RTMP包結構的問題并不是非常的詳細.我們在以后有時間會討論關于AMF的問題(敬請期待...:loveliness:),其實RTMP包結構就是使用了AMF格式.
流
關于流的操作我們需要進一步研究,在論壇中的http://www.openred5.com/bbs/viewthread.php?tid=175&extra=page%3D1(被和諧)這篇文章研究的還是不錯的,大家可以參考.不過下面可以列一個關于客戶端向服務器端發(fā)送流的流程:
Client→Server :發(fā)送一個創(chuàng)建流的請求.
Server→Client :返回一個表示流的索引號.
Client→Server :開始發(fā)送.
Client→Server :發(fā)送視音頻數(shù)據(jù)包(這些包在同一個頻道(channel)并用流的索引號來唯一標識).
相關文章
電腦音頻播放器哪個最好用? 10款好用的Windows本地音樂播放器推薦
再好聽的音樂也要有音頻播放器才能順利播放,而有些音頻播放器會損傷音樂原本的音質,或是廣告太多等,下面就為大家推薦一些最好用的Windows端音頻播放器,讓你收獲更好的2025-01-16抖音電腦版怎么設置直播可見范圍? 抖音電腦版設置誰不能看的技巧
有的小伙伴在使用抖音直播伴侶的過程中想要更改直播間的可見范圍,設置只給粉絲看,或是不給某些人看,想要完成該設置,詳細請看下文介紹2024-09-23優(yōu)酷彈幕怎么沒了怎么辦? 電腦上優(yōu)酷視頻不顯示彈幕的解決辦法
看視頻很喜歡看字幕,但是發(fā)現(xiàn)電腦端的優(yōu)酷視頻竟然沒有字幕,該怎么辦呢?下面我們就來看看優(yōu)酷顯示視頻字幕的教程2024-08-09PotPlayer 和 LAVFilters配置滿足基本BDRIP回放需求
potplayer播放器內置的解碼器是非常強大的,幾乎能流暢播放所有音視頻文件,但是因為一些特殊需求,或者想獲得更高級的觀賞體驗,更流暢清晰的畫面質量,我們就需要借助第2024-07-30- Potplayer 是高清影視常用的播放器,想要結合madVR實現(xiàn)最強畫質,該怎么操作呢?下面我們就來看看詳細的設置圖文教程2024-07-30
PotPlayer+LAV+MadVR+XySubFilter配置保姆級教程
Potplayer 作為 Windows 上很受歡迎的一款播放器,公認的最佳配置為結合 LAV、madVR、XySubfilter 進行使用,本文將介紹一種對其簡單配置的方法2024-07-30PotPlayer播放器中如何進行截圖 PotPlayer播放器中進行截圖的方法
PotPlayer播放器中如何進行截圖?依次點擊視頻——圖片截取,在子選項中就可以找到截圖功能,下方是關于如何使用PotPlayer播放器進行截圖的具體操作方法2024-07-30potplayer如何設置多媒體鍵用于全局窗口 potplayer設置將多媒體鍵用于
potplayer如何設置多媒體鍵用于全局窗口?可以進入到選項設置的窗口中,點擊打開快捷鍵選項,找到其中的多媒體鍵設置選項,之后進行相應的設置就好了2024-07-30PotPlayer如何將波形音量設為最大值 PotPlayer系統(tǒng)波形音量設為最大值
PotPlayer如何將波形音量設為最大值?只需要進入到音量控制設置的窗口中,在設置頁面上將系統(tǒng)波形音量設為最大值選項進行勾選上,之后點擊確定按鈕就可以了2024-07-30PotPlayer使用LAV+madvr渲染器播放4k原盤掉幀卡頓怎么辦?
madVR是一款非常強大的視頻渲染器,配合PotPlayer播放視頻可以提高畫面質量,提高視頻幀率,讓畫面看起來更加生動流暢,但是出現(xiàn)掉幀怎么辦呢?下面我們分享有效的解決辦法2024-07-25