如何查找QMediaPlayer视频的视频分辨率和宽高比?

时间:2015-03-12 22:26:08

标签: qt video qt5 qtmultimedia

这似乎太简单了,我一定是在忽视什么?

如何从QMediaPlayer显示的视频文件中找到原始视频大小或宽高比?

视频分辨率,PixelAspectRatio等应该在MetaData中,但我等待MetaData更新信号,并在视频.play()之后等待几秒钟,但isMetaDataAvailable()总是返回false, .availableMetaData().metaData(QMediaMetaData::Resolution).toSize()始终为空。

似乎没有其他地方可以获取视频分辨率信息,或者我错过了什么?

我可以打开视频,全屏播放视频等。

3 个答案:

答案 0 :(得分:1)

您可以使用QVideoWidget实例作为QMediaPlayer的视频输出,并从QVideoWidget :: sizeHint检索本机视频大小。

QSize MyVideoPlayer::getVideoNativeSize(const QString& videoFilePath)
{
    m_mediaPlayer = new QMediaPlayer(0, QMediaPlayer::VideoSurface);
    m_mediaPlayer->setVideoOutput(m_videoWidget);
    m_mediaPlayer->setMedia(QUrl::fromLocalFile(videoFilePath));
    connect(m_mediaPlayer, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
            this, SLOT(OnMediaStatusChanged(QMediaPlayer::MediaStatus)));

    m_isStoppingVideo = false;
    QEventLoop loop;
    m_mediaPlayer->play();
    while (!m_isStoppingVideo)
    {
        loop.processEvents();
    }
    disconnect(m_mediaPlayer, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
                this, SLOT(OnMediaStatusChanged(QMediaPlayer::MediaStatus)));

    m_mediaPlayer->stop();
    return m_videoWidget->sizeHint();
}

void MyVideoPlayer::OnMediaStatusChanged(QMediaPlayer::MediaStatus mediaStatus)
{
    if (mediaStatus == QMediaPlayer::BufferedMedia)
    {
        m_isStoppingVideo = true;
    }
}

答案 1 :(得分:0)

要查找没有元数据的分辨率,您可以从Qt论坛查看这个问题,寻找可能的解决方案:

http://forum.qt.io/topic/31278/solved-get-resolution-of-a-video-file-40-qmediaplayer-41/2

  

我通过等待用户播放视频来解决我的问题   他们这样做我得到QGraphicsVideoItems类属性:   nativeSize。

答案 2 :(得分:0)

我还使用QGraphicsVideoItem s nativeSize属性解决了这个问题。但棘手的是,nativeSize仅在您开始播放视频一段时间后才会生效。诀窍是连接到获得真正QGraphicsVideoItem::nativeSizeChanged(const QSizeF &size)时发出的特殊nativeSize信号。