запуск команды конвейера gstreamer из API OpenCV VideoWriter для потоковой передачи непрерывного изображения в hlssink - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь транслировать непрерывное изображение с устройства видеокарты с помощью API opencv videowriter, ниже приведен фрагмент кода opencv, который выполняет действие, моя проблема в том, что я получаю кадр, но не получаю файл index.m3u8, созданный внутри / var / www folder Я новичок в opencv, и gstreamer не смог понять, возможно ли добиться этого от opencv, или мне нужно использовать какой-то другой механизм

Входное видеоустройство - это видеокарта который поддерживает только код MJEPG c

import cv2

cap = cv2.VideoCapture('/dev/video0')
framerate = 30.0

out = cv2.VideoWriter('appsrc ! image/jpeg ! '
                      'jpegdec ! x264enc tune=zerolatency ! '
                      'mpegtsmux ! hlssink location=/var/www/segment-%05d.ts '
                      'playlist-location=/var/www/index.m3u8 max-files=20 target-duration=15',
                      0, framerate, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        out.write(frame)
    else:
        break

# Release everything if job is finished
cap.release()
out.release()

1 Ответ

0 голосов
/ 27 апреля 2020

OpenCv VideoWriter поддерживает только кадры BGR в интерфейсе GStreamer. Вероятно, VideoCapture также преобразует изображение в BGR.

Так что вам не нужно декодировать jpeg в вашем конвейере gstreamer. Однако x264enc не всегда принимает BGR в качестве входных данных, поэтому вы должны добавить videoconvert между appsrc и x264enc`

t = cv2.VideoWriter('appsrc ! videoconvert ! x264enc tune=zerolatency ! '
                      'mpegtsmux ! hlssink location=/var/www/segment-%05d.ts '
                      'playlist-location=/var/www/index.m3u8 max-files=20 target-duration=15',
                      0, framerate, (640, 480))
...