Отправитель
Я получаю видео с камеры Intel RealSense и использую OpenCV для редактирования кадров. Отображение его с помощью imshow дает мне желаемый результат. Вместо того чтобы использовать imshow, я хочу записать его в приемник UDP Gstreamer. Это основано на примере кода librealsense: click me
Я только добавил VideoWriter вверху:
VideoWriter out("appsrc ! videoconvert ! x264enc tune=zerolatency ! rtph264pay pt=96 ! udpsink host=127.0.0.1 port=8553", CAP_GSTREAMER, 0, 30, Size(640, 480), true);
и ниже, как я пишу полученный Mat3bдля этого VideoWriter:
out.write(foreground);
Receiver
Я написал другую программу, которая использует gst-rtsp-server для чтения данных из источника UDP и обеспечения их доступности. как поток RTSP. Я проверил, что это работает нормально, используя командную строку:
gst-launch-1.0 -v videotestsrc ! video/x-raw,width=800,height=600,codec=h264,type=video ! videoscale ! videoconvert ! x264enc tune=zerolatency ! rtph264pay ! udpsink host=127.0.0.1 port=8553
Сервер RTSP использует следующий конвейер:
udpsrc port=8553 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96
Помимо конвейера, сервер RTSP по сути является также примером кода, поэтому он должен работать.
Опять же, сервер RTSP работает нормально, используя videotestsrc из командной строки, но когда я пытаюсь использовать его с OpenCV appsrc, как написано выше, я получаю следующее сообщение об ошибке на сервере RTSPconsole: Войдите сюда и VLC не может открыть поток.
Полный код здесь: click me
I 'Буду признателен за любую помощь, я пытался выяснить это в течение нескольких недель, но я действительно не знаю, почему он не работает, когда он работает почти с тем же конвейером из командной строки.