qt - 如何使用 Qt phonon 获取视频元数据?

标签 qt video metadata phonon

我想获取视频的比特率。我使用 Qt Phonon 来实现这个目标。 由于有一个名为 Phonon::MediaObject 的类并提供了一个名为 metaData() 的方法,我使用该方法但结果显示为零。这是我的代码,我想知道为什么以及如何使用 Phonon 获取 qt 中的比特率等元数据

    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

最佳答案

这是我自己想出来的。

  1. 视频文件中的元数据不包含比特率。它仅包含有关媒体的额外信息,对播放没有任何影响。因此,即使 Phonon::MediaObject::metaData() 在没有加载视频的情况下工作,它也不会帮助你。

  2. 我最终使用 libformat(ffmpeg 库的一部分)来获取比特率。这是代码。

如果您复制并粘贴此内容,它应该可以工作。

在此处下载 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);
}

关于qt - 如何使用 Qt phonon 获取视频元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9544699/

相关文章:

c++ - Qt QCursor::setPos() 什么都不做

python - PySide/Qt : Too many arguments to connect a signal to a slot?

c++ - 在应用程序中禁用 Microsoft IME

java - 如何使用 vlcj 在 JAVA (swing) jframe 中播放 mp4 视频?还有其他方法可以在 JAVA 中播放 mp4 吗?

c++ - QTextDocument::drawContents 仅以 96 dpi 呈现

javascript - 如何在浏览器中显示尚未完全生成的视频文件?

jquery - 是否有要添加的短代码或 HTML 元素来设置 MediaElement.js 中的默认音量?

amazon-web-services - 如何使用CLI远程获取AWS实例元数据?

metadata - 是否有用于网站内容评级的元标记?

python - 解析服务器有效负载,缺少几个键