QT:在QVideoWidget中获取视频尺寸

Luc*_*uca 4 qt qmediaplayer

这应该是简单的,但我无法弄清楚这一点.如何获取加载到QVideoWidget/QMediaPlayer的文件的视频尺寸.所以,我的代码如下:

QMediaPlayer m_MediaPLayer(0, QMediaPlayer::VideoSurface);
m_VideoWidget = new QVideoWidget;
m_MediaPLayer.setVideoOutput(m_VideoWidget);
m_MediaPLayer.setMedia(QUrl::fromLocalFile("file.avi"));

m_MediaPLayer.play();
// I am here checking for media status changed event
connect(&m_MediaPLayer,   SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
        this, SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus)));

void MyClass::mediaStatusChanged(QMediaPlayer::MediaStatus status)
{
    // Here I get notification for media status change but no idea how to 
    // get the video size. I could not figure out a way. 

}
Run Code Online (Sandbox Code Playgroud)

ago*_*old 5

从理论上讲,有两种方法可以获得这些信息:

  1. 通过QMediaPlayer::metaData使用密钥,Resolution您应该得到如下解决方案QSize:

    if (m_MediaPLayer->isMetaDataAvailable()) {
      qDebug() <<"resolution:"  <<m_MediaPLayer->metaData("Resolution");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用QMediaResource.resolution()哪个也返回QSize:

    qDebug() << "resolution:" << m_MediaPLayer->media().canonicalResource().resolution();
    
    Run Code Online (Sandbox Code Playgroud)

但是,在这两种情况下,它都会-1,-1为我返回我尝试的两个视频(一个avi和一个mp4).

关于这个问题有一些旧的Qt线程:获得视频文件的分辨率,并且QMediaPlayer分辨率返回(-1x-1).虽然给出了一些解决方案,但没有一个对我有用,事实上有一个错误报告:

QTBUG-28850 - QMediaResource不返回媒体信息

这仍然是开放的.

一些相关问题:

最后一个问题答案建议使用MediaInfo,其中包含可以提取视频元数据的库.

我希望OpenCV能够做到这一点,但事实并非如此.