我想得到视频的码率。我使用Qt声子来实现这个目标。由于有一个名为Phonon::MediaObject的类,并提供了一个名为metaData()的方法,因此我使用了该方法,但结果显示为零。这是我的代码,我想知道为什么和如何获得的元数据,如比特率在qt与Phonon
QString source="E:\\sh.mp4";
Phonon::MediaObject media;
media.setCurrentSource(Phonon::MediaSource(source));
QMap <QString, QString> metaData = media.metaData();
int trackBitrate = metaData.value("bitrate").toInt();
qDebug()<<trackBitrate;结果始终为0
发布于 2012-10-18 00:14:07
我自己才弄明白的。
视频文件中的
如果你复制并粘贴它,它应该可以工作。
在这里下载FFMpeg:http://dranger.com/ffmpeg/tutorial01.html第一个教程将告诉你如何链接:http://dranger.com/ffmpeg/tutorial01.html
#include <QString>
#include <QMultiMap>
#include <stdio.h>
#include <libavformat/avformat.h>
#include <libavutil/dict.h>
void processMedia(const char* mediaFile)
{
AVFormatContext *pFormatCtx = NULL;
AVDictionaryEntry *tag = NULL;
// Register all formats and codecs
av_register_all();
// Open video file
if(avformat_open_input(&pFormatCtx, mediaFile, NULL, NULL)!=0)
return;
// Retrieve stream information
if(av_find_stream_info(pFormatCtx)<0)
return;
//Get Bitrate
float bitRate = pFormatCtx->bit_rate;
//Get Meta
QMultiMap<QString, QString> metaData;
while ((tag = av_dict_get(pFormatCtx->metadata, "", tag,
AV_DICT_IGNORE_SUFFIX)))
{
QString keyString(tag->key);
QString valueString(tag->value);
metaData.insert(keyString, valueString);
printf("%s=%s\n", tag->key, tag->value);
}
// Close the video file
av_close_input_file(pFormatCtx);
}发布于 2012-03-03 17:05:39
设置数据源时,MediaObject将进入LoadingState。在这一点上,元数据可能还不可用。
当元数据准备就绪时,该对象会发出metaDataChanged信号。您应该对该信号做出反应,并仅在元数据发出后才尝试访问元数据。
https://stackoverflow.com/questions/9544699
复制相似问题