librtmp usage
rtmpdump是開發(fā)用于RTMP流的工具箱,支持所有RTMP格式,具體包含如下:
- RTMP
- RTMPE = RTMP + ENC,已加密的RTMP
- RTMPS = RTMP + SSL,通過SSL傳輸層傳輸RTMP
- RTMPT = RTMP + HTTP,在HTTP協(xié)議中傳輸RTMP
- RTMPTE = RTMP + HTTP + ENC,在HTTP協(xié)議中傳輸已加密RTMP
- RTMPTS = RTMP + HTTP + SSL,通過SSL傳輸層在HTTP協(xié)議中傳輸RTMP
源碼下載
git clone git://git.ffmpeg.ort/rtmpdump
從v2.1開始,提供了兩個額外的程序,rtmpsrv和rtmpsuck.
* rtmpsrv是服務(wù)器的存根,它記錄了來自客戶端的請求的連接和播放參數(shù)。然后它會使用這些參數(shù)來調(diào)用rtmpdump以請求流。
* rtmpsuck是一個透明代理,它會攔截來自客戶端的連接并創(chuàng)建一個向外的連接至真實服務(wù)器。當(dāng)所有握手完成且雙端協(xié)商加密key完畢后,它會把所有服務(wù)器發(fā)給客戶端的流數(shù)據(jù)以明文形式記錄至文件。
librtmp Usage
librtmp是一組RTMP API,該組API中提供了大量的客戶端函數(shù)以及小部分服務(wù)器函數(shù),以支持RTMP、RTMPT、RTMPE、RTMPS、RTMPTE以及RTMPTS。雖然RTMP最基礎(chǔ)的Spec已經(jīng)由Adobe公司發(fā)布,不過本組API并未采用Adobe的Spec進(jìn)行逆向開發(fā)。因此,本組API可能與已發(fā)布Spec有所出入,但通常是和其他Adobe客戶端運行方式一致的。
1. 概述
RTMPDump軟件包在rtmpdump中包含了一個基礎(chǔ)客戶端工具程序,一些服務(wù)器示例,以及一個支持編程訪問RTMP協(xié)議的庫。
基礎(chǔ)交互過程如下:
* RTMP_Alloc()創(chuàng)建會話句柄(session handle)
* RTMP_Init()進(jìn)行初始化
* RTMP_SetupURL()提供所有會話參數(shù)
* RTMP_Connect()建立網(wǎng)絡(luò)連接
* RTMP_ConnectStream()建立RTMP會話
* RTMP_Read()讀取流,如返回0字節(jié),則流讀取完畢
* RTMP_Close()用于關(guān)閉流
* RTMP_Free()用于釋放會話句柄
- 如需發(fā)布流,可在RTMP_Connect()前調(diào)用RTMP_EnableWrite(),然后在會話建立后使用使用RTMP_Write()
- RTMP_Pause()在流播放過程中用于在暫停和播放狀態(tài)間切換
- RTMP_Seek()用于在流播放過程中移動位置
所有數(shù)據(jù)以FLV格式進(jìn)行傳輸,基礎(chǔ)會話需要提供RTMP URL。RTMP URL格式如下:
rtmp[t][e][s]://hostname[:port][/app[/playpath]]如前所述,原始rtmp、協(xié)議或傳輸層包裹的及已加密會話均可支持。
額外的參數(shù)可通過在URL后添加以空格區(qū)隔的鍵值對(key=value)進(jìn)行指定,需要注意的是含有特殊字符時要使用‘\HH(Hexadecimal)’格式,以免誤導(dǎo)選項解釋器(option parser),例如,空格需表示為’\20’,反斜杠為’\5c’。
2. 選項
網(wǎng)絡(luò)參數(shù)(Network)
參數(shù)定義如何連接至媒體服務(wù)器:
* socks=host:port 使用指定的SOCKS4 proxy
連接參數(shù)(Connection)
選項定義了RTMP連接請求分組內(nèi)容,如未提供正確值,媒體服務(wù)器將拒絕連接:
* app=name RTMP服務(wù)器上希望連接的程序,會覆蓋URL中包含的程序名。某些時候librtmp URL parser不能夠智能決定app名稱,所以可通過該參數(shù)進(jìn)行指定
* tcUrl=url 目標(biāo)流的URL,默認(rèn)為rtmp[t][e|s]://host[:port]/app
* pageUrl=url 媒體被嵌入的網(wǎng)頁URL,默認(rèn)不設(shè)定任何值
* swfUrl=url 用于媒體的SWF播放器,默認(rèn)不設(shè)定任何值
* flashVer=version 用于啟動SWF播放器的Flash插件版本,默認(rèn)為”LNX 10,0,32,18”
* conn=type:data 在連接消息后添加任意AMF數(shù)據(jù),類型必須為B(Boolean)/N(number)/S(string)/O(object)或Z(null)。對于Boolean類型,用0和1分別代表FALSE和TRUE;類似地對于Objects必須使用0或1來分別代表一個對象的結(jié)束和開始;子對象中的數(shù)據(jù)成員可能被命名,可在類型前加前綴‘N’并依次指定名稱和值,如NB:myFlag:1。該選項可多次使用以構(gòu)建各種AMF序列,如:
3. 會話參數(shù)
這些選項將在連接請求成功后生效。
- playpath=path 覆蓋從RTMP URL中解析出來的playpath。有時候rtmpdump URL parser不能夠正確地判斷出正確的playpath,所以必須通過該選項進(jìn)行顯式指定
- playlist=0/1 默認(rèn)值為FALSE。如果值為1或TRUE,則在發(fā)送play命令前提交一個set_playlist命令。播放列表中會只包含當(dāng)前playpath。如該值為0或FALSE,set_playlist命令不會被發(fā)送。
- live=0/1 標(biāo)明該媒體是一個live流,這意味著恢復(fù)和seeking操作都是不支持的
- subscribe=path 訂閱的live流名稱,默認(rèn)情況和playpath一致
- start=num 從流的第幾秒開始,live流不支持該參數(shù)
- stop=num 在流的第幾秒結(jié)束
- buffer=num 設(shè)置buffer的大小,單位為ms,默認(rèn)值為3000
- timeout=num 設(shè)置會話超時時間,如num秒內(nèi)未收到服務(wù)器端數(shù)據(jù),則超時返回。默認(rèn)為120s.
4. 安全參數(shù)
這些參數(shù)用于處理來自服務(wù)器端的額外的驗證請求。
- token=key SecureToken響應(yīng)的Key,如server需要SecureToken驗證時,將使用到該Key
- jtv=JSON JSON token用于傳統(tǒng)的Jstin.tv服務(wù)器,將調(diào)用NetStream.Authenticate.UsherToken
- swfVfy=0/1 如該值為1或TRUE,SWF播放器將會從swfUrl指定路徑獲取以完成SWF確認(rèn)。SWF的hash和size是自動計算完成的。同時SWF信息會被緩存到用戶目錄下的文件.swfinfo中,所以實際上不必每次接收后都進(jìn)行重復(fù)計算。.swfinfo文件記錄了SWF URL、fetch到的時間、SWF文件修改的時間戳、文件大小、以及hash代碼。默認(rèn)情況下,緩存信息會在重校驗(re-checking)前的30天內(nèi)有效
- swfAge=days 指定重校驗前緩存SWF信息的使用天數(shù)。設(shè)置為0時表示每次都要去校驗SWF URL。注意如果校驗結(jié)果顯示SWF文件和之前的時間戳一致,不會再重復(fù)獲取。
總結(jié)
以上是生活随笔為你收集整理的librtmp usage的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的填充因子_SQL SERVE
- 下一篇: 静音抑制_正在研究利润以抑制创新