Мне нужно получить поток от 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, спасибо за любую помощь!