【问题标题】:RTMP stream monitoring in pythonpython中的RTMP流监控
【发布时间】:2015-05-21 00:23:50
【问题描述】:

我没有使用 python 的经验,但是我在网上找到了这个:
https://gist.github.com/sinkers/d647a80fdb180b4cc3a6
假设它适用于当前版本的 ffmpeg (ffprobe),我尝试稍微修改一下代码,因此它不会登录到 Amazon SNS 发送消息。只需在流关闭时打开一个音频文件,使用以下命令(我在此站点上找到)就可以了:

os.system("开始 /sound/xyz.mp3")

我试着做这做那,但我似乎无法成功。我安装了 3.x。

我知道这可能很愚蠢,但我需要输入相对文件位置还是绝对文件位置?对于 ffprobe 和声音文件,它是 C:\... 还是正确的格式和路径是什么?

任何解决此问题的帮助将不胜感激。

【问题讨论】:

  • 你的问题不是很清楚。你想ffprobe一个RTMP流、一个文件还是打开一个文件?也许你可以改写一下。
  • 嗨!这是我想监控的直播。如果我理解正确,脚本将在给定的时间间隔检查流是否可用。流采用以下格式:_rtmp://123.123.123.123:1935/live/xyz.stream 和 _http://123.123.123.123:1935/live/xyz.stream/playlist.m3u8 如果流不可用,则音频文件应该开始播放。这就是我想说的。

标签: python-3.x ffmpeg stream rtmp ffprobe


【解决方案1】:

已编辑问题的更新:

如果你在 Windows 上,你可以这样做:

import os
os.startfile('C:/folder/sound.mp3')

如果您不使用 Windows,则使用 take a look at thisthis

原答案

要启动ffprobe,您可以:

retcode = os.system("/usr/local/bin/ffprobe rtmp://...")

retcode = os.system("/usr/local/bin/ffprobe /path/to/file")

但是,使用 os.system() 不会帮助您捕获命令的实际输出,因为它只会获取返回码(例如:如果成功,则为 0)。

这就是示例脚本改用run() 的原因。

如果您想验证 RTMP 流,您还可以查看 rtmpdump

【讨论】:

  • 我已经看过 rtmpdump,但是由于我非常缺乏经验,所以我不能用它做太多事情,我不知道如何写任何东西来提醒我如果流出现故障。这就是为什么我想在我的原始帖子中修改脚本。如果流脱机,我只需要它来播放警报。就算我把“from boto import boto”删掉,在循环的else后面加上打开声音文件的命令,也不管用。
  • 我使用的是 Windows 7 64 位版本。我在一个空白的 .py 文件中运行了该命令,它运行良好。但是,如果我只是将它添加到循环的 else 分支中,就会出现错误。 pastebin.com/eQXe2N12 顺便感谢大家的帮助,感觉离我越来越近了,但是我不能写一个全新的东西,我只知道C++中一些非常非常基础的东西。
  • 该错误与您的代码无关。您可能正在使用 Python 3.x 执行脚本,并且该文件是为 Python 2.x 编写的。有关相关错误,请参阅 this post。或者尝试使用 Python 2.x。
  • 非常感谢您的帮助和耐心等待!如果我只设置 http://....m3u8 流进行监控,它似乎正在做它的工作。如果我将 rtmp 设置为一个,它经常会出现一些标头错误,并触发警报,即使流看起来很好。我测试了禁用wifi连接,所以它显然丢失了流。我会让它继续运行,看看它在真正停电时是否能正常工作。再次感谢!
  • 我明白了。如果文本中有“错误”,希望我通过删除触发警报的代码部分来解决它。如果流丢失了,它会记录一些不同的东西,它仍然会触发警报,所以现在一切都很好,它似乎工作正常,没有错误和误报。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多