c++qtgstreamerqtgstreamer

QtGstreamer camerabin2 usage


I'm working on olimex a13 board with just eglfs i.e, no windowing system. Because of this Qt Multimedia stuff video and camera aren't working as Qt uses Gstreamer which in turn needs X. So I'm using QtGstreamer library which is here.

I've followed the examples and created a media player which is working as expected. Now, I want to do a camera and using camerabin2 which is from bad plugins.

This is my code:

//init QGst
QGst::init(&argc, &argv);
//create video surface
QGst::Quick::VideoSurface* videoSurface = new QGst::Quick::VideoSurface(&engine);

CameraPlayer player;
player.setVideoSink(videoSurface->videoSink());

//cameraplayer.cpp

void open() 
{
    if (!m_pipeline) {
        m_pipeline = QGst::ElementFactory::make("camerabin").dynamicCast<QGst::Pipeline>();
        if (m_pipeline) {
            m_pipeline->setProperty("video-sink", m_videoSink);
            //watch the bus for messages
            QGst::BusPtr bus = m_pipeline->bus();
            bus->addSignalWatch();
            QGlib::connect(bus, "message", this, &CameraPlayer::onBusMessage);
            //QGlib::connect(bus, "image-done", this, &CameraPlayer::onImageDone);
        } else {
            qCritical() << "Failed to create the pipeline";
        }
    }
}
//-----------------------------------
void CameraPlayer::setVideoSink(const QGst::ElementPtr & sink)
{
    m_videoSink = sink;
}

//-----------------------------------
void CameraPlayer::start()
{
    m_pipeline->setState(QGst::StateReady);
    m_pipeline->setState(QGst::StatePlaying);
}

I then call cameraPlayer.start() which isn't working i.e, no video. Am I missing something here? Has anyone used QtGstreamer to stream webcam? Thanks in advance.


Solution

  • I realised some plugins (multifilesink) were missing. Started my Qt application with --gst-debug-level=4 argument and gstreamer then reported about missing plugins.