如何使用 OpenCV 接收 upd 流?

问题描述

我需要将来自 Jetson Nano 的流接收到我的 PC(Windows 10)上的 OpenCV 程序。

好的,我使用以下方法从我的设备 (Jetson Nano) 流式传输相机:

public static ExternalIncome create(Map<String,String> fields) {
        ExternalIncome externalIncome = new ExternalIncome();
        fields.forEach((k,v) -> {
            switch (k) {
                case "OPER_ID":
                    externalIncome.setoperationId(nullableLong(v));
                    break;
                case "OPER_DATE":
                    externalIncome.setoperationDate(Utils.toOffsetDateTime(v));
                    break;
               etc

我使用 Gstreamer(按照 that )安装了 OpenCV 并尝试了该命令

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,fps,cv::Size (width,height));

它正在工作,不幸的是,无论我设置什么延迟,我仍然有相当大的延迟。 当我尝试使用 OpenCV 时

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

我明白

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

而 .isOpened() 给我错误。 我不知道为什么我安装错了?

我按照指示将所有内容添加到我的 PATH 中

image

我也尝试过使用 FFmpeg:

[ 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

我明白了:

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

我没有 setenv(),所以我尝试了 this,但似乎有问题,知道吗?

外壳等效

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

工作成功(有延迟但成功)。

我愿意改变任何东西来让它发挥作用!如果可以使用 FFmpeg/GStreamer/vlclib,我也可以更改 Jetson 端,感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...