Распознавание изображений 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')

0 ответов

Другие вопросы по тегам