@zindarod Спасибо за широкое объяснение, похоже, это поможет!

маю видеокадры с помощью OpenCV VideoCapture. Захват работает отлично, так как я могу использовать такие кадры:

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);

Я также хотел бы отправить поток по сети, и вот где я застрял. Каким-то образом я терплю неудачу в части конвейера appsrc. Я хочу, чтобы закодировать поток в JPEG и отправить его через UDP. Вот что я получил:

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);

Похоже, вышеприведенная строка ничего не делает.writer << frameничего не делает Также эта команда gstreamer не отображает ничего:

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

Я не знаю, где я терплю неудачу вwriter.open часть. Если я запускаю команды gstreamer, как показано ниже, они работают:

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

Ответы на вопрос(1)

Ваш ответ на вопрос