2017-10-21 99 views
0

我试图实现检查视频文件的服务器终端应用程序。我需要获取音频/视频编解码器,分辨率,比特率,长度等信息。QMediaPlayer给了我错误的视频信息

我在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的视频文件的元信息右/最好的方法?

回答

0

鉴于QtMultimedia总体上已经非常糟糕,您应该听取QMediaObject::metaDataChanged(由QMediaPlayer继承)。

但是,我警告你,这在Windows和最有可能的MacOS上都是坏的。我汇报了QTBUG,他们只是不在乎。