EmguCV 和 OpenCV:白名单 RTP 协议
EmguCV & OpenCV: Whitelist RTP protocol
我正在尝试从 Parrot Bebop 2 无人机接收一些视频。
我正在使用 Parrot 提供的 Bebop.sdp 文件。
我之前在 Python 中尝试过,它通过将环境变量 OPENCV_FFMPEG_CAPTURE_OPTIONS
设置为 protocol_whitelist;file,rtp,udp
来工作。
这在 Python 中有效。
从那时起,我们将该项目主要移植到 C#。但是当尝试连接到流时,我们收到此错误 Protocol 'rtp' not on whitelist 'file,crypto'!
。
我见过其他示例,其中 -protocol_whitelist "file,rtp,udp"
通过 ffmpeg 参数传递,但在这种情况下,它似乎不是解决方案,因为我无法传递它。
首先我从一个简单的测试开始:
VideoCapture videoCapture = new VideoCapture(0);
var frame = videoCapture.QueryFrame();
while (frame != null)
{
using (frame)
{
CvInvoke.Imshow("frame", frame);
CvInvoke.WaitKey(1);
}
frame = videoCapture.QueryFrame();
}
此代码从网络摄像头获取流并有效。
当我 运行 使用 SDP 文件时出现错误:
VideoCapture videoCapture = new VideoCapture(@"./bebop.sdp");
var frame = videoCapture.QueryFrame();
while (frame != null)
{
using (frame)
{
CvInvoke.Imshow("frame", frame);
CvInvoke.WaitKey(1);
}
frame = videoCapture.QueryFrame();
}
我已经尝试添加两者:
Environment.SetEnvironmentVariable("OPENCV_FFMPEG_CAPTURE_OPTIONS", "protocol_whitelist;file,rtp,udp");
以及更激进的方法:
Environment.SetEnvironmentVariable("OPENCV_FFMPEG_CAPTURE_OPTIONS", "protocol_whitelist;file,rtp,udp", EnvironmentVariableTarget.User);
None 其中似乎有影响,因为我遇到了同样的错误。
我希望在设置环境变量时,OpenCV 会将所需的协议列入白名单,这样流就会通过,并显示在框架中。
环境变量正常,但是由于需要Visual Studio先重启才能更新环境变量,今天才发现。
我正在尝试从 Parrot Bebop 2 无人机接收一些视频。 我正在使用 Parrot 提供的 Bebop.sdp 文件。
我之前在 Python 中尝试过,它通过将环境变量 OPENCV_FFMPEG_CAPTURE_OPTIONS
设置为 protocol_whitelist;file,rtp,udp
来工作。
这在 Python 中有效。
从那时起,我们将该项目主要移植到 C#。但是当尝试连接到流时,我们收到此错误 Protocol 'rtp' not on whitelist 'file,crypto'!
。
我见过其他示例,其中 -protocol_whitelist "file,rtp,udp"
通过 ffmpeg 参数传递,但在这种情况下,它似乎不是解决方案,因为我无法传递它。
首先我从一个简单的测试开始:
VideoCapture videoCapture = new VideoCapture(0);
var frame = videoCapture.QueryFrame();
while (frame != null)
{
using (frame)
{
CvInvoke.Imshow("frame", frame);
CvInvoke.WaitKey(1);
}
frame = videoCapture.QueryFrame();
}
此代码从网络摄像头获取流并有效。
当我 运行 使用 SDP 文件时出现错误:
VideoCapture videoCapture = new VideoCapture(@"./bebop.sdp");
var frame = videoCapture.QueryFrame();
while (frame != null)
{
using (frame)
{
CvInvoke.Imshow("frame", frame);
CvInvoke.WaitKey(1);
}
frame = videoCapture.QueryFrame();
}
我已经尝试添加两者:
Environment.SetEnvironmentVariable("OPENCV_FFMPEG_CAPTURE_OPTIONS", "protocol_whitelist;file,rtp,udp");
以及更激进的方法:
Environment.SetEnvironmentVariable("OPENCV_FFMPEG_CAPTURE_OPTIONS", "protocol_whitelist;file,rtp,udp", EnvironmentVariableTarget.User);
None 其中似乎有影响,因为我遇到了同样的错误。
我希望在设置环境变量时,OpenCV 会将所需的协议列入白名单,这样流就会通过,并显示在框架中。
环境变量正常,但是由于需要Visual Studio先重启才能更新环境变量,今天才发现。