ruby-on-rails – 监视RTMP流,记录是否可用

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 监视RTMP流,记录是否可用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种方法来监视流上的活动,以便我可以确定流中是否有任何内容.如果有,我将开始使用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,从而获得所需的自动化.

原文链接:https://www.f2er.com/ruby/269872.html

猜你在找的Ruby相关文章