我正在寻找一种方法来监视流上的活动,以便我可以确定流中是否有任何内容.如果有,我将开始使用rtmpdump录制它.
我想这是通过运行一个每60秒检查一次流的cron任务来完成的.如果它确定流正在通过,则调用rtmpdump开始记录它.如果没有,那么什么都不做,并在60秒内再次检查.
由于rtmpdump只是在没有流数据时出错,所以尝试使用它监视流似乎不是一个好主意,但也许我错了.
如果我手动逐个进行此操作会很容易,但我正在尝试自动记录流的任务,如果它们可用的话.
有没有人遇到过这样做的方法?也许我可以在命令行(linux)中使用其他一些工具?如果它有帮助,我正在使用Ruby / Rails编写代码
解决方法
您可以使用以下命令将流的信息发送到stdout:
rtmpdump -v -m6 -B6 -r "rtmp://#{URL}" -o /tmp/test.flv &> /tmp/rtmpdump.info; cat /tmp/rtmpdump.info
这将尝试记录仅6秒的视频并显示结果.如果流正在运行,它将输出如下内容:
INFO: Connected... Starting Live Stream For duration: 6.000 sec INFO: Metadata: INFO: trackinfo: INFO: timescale 50000.00 INFO: length 19686000.00 INFO: language eng INFO: sampledescription: INFO: sampletype avc1 INFO: timescale 48000.00 INFO: length 18900992.00 INFO: language eng INFO: sampledescription: INFO: sampletype mp4a INFO: audiochannels 2.00 INFO: audiosamplerate 48000.00 INFO: videoframerate 25.00 INFO: aacaot 2.00 INFO: avclevel 31.00 INFO: avcprofile 77.00 INFO: audiocodecid mp4a INFO: videocodecid avc1 INFO: width 1047.00 INFO: height 576.00 INFO: frameWidth 720.00 INFO: frameHeight 576.00 INFO: displayWidth 1047.00 INFO: displayHeight 576.00 INFO: framerate 25.00 INFO: moovposition 32.00 INFO: duration 393.77 2033.613 kB / 6.02 sec (1.5%) Download may be incomplete (downloaded about 1.50%),try resuming
RTMPDump v2.4 (c) 2010 Andrej Stepanchuk,Howard Chu,The Flvstreamer Team; license: GPL Connecting ... INFO: Connected... ERROR: Closing connection: NetStream.Play.Failed
这是一个从VLCStreamTester获取的公共rtmp流的工作示例:
require 'open3' rtmp_url = "stream.streetclip.tv:1935/live/high-stream" command = "rtmpdump -v -m6 -B6 -r \"rtmp://#{rtmp_url}\" -o /tmp/test.flv &> /tmp/rtmpdump.info; cat /tmp/rtmpdump.info" Open3.popen3(command) do |i,o,e,t| puts o.read end
从这里使用ruby,您可以轻松检查一个流是否处于活动状态(读取关键字的输出),然后决定是否使用通常的rtmpdump命令进行记录.在此之后,您可以构建更多逻辑并循环遍历URL数组而不是单个URL,从而获得所需的自动化.