2017-10-21 96 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,他們只是不在乎。