如何检查 RTMP 直播流的开启或关闭状态

10

我想检查麦克风的RTMP直播流是否开启或关闭。

我已经使用了RTMP DUMP。

exec("/usr/bin/rtmpdump -V -v -r rtmp://www.exapmle.com/etc./13/mic1 -o /tmp/rtmp-checker.log 2>&1", $pp);

我从http://blog.svnlabs.com/how-to-check-rtmp-source-stream-is-live-or-not/上找到了这个技巧。
但是,我对结果不太满意,因为它并不总是有效,并生成一个随机字符串作为结果。
![所以有时我会遇到这种错误。有没有完美的解决方案?][1] [1]: http://i.stack.imgur.com/ZrTco.png
我正在寻找使用FFmpeg或其他方法的解决方案。

谢谢,这正是我所需要的。 :) - Hayden Thring
1个回答

22

您可以使用 ffprobe

ffprobe -v quiet -print_format json -show_streams rtmp://example.com/stream

如果命令执行失败,则会返回代码1,如果成功则会返回0和包含检测到的流的JSON字符串:

你将获得一个返回代码1如果命令失败或0并且一个包含检测到的流的JSON字符串,如果命令成功:

{
    "index": 1,
    "codec_name": "aac",
    "codec_long_name": "AAC (Advanced Audio Coding)",
    "profile": "LC",
    "codec_type": "audio",
    ...
}

这只是一个基础测试,如果你想进一步了解,你可以下载几秒钟的流媒体,使用 ffprobe 进行验证,在其上运行 silencedetect 等操作。


我按照你提供的rtmp获取了响应,其中包含音乐,但它一直在处理中,当我的麦克风关闭时没有得到任何响应。如果我打开麦克风,就会像你一样得到响应。请问能否解释原因并提供解决方案?谢谢。 - ITit superpower
你可以尝试减小 -probesize(以字节为单位,默认为 5 mb)。如果它仍然一直卡住,那么另一种方法是使用 Linux 中的 timeout 命令:timeout 10s ffprobe ...。如果命令超时,它将返回 124,此时你应该发出警报并检查流。 - aergistal
1
需要包括“-print_format json”和“-show_streams”选项吗?经过测试,我认为,即使您只依赖于退出代码而省略两个选项,该方法也有效。 - Gergely Lukacsy
@GergelyLukacsy 如果您不需要流信息,则无需进行检查。问题是关于麦克风流的,因此需要检查音频流。 - aergistal
@aergistal 谢谢你的澄清。 是的,我知道原帖作者的确切问题。 - Gergely Lukacsy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接