zax2002
@zax2002

Как заставить OpenCV работать с Twitch'ом?

Ссылка получается нормальная, воспроизводится через VLC, но OpenCV возвращает False при чтении фрейма. Также, всё работало с каким-то m3u8 tv стримом.
streams = streamlink.streams("twitch.tv/streamer_id")
url = streams["best"].url
cap = cv2.VideoCapture(url)

while True:
	succ, frame = cap.read()
	if not succ:
		break
	pil_img = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 2
@rPman
по адресу twitch.tv/streamer_id нет видеоконтента, там html, но vlc умный, у него с помощью плагинов и сложной логики есть парсер, вытаскивающий видео из кучи типовых видео и стриминговых сервисов, а вот у opencl такой логики нет

p.s. твитч хорошо прячет ссылку в html но кажется есть api читайте их доки как вытаскивать ссылку на поток
Ответ написан
@dodo101000101
Нужно использовать библиотеку av:
def get_image_from_stream(stream_url: str) -> np.ndarray:
    '''
    Get last frame from stream using av modul.
    '''
    container = None
    try:
        container = av.open(stream_url) # sadad
    except Exception:
        # quit
        raise Exception("ERROR! Stream not working!")
    
    video_stream = next(s for s in container.streams if s.type == 'video')
    
    image_pil = None
    for packet in container.demux(video_stream):
        for frame in packet.decode():
            image_pil = frame.to_image()
            
            if image_pil:
                break
        if image_pil:
            break
    image = np.asarray(image_pil)
    return image

stream_url у вас уже есть. А функцию просто запускайте в бесконечном цикле.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы