LINUX.ORG.RU

Gstreamer, получение видео по-кадрово, преобразование в Qt/GL формат изображения

 ,


1

2

Продолжение темы Qt Phonon video player в отдельном потоке.

Отошел от фонона.

Есть GStreamer (ну и бинд к Qt). Нужно принимать видеопоток в rtmp, декодировать(ну и прочее), и после этого брать изображение в виде картинки(ну чтоб в QImage к примеру можно было в итоге запихнуть, или ещё в какой контейнер) для последующей передачи любым способом(ну вообще предполагается сигнал) и отрисовки где угодно. QGst::ui::widget или прочее не нужно, надо чтоб декодирование и отправка кадров проиходила в отдельном потоке, чтоб это дело не вешало гуи поток.

Внимание вопрос, как это можно сделать? Какие элементы гстримера использовать и как это всё далее преобразовать?

В примере плеера создание пайплайна происходит примерно так, и это работает нормально, потом передается url и всё показывает.

Я полагаю что нужно как-то вытащить кадры или как-то приконнектить пайплайн к обработчику, ну а дальше уже понятнее.

ниже вырезка из примера создания пайплайна, чтоб не было так постно:

//.. это всё в классе наследнике QGst::Ui::VideoWidget

m_pipeline = QGst::ElementFactory::make("playbin2").dynamicCast<QGst::Pipeline>();
        if (m_pipeline) {
            //let the video widget watch the pipeline for new video sinks
            watchPipeline(m_pipeline); //тут виджет биндится к пайплайну

            //watch the bus for messages
            QGst::BusPtr bus = m_pipeline->bus();
            bus->addSignalWatch();
            QGlib::connect(bus, "message", this, &Player::onBusMessage);

Точно есть appsink, который позволяет получить доступ к содержимому буферов потока, построив по ним нужную картинку. Возможно, есть какой-нибудь специализированный элемент, но это надо смотреть.

kravich ★★★★
()
Ответ на: комментарий от kravich

Да, есть appsink, впринципе хотел попробовать его, точнее попробовал бинд к кутэ (<QtGStreamer/QGst/Utils/ApplicationSink>), но тут бага, в заголовочном файле подключается #include «global.h», но не находит его. Тут то ли путь не правильный, то ли забыли положить хедер. Это всё из бубунтовских репов.

Надо из сорцов попробовать собрать, там должно быть поправленно(гдето натыкался на этот фикс), или на чистом гстримере попробовать.

Blastbit
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.