QT:在 QVideoWidget 中获取视频尺寸

标签 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. 

}

最佳答案

理论上有两种方法可以获取这些信息:

  • 通过 QMediaPlayer::metaData 使用 key Resolution 你应该得到的分辨率为 QSize :
    if (m_MediaPLayer->isMetaDataAvailable()) {
      qDebug() <<"resolution:"  <<m_MediaPLayer->metaData("Resolution");
    }
    
  • 使用 QMediaResource.resolution() 它还返回一个 QSize :
    qDebug() << "resolution:" << m_MediaPLayer->media().canonicalResource().resolution();
    

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

    有一些关于这个问题的旧 Qt 线程:get resolution of a video file , 和 QMediaPlayer resolution returns (-1x-1) .虽然给出了一些解决方案,但没有一个对我有用,实际上还有一个 bug report这个的:

    QTBUG-28850 - QMediaResource returns no media info

    这仍然是开放的。

    一些相关问题:
  • Get native video resolution of a video file
  • C++ : What's the easiest library to open video file
  • How to read video metadata (C/C++)?

  • answer in the last question建议使用 MediaInfo ,其中包含可以提取视频元数据的库。

    我期待 OpenCV能够做到这一点,但是这个 is not the case .

    关于QT:在 QVideoWidget 中获取视频尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34895328/

    相关文章:

    python - 使用 QmediaPlayer 的 PyQt5 访问框架

    qt - Qt循环播放背景音乐

    c++ - 格式化 QTableView 显示的日期/时间值

    c++ - QMediaPlayer 支持哪些音频格式?

    c++ - 使用 QMediaPlayer 播放资源中的 mp3 文件

    qt - 最小尺寸的Qt小部件可容纳所有内容

    c++ - QMediaPlayer:发出 positionChanged() 时声音中断

    c++ - 当 QML 中的父属性更改时更改子属性

    qt - QChart 对大数据集无响应

    c++ - OpenCV findContours 堆栈溢出