rtmpdump命令列詳解

H&A發表於2020-10-31

rtmpdump使用說明

​ rtmpdump是一個命令列工具,它可以接收通過RTMP協議傳輸的流媒體內容,並轉存下來。

​ rtmpdump的工作原理:首先rtmpdump會連線到指定的RTMP伺服器,然後播放給定URL指定的媒體。Url的形式如下:

rtmp[t][e]://hostname[:port][/app[/playpath]]

​ 支援rtmp以及其變種協議,也支援安全加密鏈路以及加密的會話。

命令列語法

  • rtmpdump −r  url
          [ −n  hostname]
          [ −c  port]
          [ −l  protocol]
          [ −S  host:port]
          [ −a  app]
          [ −t  tcUrl]
          [ −p  pageUrl]
          [ −s  swfUrl]
          [ −f  flashVer]
          [ −u  auth]
          [ −C  conndata]
          [ −y  playpath]
          [ −Y]
          [ −v]
          [ −d  subscription]
          [ −e]
          [ −k  skip]
          [ −A  start]
          [ −B  stop]
          [ −b  buffer]
          [ −m  timeout]
          [ −T  key]
          [ −j  JSON]
          [ −w  swfHash]
          [ −x  swfSize]
          [ −W  swfUrl]
          [ −X  swfAge]
          [ −o  output]
          [ −#]
          [ −q]
          [ −V]
          [ −z]

    rtmpdump −h

選項

網路引數

​ 這些選項用於定義如何連線媒體伺服器。

–rtmp -r url

​ 指定伺服器以及媒體內容的url。

–host -n hostname

​ 指定伺服器的主機名,這個引數優先順序更高,會覆蓋RTMP URL中的主機名。

–port -c port

​ 指定伺服器的埠號,這個引數優先順序更高,會覆蓋RTMP URL中的埠號。

–protocol -l number

​ 指定伺服器的協議,這個引數優先順序更高,會覆蓋RTMP URL中的協議。

​ 可使用的值以及其含義如下:

​ 0 = rtmp

​ 1 = rtmpt

​ 2 = rtmpe

​ 3 = rtmpte

​ 4 = rtmps

​ 5 = rtmpts

–socks -s host:port

​ 指定要使用的SOCKS4代理地址。

連線引數

​ 這些選項用於指定RTMP連線中傳送的請求資料包中的內容。如果請求資料包中沒有提供正確的值,媒體伺服器可能會拒絕連線請求。

–app -a app

​ 指定要連線的媒體伺服器上的應用程式,這個引數優先順序更高,會覆蓋RTMP URL中的app部分。有時候,rtmpdump不能從RTMP URL中自動解析出正確的應用程式名,這時就需要我們使用這個選項明確指定它。

–tcUrl -t url

​ 指定要連線的目標流的URL。預設值為:rtmp[e]?/host[:port]/app/playpath ,由解析出的各個欄位值拼接而成。

–pageUrl -p url

​ 嵌入網頁的媒體的URL。預設情況下不傳送任何值。

–swfUrl -s url

​ 媒體的SWF播放器的URL。預設情況下不傳送任何值。

–flashVer -f version

​ 用於執行SWF播放器的Flash外掛的版本。預設為“LUX 10,0,32,18"。

–auth -u string

​ 驗證字串,它會追加到Connect Message的末尾。使用這個選項,實際上將會追加一個布林值TRUE然後才是這個驗證字串。這個選項只有某些特殊的伺服器需要,而且已經被廢棄。現在我們使用**–conn -c**選項來替換它。

–conn -c type:data

​ 追加在Connect Message末尾的任意AMF資料。type的取值為:B表示boolean,N表示number,S表示string,O表示object,Z表示null。對於boolean值來說,data的取值必須為:0,1,FALSE,TRUE。同樣地,對於object,data必須使用0表示一個物件的結束,1表示一個物件的開始。我們可以命名子物件中的資料項,這是通過在type前加上一個’N’,然後在value之前指定名稱來完成的。例如:NB:myFlag:1。這個選項可以多次使用,這樣就可以構造出任意的AMF序列,例如:

−C B:1 −C S:authMe −C O:1 −C NN:code:1.23 −C NS:flag:ok −C O:0

會話引數

​ RTMP傳送Connect Message來連線伺服器,以下選項在連線成功後起作用。

–playpath -y path

​ 指定要請求的RTMP伺服器上媒體流的路徑,這個引數優先順序更高,會覆蓋RTMP URL中的playpath部分。有時候,rtmpdump不能從RTMP URL中自動解析出正確的playpath,這時就需要我們使用這個選項明確指定它。

–playlist -Y

​ 在傳送play命令之前傳送set_playlist命令。播放列表將只包含當前播放路徑。

–live -v

​ 指出當前的媒體流是實時流。在實時流上不能進行resume和seek操作。

–subscribe -d stream

​ 要訂閱的實時流或直播流的名稱。預設為playpath。

–resume -e

​ 恢復一個未完成的RTMP下載。

–skip -k num

​ 當resume流程中查詢最後一個關鍵幀時跳過的關鍵幀的數量。如果常規的resume失敗時,這個設定可能會有用。預設為0。

–start -A num

​ 從流的num秒處開始傳輸。本選項對實時流無效。

–stop -B num

​ 在流的num秒處停止傳輸。

-buffer -b num

​ 設定緩衝時間為num毫秒。預設為36000000。

–timeout -m num

​ 中斷時間,當我們在一段時間內沒有收到伺服器的任何資料,我們就認為與伺服器的連線斷開了,這個選項用於指定中斷的時間。預設為120。

安全引數

​ 這些選型用於處理來自伺服器的額外的驗證請求。

–token -t key

​ SecureToken Response中要使用的key。當伺服器需要一個SecureToken驗證時使用。

-jtv -j JSON

​ 被 legacy Justin.tv 伺服器使用的JSON token。呼叫NetStream.Authenticate.UsherToken。

–swfhash -w hexstring

​ 壓縮後的SWF檔案的SHA256 Hash值。如果伺服器使用SWF驗證,那麼可能需要使用這個選型,另外請檢視下面的**–swfVfy選項。請注意,它的值為16進位制字串值。–swfsize**選項總是和這個選項一起配合使用。

–swfsize -x num

​ 壓縮後的SWF檔案的大小。如果伺服器使用SWF驗證,那麼可能需要使用這個選型,另外請檢視下面的**–swfVfy選項。–swfhash**選項總是和這個選項一起配合使用。

–swfVfy -W url

​ 當前媒體的SWF播放器的URL。這個選項替代了以下三個選項:–swfUrl–swfhash和**–swfsize**。當使用這個選項時,會從指定的URL檢索SWF播放器,並自動計算其hash值和大小。此外,這些資訊會快取在使用者主目錄的.swfinfo檔案中,因此不需要在每次執行rtmpdump時都檢索和重新計算它。swfinfo檔案記錄URL、獲取它的時間、SWF檔案的修改時間戳、它的大小和它的Hash。預設情況下,快取的資訊的有效時間為30天。

–swfAge -X days

​ 指定快取的SWF資訊的有效天數,超過這個天數後,將重新檢查。當指定為0時表示每次都需要檢測SWF URL。注意,如果檢查顯示SWF檔案具有與以前相同的修改時間戳,則不會再次檢索該檔案。

雜項

–flv -o output

​ 指定輸出檔名稱。如果名稱為 - 或者不指定,流會寫到 stdout。

–hashes -#

​ 不使用預設的位元組計數,而是使用#來顯示流的進度,每個#表示1%進度。

–quiet -q

​ 禁止所有的命令輸出,即將Log Level設定為RTMP_LOGCRIT。

–verbose -V

​ 詳細的命令輸出,即將Log Level設定為RTMP_LOGDEBUG。

–debug -z

​ 全部的命令輸出,即將Log Level設定為RTMP_LOGCRIT。此時輸出非常冗長,包括所有Message資料包的16進製表示。

–help -

​ 顯示rtmpdump的使用用例幫助文件。

退出狀態

​ 0:命令列執行成功

​ 1:不可恢復的錯誤

​ 2:未完成傳輸,可在後續恢復下載

環境變數

​ HOME:其中必須要包含 .swfinfo 檔案的路徑,其中包含SWF驗證資訊的快取。