Comment ouvrir un pipeline GStreamer de OpenCV avec VideoWriter

Je suis la capture d'images vidéo avec OpenCV VideoCapture. La capture fonctionne très bien que je suis capable d'utiliser les images comme ceci:

cv::VideoCapture cap("v4l2src device=/dev/video1 ! videoscale ! videorate ! video/x-raw, width=640, height=360, framerate=30/1 ! videoconvert ! appsink");
cv::imshow("feed", frame);

Je voudrais aussi envoyer le flux sur le réseau et c'est là que je suis bloqué. De toute façon je suis d'échec dans le appsrc pipeline de la partie. Je veux encoder le flux de jpeg et de l'envoyer vie udp. C'est ce que j'ai:

cv::VideoWriter writer
writer.open("appsrc ! videoconvert ! jpegenc ! jpegparse ! rtpjpegpay pt=96 ! udpsink host=192.168.1.25 port=5000", 0, (double)30, cv::Size(640, 360), true);

Ressemble à la ligne ci-dessus ne fait rien. Le writer << framene pas faire n'importe quoi. Aussi cette gstreamer commande n'affiche rien:

gst-launch-1.0 udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, payload=(int)96" ! rtpjpegdepay ! jpegdec ! decodebin ! videoconvert ! autovideosink

Je ne sais pas où je suis, à défaut, dans le writer.open partie. Si je lance le gstreamer des commandes comme ce soufflet de travailler:

gst-launch-1.0 v4l2src device=/dev/video1 ! videoscale ! videorate ! video/x-raw, width=640, height=360, framerate=30/1 ! jpegenc ! jpegparse ! rtpjpegpay pt=96 ! udpsink host=192.168.1.25 port=5000
gst-launch-1.0 udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, payload=(int)96" ! rtpjpegdepay ! jpegdec ! decodebin ! videoconvert ! autovideosink

OriginalL'auteur Pavel | 2017-09-14