Я играл в библиотеке QMediaplayer. Мне было любопытно, как это будет работать с некоторыми источниками потокового видео, поэтому я использовал VLC для потоковой передачи некоторых видео с использованием протокола udp.
Чтобы сделать быстрый тест, я использовал пример Qt с именем Пример MediaPlayer. Поскольку пример предназначен для работы только с автономными файлами, я добавил немую функцию в реализацию Player.
void setM(QUrl url){player->setMedia(url);player->play();}
Затем на main.cpp Файл, который я называю этой функцией, выглядит так:
...
player.setM(QUrl("udp://239.1.1.1:1234"));
return app.exec();
Для этого нужно начать воспроизведение источника потока после прочтения программы.
Проблема здесь в том, что Qt через меня выдает следующую ошибку:
DirectShowPlayerService::doSetUrlSource: Unresolved error code 800c000d
Чтобы сделать это с локальными файлами и http потоковая передача и это работает … но когда я пытался с UDP или RTP, я всегда получаю ту же ошибку.
Я потратил несколько часов на поиск дополнительной информации, но всегда получал один и тот же ответ … используйте QMLVLC … Например, смотри это.
Кто-нибудь пробовал это раньше? Что здесь не так?
PD: Я знаю, что для этой работы есть VLC-подключение, но я бы хотел, чтобы это работало только с Qt (или, по крайней мере, понимаю, что здесь происходит).
PD2: Я на Windows 8.1, Qt 5.5 (mingw 4.9.2) и у меня установлены все важные кодеки.
Заранее спасибо,
ОБНОВИТЬ
Наконец-то мне удается разобраться с новым http://code.qt.io и вот код, который я подозреваю, блокирует протоколы udp (и другие )-> Вот.
Возможно, только «http» и «https» принимаются в качестве допустимых потоковых источников на Directshowsservice … Я постараюсь выделить дополнительное время на этой неделе, чтобы перекомпилировать только мультимедийный модуль для Windows, чтобы добавить протокол udp в функцию doSetUrlSource и посмотрим, что получится. Если кто-то проверит это первым, пожалуйста, дайте мне знать здесь!
ОБНОВЛЕНИЕ 2
Прежде всего, я подозреваю, что QMediaPlayer не смог воспроизвести содержимое UDP / RTP, потому что метод AddFilter … В любом случае, http, https и rtsp работает отлично.
Во-вторых, я обнаружил странное поведение по протоколу udp.
Я использую «udp: //@239.1.1.1: 1234» в качестве тестового направления многоадресной рассылки. Странно то, что во время одного теста я ошибочно указал это направление «udp: //@239.1.1.1: 1234z», и на этот раз ошибки не было. Кажется, что направление должно содержать письмо.
Задача ещё не решена.