Opencv VideoCapture 在 Heroku 上总是返回 false

Posted

技术标签:

【中文标题】Opencv VideoCapture 在 Heroku 上总是返回 false【英文标题】:Opencv VideoCapture always returns false on Heroku 【发布时间】:2018-10-11 09:41:12 【问题描述】:

我正在使用以下代码打开视频流:

import cv2
video = cv2.VideoCapture()
video.open("some_m3u8_link")
success, image = video.read()

但是,即使代码在本地按预期工作,Heroku 上的 success 始终是错误的。

我正在使用带有以下构建包的 cedar-14 堆栈:

heroku/python

https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git

(我为 ffmpeg 尝试了几个 buildpack 选项)

在 heroku 实例上运行 ffmpeg --version 将返回 ffmpeg version 4.0-static https://johnvansickle.com/ffmpeg/

我是否遗漏了任何设置/配置以使其在部署中起作用?谢谢!

稍后编辑:我尝试了几个“some_m3u8_link”链接,包括来自 twitch 和其他流媒体服务(包括流量流媒体 复制示例:

python -c "import cv2; video=cv2.VideoCapture(); video.open('https://hddn01.skylinewebcams.com/live.m3u8?a=5tm6kfqrhqbpblan9j5d4bmua4'); success, image = video.read(); print(success)"

在本地机器上返回 True,在 Heroku 上返回 False。

(链接取自here)

【问题讨论】:

您的 some_m3u8_link 指向哪里?到本地文件还是到网络资源? @Leon 到网络资源 您能否提供该链接,以便您的代码变成Minimal, Complete, and Verifiable example? 请提供链接以及最小的可部署仓库 使用十六进制编辑器检查文件似乎没有链接......你能确认这个文件像你说的那样工作吗? 【参考方案1】:

你可以试试这个:

import cv2
video = cv2.VideoCapture("some_m3u8_link")
success, image = video.read()

【讨论】:

【参考方案2】: 您可以将 pafy 模块与 cv2 一起使用

-如果它不能与 cv2 一起使用,请尝试 opencv3

    import cv2, pafy
    url = "Some url to stream"
    video = pafy.new(url)
    best = video.getbest(preftype="webm")
    video=cv2.VideoCapture(best.url)
pafyPYPI

【讨论】:

正如我从 pafy 项目描述中看到的那样,它似乎被设计为仅在 youtube 上工作(“检索 YouTube 内容和元数据”)

以上是关于Opencv VideoCapture 在 Heroku 上总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 2.4 VideoCapture 在 Windows 上不起作用

OpenCV 2.4 VideoCapture 在 Windows 上不起作用

opencv视频操作基础---VideoCapture类

从 OpenCV 3 中的 VideoCapture 获取垫子

无法使用 VideoCapture 在 OpenCV+Python 中读取或播放视频

OpenCV3 VideoCapture buffer