[SOLVED] get resolution of a video file ( QMediaPlayer )
-
I solved it by using the signal metaDataChanged(key, value) when key is "Resolution".
Create a QMediaPlayer and set its media content, and use that signal. It is not necessory to play the media. -
You can use QVideoWidget instance as video output for
QMediaPlayer
and retrieve native size of video from 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; m_videoScreenSize = QSize(); 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; } }