Распознавание изображений OpenCV-Python в прямой трансляции Twitch, воспроизводимой через VLC в Windows и MacOS
Мне нужно запустить функции распознавания изображений OpenCV-Python в прямых трансляциях Twitch без записи байтов на диск. У меня есть сценарий Python, который использует Streamlink API для извлечения потоков, но он работает значительно хуже, чем консольные команды Streamlink и проигрыватель VLC. Я часто заикаюсь и пропускаю кадры. В MacOS по какой-то причине поток воспроизводится в замедленном темпе с большим количеством пропущенных кадров или «пропусков».
Увидев, что команды консоли streamlink и VLC работают очень хорошо, мне интересно, есть ли кроссплатформенный способ использования OpenCV в потоке Twitch, извлеченном с помощью консольных команд Streamlink и переданном по конвейеру в VLC. Можно ли анализировать видеоданные VLC с помощью OpenCV без фактического отображения окна проигрывателя?
В документации по streamlink я вижу, что есть
--player-external-http
Параметр командной строки, который читает поток через HTTP вместо канала stdin и без отображения какого-либо плеера. Мне интересно, можно ли это использовать в скрипте Python для чтения данных потока без отображения плеера? Ссылка для этого: https://streamlink.github.io/cli.html#cmdoption-player-external-http
Мой плохо работающий код:
from streamlink import Streamlink
from cv2 import cv2
def stream_to_url(url, quality='best'):
session = Streamlink()
streams = session.streams(url)
if streams:
return streams[quality].to_url()
else:
raise ValueError('Could not locate your stream.')
def main(url, quality='best', fps=30.0):
stream_url = stream_to_url(url, quality)
cap = cv2.VideoCapture(stream_url)
frame_time = int((1.0 / fps) * 1000.0)
while True:
try:
ret, frame = cap.read()
cv2.imshow('frame', frame)
except:
raise ValueError('Failed')
if (0xFF & cv2.waitKey(5) == 27):
cv2.destroyAllWindows()
break
main('https://www.twitch.tv/username_goes_here')