C++ 使用QtGStreamer检索视频大小返回零

C++ 使用QtGStreamer检索视频大小返回零,c++,qt4,gstreamer,qtgstreamer,C++,Qt4,Gstreamer,Qtgstreamer,我正在播放0.10.0并尝试检索视频大小,但对于高度和宽度值,它返回0 但是,我能够在QImage上播放视频,没有任何问题 我想知道我可能做错了什么。有什么建议吗?我无法在web上找到使用此API的相关示例。解决了它。在onNewDecodedPad()中,您仍然无法访问有关视频帧的信息 类MyMultimedia继承自QGst::Utils::ApplicationSink,因此我必须实现一个名为QGst::FlowReturn MyMultimedia::newBuffer()的方法,该方法

我正在播放0.10.0并尝试检索视频大小,但对于高度宽度值,它返回0

但是,我能够在QImage上播放视频,没有任何问题


我想知道我可能做错了什么。有什么建议吗?我无法在web上找到使用此API的相关示例。

解决了它。在
onNewDecodedPad()
中,您仍然无法访问有关视频帧的信息

MyMultimedia
继承自
QGst::Utils::ApplicationSink
,因此我必须实现一个名为
QGst::FlowReturn MyMultimedia::newBuffer()
的方法,该方法在新帧准备就绪时由QtGstreamer调用

换句话说,使用此方法将视频帧复制到
QImage
。我不知道的是
pullBuffer()
返回一个
QGst::BufferPtr
,它有一个
QGst::CapsPtr
。它是这个变量的一个内部结构,保存了我一直在寻找的信息:

QGst::FlowReturn MyMultimedia::newBuffer()
{
    QGst::BufferPtr buf_ptr = pullBuffer();        
    QGst::CapsPtr caps_ptr = buf_ptr->caps();
    QGst::StructurePtr struct_ptr = caps_ptr->internalStructure(0);

    qDebug() << struct_ptr->value("width").get<int>() << 
                "x" << 
                struct_ptr->value("height").get<int>();

    // ...
}
QGst::FlowReturn MyMultimedia::newBuffer()
{
QGst::BufferPtr buf_ptr=pullBuffer();
QGst::CapsPtr caps_ptr=buf_ptr->caps();
QGst::StructurePtr struct_ptr=caps_ptr->internalStructure(0);

qDebug()值(“width”).get()看起来类似于gstreamer c示例。您可以查看这些示例,也许您会发现
void MyMultimedia::onNewDecodedPad(QGst::PadPtr pad)
{  
    QGst::CapsPtr caps = pad->caps();
    QGst::StructurePtr structure = caps->internalStructure(0);
    if (structure->name().contains("video/x-raw"))
    {
        // Trying to print width and height using a couple of different ways,
        // but all of them returns 0 for width/height.

        qDebug() << "#1 Size: " << structure->value("width").get<int>() << "x" << structure->value("height").get<int>();

        qDebug() << "#2 Size: " << structure->value("width").toInt() << "x" << structure->value("height").toInt();

        qDebug() << "#3 Size: " << structure.data()->value("width").get<int>() << "x" << structure.data()->value("height").get<int>();

        // numberOfFields also returns 0, which is very wierd.
        qDebug() << "numberOfFields:" << structure->numberOfFields(); 

    }

    // some other code
}
QGst::FlowReturn MyMultimedia::newBuffer()
{
    QGst::BufferPtr buf_ptr = pullBuffer();        
    QGst::CapsPtr caps_ptr = buf_ptr->caps();
    QGst::StructurePtr struct_ptr = caps_ptr->internalStructure(0);

    qDebug() << struct_ptr->value("width").get<int>() << 
                "x" << 
                struct_ptr->value("height").get<int>();

    // ...
}