Отправка 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 повисает на моменте загрузки изображения и ничего дальше не происходит. Такое ощущение, что ошибка именно с кодированием / декодированием.