Вопрос

Я хочу создать виджет Qt, который может воспроизводить входящие потоки RTP, где видео кодируется как H264 и не содержит звука.

Мой основной план реализации таков:

  • Создайте Фонон Медиаисточник объект (тип потока).
  • Соедините его с QIODevice ( Кодовое устройство) подкласс, предоставляющий данные
  • Получите видеоданные, используя либо:
    • В JRTPLIB клиентская библиотека
    • В Gпоток gstrtpbin плагин.Этот плагин заботится о разгрузке пакетов и декодировании видео.Возможно, это повышает шансы на то, что Phonon распознает данные.

Мое окружение:

  • Ubuntu 9.10
  • Qt 4.6

Мои вопросы:

  • Хорош ли мой подход?Возможно, я упускаю из виду более очевидное или простое решение?
  • В настоящее время я сталкиваюсь с этой проблемой:при попытке воспроизвести видеопоток состояние MediaObject превращается в ErrorState с типом ошибки FatalError.Кто-нибудь может сказать мне, что я делаю не так?

Редактировать
Одно из решений, которое я нашел, - это использование libVLC в сочетании с Qt, о котором я узнал в этом Нитки.Вот такой пример кода для заинтересованных.Я все еще ищу решение на основе Phonon.
В идеале мне нужно было бы только предоставить SDP-файл, и работа была бы выполнена.

Это было полезно?

Решение

Я смог заставить его работать, используя решение 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 без каких-либо проблем?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top