Я использую следующий код для открытия видеопотока:
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)
Запуск ffmpeg --version
на экземпляре heroku вернет 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 на локальной машине и False на Heroku.
(ссылка взята из здесь)
@Leon на веб-ресурс
Можете ли вы предоставить эту ссылку, чтобы ваш код превратился в Минимальный, полный и проверяемый пример?
Пожалуйста, предоставьте ссылку, а также минимальное развертываемое репо
Я пробовал с несколькими ссылками, и результат тот же.
Можете ли вы выполнить эти тесты на Heroku? Посмотрите, каковы результаты.
Проверка файла с помощью шестнадцатеричного редактора кажется, что там нет ссылки ... можете ли вы подтвердить, что этот файл работает так, как вы говорите?
@zindarod Спасибо, opencv был построен с поддержкой FFMPEG
@JonathanMay Вы правы, ссылки, которые я предоставил, не подходили для этого варианта использования (чтение, похоже, работает, если ссылка указывает на статический ресурс, я думаю). Я обновился, добавив новую ссылку (потоковое видео с камеры трафика, которое ведет себя должным образом)
Вы можете попробовать это:
import cv2
video = cv2.VideoCapture("some_m3u8_link")
success, image = video.read()
-попробуйте opencv3, если он не работает с cv2
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»).
На что указывает ваш
some_m3u8_link
? В локальный файл или на веб-ресурс?