Opencv VideoCapture 在 Heroku 上始终返回 false

11

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

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

然而,即使代码在本地的工作情况良好,在Heroku上success始终为false。

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

heroku/python

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

(我尝试了几个用于ffmpeg的构建包选项)

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

是否有任何设置/配置我错过了,以便在部署时使其正常工作?谢谢!

后来编辑:我尝试了几个“some_m3u8_link”链接,包括来自twitch和其他流媒体服务的链接(包括交通流媒体li 一个复现的示例:

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。

(链接来自这里


1
你的 some_m3u8_link 指向哪里?是本地文件还是网络资源? - Leon
1
你能提供那个链接吗,这样你的代码就可以变成一个最小、完整和可验证的示例了吗? - Leon
1
请提供链接以及最小可部署的代码库。 - Tarun Lalwani
你能在Heroku上执行这些测试吗?看看结果如何。 - zindarod
1
使用十六进制编辑器检查文件,似乎里面没有链接...你能确认这个文件按照你所说的那样工作吗? - jmkmay
显示剩余4条评论
3个回答

0
你可以尝试这个:
import cv2
video = cv2.VideoCapture("some_m3u8_link")
success, image = video.read()

0
  • 您可以使用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)

从pafy项目描述中可以看出,它似乎只设计用于在YouTube上工作(“检索YouTube内容和元数据”)。 - Dacian Mujdar

0

指定打开模式可能会起作用。

video.open("some_m3u8_link", "r")

如果那样不起作用,则指定文件扩展名可能会有所帮助。 您可能还需要将变量设置为函数。
例如:
""" replace .mp4 with the applicable file type, 
I don't know if you need to specify file mode"""
import cv2
video = cv2.VideoCapture()
video = video.open("some_m3u8_link.mp4") 
success, image = video.read()

如果这个不起作用,那我就没有更多的想法了。

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