Как получить upd поток с OpenCV?

Мне нужно получить поток от Jetson Nano в мою программу OpenCV на моем ПК (Windows 10).

Хорошо, я транслирую камеру со своего устройства (Jetson Nano), используя:

cv::VideoWriter gst_udpsink("appsrc ! video/x-raw, format=BGR ! queue ! videoconvert ! video/x-raw, format=BGRx ! nvvidconv ! nvv4l2h264enc insert-vui=1 ! video/x-h264, stream-format=byte-stream ! h264parse ! rtph264pay pt=96 config-interval=1 ! udpsink host=224.1.1.1 port=5000 auto-multicast=true", cv::CAP_GSTREAMER, 0, fps, cv::Size (width, height));

Я установил OpenCV с помощью Gstreamer (следуя это ) и попробовал эту команду

c:\gstreamer\1.0\msvc_x86_64\bin\gst-launch-1.0.exe  udpsrc uri=udp://224.1.1.1:5000 auto-multicast=true ! application/x-rtp, media=video, encoding-name=H264 ! rtpjitterbuffer latency=300 ! rtph264depay ! decodebin ! d3dvideosink

он работает, к сожалению, независимо от того, какую задержку я устанавливал, у меня все равно было довольно большое отставание. Когда я пытаюсь использовать OpenCV

cv::VideoCapture cap("udpsrc uri=udp://224.1.1.1:5000 auto-multicast=true ! application/x-rtp, media=video, encoding-name=H264 ! rtpjitterbuffer latency=300 ! rtph264depay ! decodebin ! videoconvert ! video/x-raw, format=BGR ! appsink", cv::CAP_GSTREAMER);

я получил

[ WARN:0] global F:\Code\opencv_4.5.1\opencv-4.5.1\modules\videoio\src\cap_gstreamer.cpp (734) cv::GStreamerCapture::open OpenCV | GStreamer warning: Error opening bin: no element "udpsrc"
[ WARN:0] global F:\Code\opencv_4.5.1\opencv-4.5.1\modules\videoio\src\cap_gstreamer.cpp (501) cv::GStreamerCapture::isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created

И .isOpened() дает мне ложь. Я не знаю, почему я установил что-то не так?

Я добавил все в свой PATH в соответствии с инструкциями

изображение

Я также пытался использовать FFmpeg:

setenv ("OPENCV_FFMPEG_CAPTURE_OPTIONS", "protocol_whitelist;file,rtp,udp", 1);
cap = cv::VideoCapture("test.sdp", cv::CAP_FFMPEG);

Я получил:

[rtp @ 0000014dc1f83bc0] Protocol 'rtp' not on whitelist 'file,crypto,data'!

У меня нет setenv(), поэтому я попробовал это, и кажется, что проблема, есть идеи?

Эквивалент оболочки

ffplay myFile.sdp -protocol_whitelist file,udp,rtp -fflags nobuffer

Работает успешно (с задержкой, но успешно).

Я готов изменить что угодно, чтобы это работало! Если это возможно с помощью FFmpeg/GStreamer/vlclib, я также могу изменить сторону Jetson, спасибо за любую помощь!


person Legion    schedule 17.02.2021    source источник