Как реализовать видео виджет в QT, который полагается на GStreamer?

Как перечислить [только 111] подкаталоги в текущем?

ls -d */

Это - простой прием, но Вы не знали бы, сколько времени я должен был найти что один!

10
задан Community 22 April 2019 в 08:01
поделиться

3 ответа

Чтобы подключить Gstreamer к вашему QWidget, вам нужно получить дескриптор окна с помощью QWidget :: winId () , и вы передаете его в gst_x_overlay_set_xwindow_id ();

Примерный пример кода :

    sink = gst_element_factory_make("xvimagesink", "sink");
    gst_element_set_state(sink, GST_STATE_READY);

    QApplication::syncX();
    gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(sink), widget->winId());

Кроме того, вы захотите, чтобы ваш виджет поддерживался собственным окном, что достигается установкой Атрибут Qt :: AA_NativeWindows на уровне приложения или атрибут Qt :: WA_NativeWindow на уровне виджета.

7
ответ дан 3 December 2019 в 21:21
поделиться

Версия VLC - это видеопроигрыватель на основе QT (начиная с версии 0.99). Это также позволяет передавать или читать поток: Вы можете найти всю необходимую информацию здесь: http://wiki.videolan.org/Developers_Corner . Вам нужно только создать экземпляр плеера и связать его с виджетом. Тогда у вас будет полный контроль над плеером.

Я уже тестировал его (в Linux и Windows), воспроизводя локальные музыкальные и видео файлы, и он работает нормально.

Попробуйте и убедитесь сами.

Надеюсь. это помогает.

Изменить: Похоже, что если вы хотите использовать VLC, вам нужно написать или найти (я не знаю, существует ли он) кодек GStreamer, как описано в вики-странице videolan . Думаю, я бы так и поступил.

3
ответ дан 3 December 2019 в 21:21
поделиться

Поскольку Phonon основан на gstreamer, подробности можно найти в дереве исходных текстов Phonon (доступно здесь: http://gitorious.org/phonon/import/trees/master ). Для видеопроигрывателя вам, скорее всего, понадобится виджет отображения видео, например gstreamer / videowidget.h ( cpp ), который, в свою очередь, использовал средство визуализации X11 ( gstreamer / x11renderer.h , cpp ). Используется приемник xvimagesink , возврат к ximagesink , если первый не может быть создан.

Основная уловка заключается в наложении VideoWidget на вывод видео. Дескриптор X11, необходимый для этого, извлекается с помощью метода QWidget :: winId , который зависит от платформы (как и приемники, так что ничего страшного).

Кроме того, если оверлей недоступен, Используется QWidgetVideoSink , который преобразует видеокадры в отдельные кадры для класса WidgetRenderer . Этот класс, в свою очередь, делает текущий кадр доступным как объект QImage, готовый для любого типа обработки.

Итак, чтобы ответить на ваш вопрос - используйте либо наложения (как X11Renderer), либо извлеките отдельные QImages из видеопотока. (как QWidgetVideoSink) .

Основная уловка - наложить VideoWidget на вывод видео. Дескриптор X11, необходимый для этого, извлекается с помощью метода QWidget :: winId , который зависит от платформы (как и приемники, так что ничего страшного).

Кроме того, если оверлей недоступен, Используется QWidgetVideoSink , который преобразует видеокадры в отдельные кадры для класса WidgetRenderer . Этот класс, в свою очередь, делает текущий кадр доступным как объект QImage, готовый для любого типа обработки.

Итак, чтобы ответить на ваш вопрос - используйте либо наложения (как X11Renderer), либо извлеките отдельные QImages из видеопотока. (как QWidgetVideoSink) .

Основная уловка - наложить VideoWidget на вывод видео. Дескриптор X11, необходимый для этого, извлекается с помощью метода QWidget :: winId , который зависит от платформы (как и приемники, так что ничего страшного).

Кроме того, если оверлей недоступен, Используется QWidgetVideoSink , который преобразует видеокадры в отдельные кадры для класса WidgetRenderer . Этот класс, в свою очередь, делает текущий кадр доступным как объект QImage, готовый для любого типа обработки.

Итак, чтобы ответить на ваш вопрос - используйте либо наложения (как X11Renderer), либо извлеките отдельные QImages из видеопотока. (как QWidgetVideoSink) .

который зависит от платформы (как и приемники, так что не беда).

Кроме того, если оверлей недоступен, используется QWidgetVideoSink , который преобразует видеокадры в отдельные кадры для WidgetRenderer класс. Этот класс, в свою очередь, делает текущий кадр доступным как объект QImage, готовый для любого типа обработки.

Итак, чтобы ответить на ваш вопрос - используйте либо наложения (как X11Renderer), либо извлеките отдельные QImages из видеопотока. (как QWidgetVideoSink) .

который зависит от платформы (как и приемники, так что не беда).

Кроме того, если оверлей недоступен, используется QWidgetVideoSink , который преобразует видеокадры в отдельные кадры для WidgetRenderer класс. Этот класс, в свою очередь, делает текущий кадр доступным как объект QImage, готовый для любого типа обработки.

Итак, чтобы ответить на ваш вопрос - используйте либо наложения (как X11Renderer), либо извлеките отдельные QImages из видеопотока. (как QWidgetVideoSink) .

7
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: