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验证信息的缓存。