Я пытаюсь получить видео с дрона Parrot Bebop 2. Я использую этот файл Бибоп.sdp, предоставленный Parrot.
Ранее я пробовал в 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);
Ни один из них, похоже, не влияет, так как я получаю ту же ошибку.
Я ожидаю, что при установке переменных среды OpenCV внесет в белый список необходимые протоколы, чтобы поток проходил и отображался в кадре.





Переменная среды работала, однако из-за необходимости перезагрузки Visual Studio для обновления переменных среды это не было обнаружено до сегодняшнего дня.