Воспроизведение видеопотока RTP с помощью Qt?
Я хочу создать виджет Qt, который может воспроизводить входящие потоки RTP, где видео кодируется как H264 и не содержит звука.
мой основной план реализации таков:
- создать фононов MediaSource "объект" (тип потока).
- соедините его с QIODevice подкласс, который предоставляет данные
- получить видеоданные, используя либо:
мое окружение:
- Ubuntu 9.10
- Qt 4.6
мои вопросы:
- мой подход хороший? Возможно, я упускаю из виду нечто более очевидное или простое. решение?
- в настоящее время я испытываю эту проблему: при попытке воспроизвести видеопоток состояние MediaObject превращается в ErrorState с errorType FatalError. Кто-нибудь может сказать мне, что я делаю не так?
редактировать
Одно из решений, которое я нашел, - это использование libVLC в сочетании с Qt, о котором я узнал в этом нить. Вот пример кода для заинтересованных.
Я все еще ищу Phonon-based решение.
в идеале мне нужно будет только предоставить файл SDP, и работа будет выполнена.
2 ответов
Я смог заставить его работать с помощью решения libVLC. Я не могу гарантировать, что это лучшие решение, хотя, как я просто перестал смотреть после этого.
здесь ссылка на образец libVLC.
Как я понимаю, Phonon работает, по крайней мере, в Windows, что QT предоставляет плагин Phonon для DirectShow (\plugins\phonon_backend\phonon_ds94.dll) и GStreamer в вашем случае. Затем вы либо получите, либо напишите свой собственный фильтр DirectShow, который может принимать потоки RTP в качестве источника. DirectShow позаботится о декодировании, а Phonon позаботится о рендеринге.
поэтому, если бэкэнд работает, код приложения так же прост, как:
Phonon::MediaObject *media = new Phonon::MediaObject();
Phonon::VideoWidget *video = new Phonon::VideoWidget();
Phonon::createPath(media, video);
media->setCurrentSource(source);
media->play();
Кажется проблема заключается в том, что бэкэнд GStreamer принимает RTP в качестве источника. Можете ли вы воспроизвести этот источник в автономном GStreamer без каких-либо проблем?