Отправка opencv фрейма через gstreamer

Всех приветствую. Нужно отправить фрейм из видео в gstream. Пытался так:

class VideoReader:
    def __init__(self, src):
        self._src = src
        self._capture = cv2.VideoCapture(src, cv2.CAP_GSTREAMER)

    def get_next_frame(self):
        if self._capture.get(cv2.CAP_PROP_POS_FRAMES) == self._capture.get(cv2.CAP_PROP_FRAME_COUNT):
            self._capture = cv2.VideoCapture(self._src)
        res, frame = self._capture.read()
        return frame

    def change_video(self, src):
        try:
            self._capture = cv2.VideoCapture(src)
            return True
        except Exception as e:
            print e
        return False

class VideoStream:
    def __init__(self, port):

        self._writer = cv2.VideoWriter('appsrc name=source is-live=true block=true format=GST_FORMAT_TIME " \
            " caps=video/x-raw,format=BGR,width=640,height=480,framerate=30.0 " \
            "! videoconvert ! video/x-raw,format=I420 " \
            "!  jpegenc " \
            "! rtpjpegpay " \
            "! udpsink host=127.0.0.1 port=1234',
                            cv2.CAP_GSTREAMER, 0, 30, (640,480), True)


    def write_frame(self, frame):
        try:
            frame = cv2.resize(frame, (640, 480))
            self._writer.write(frame)
            return True
        except Exception as e:
            print e
        return False

reader = VideoReader("C:/Users/AndroidPC/Desktop/test2.mp4")
streamer = VideoStream(5000)


def videoStream():
    while 1:
        frame = reader.get_next_frame()
        streamer.write_frame(frame)


Thread(target=videoStream).start()

server = GstRtspServer.RTSPServer.new()
server.props.service = "8554"
server.attach(None)

factory = GstRtspServer.RTSPMediaFactory.new()
factory.set_launch("udpsrc port=1234 \
! application/x-rtp, encoding-name=JPEG,payload=26 \
! rtpjpegdepay \
! jpegdec \
! autovideosink")

factory.set_shared(True)
server.get_mount_points().add_factory("/ds-test", factory)

Но при подключении к стриму через VLC:

vlc.exe -v rtsp://127.0.0.1:8554/ds-test

VLC повисает на моменте загрузки изображения и ничего дальше не происходит. Такое ощущение, что ошибка именно с кодированием / декодированием.


Ответы (0 шт):