QMediaPlayer给了我关于视频的错误信息

时间:2017-10-21 02:47:48

标签: c++ qt video qt5 qtmultimedia

我正在尝试实施检查视频文件的服务器终端应用程序。我需要获得音频/视频编解码器,分辨率,比特率,长度等信息。

我在QMediaResource找到了大部分所需信息。在阅读了多个例子之后,我来到了这个:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QMediaPlayer media;
    media.setMedia(QUrl::fromLocalFile("/home/danbru1211/Videos/S01E01.mp4"));

    QObject::connect(&media, &QMediaPlayer::mediaStatusChanged,
                     [&media](QMediaPlayer::MediaStatus status){
        qDebug() << status;

        auto resource = media.media().canonicalResource();
        qDebug() << "language" << resource.language();
        qDebug() << "audioCodec" << resource.audioCodec();
        qDebug() << "videoCodec" << resource.videoCodec();
        qDebug() << "dataSize" << resource.dataSize();
        qDebug() << "audioBitRate" << resource.audioBitRate();
        qDebug() << "sampleRate" << resource.sampleRate();
        qDebug() << "channelCount" << resource.channelCount();
        qDebug() << "videoBitRate" << resource.videoBitRate();
        qDebug() << "resolution" << resource.resolution();
    });

    return a.exec();
}

但遗憾的是,这并没有输出正确的元数据:

QMediaPlayer::LoadedMedia
language ""
audioCodec ""
videoCodec ""
dataSize 0
audioBitRate 0
sampleRate 0
channelCount 0
videoBitRate 0
resolution QSize(-1, -1)

我确信视频的路径存在且可读。为什么我得到所有0值而不是正确值。这是在Qt中获取有关视频文件的元信息的正确/最佳方式吗?

1 个答案:

答案 0 :(得分:1)

鉴于QtMultimedia总体上已经被打破了,你应该听QMediaObject::metaDataChanged(由QMediaPlayer继承)。

但是,我警告你,这在Windows上很糟糕,而且很可能也是macOS。我已经报告了几个QTBUG并且他们不在乎。