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