我们在播放音频文件时,如MP3格式的音频文件,一些播放器会显示音乐名称、专辑名称、歌手、音乐图像等信息,如下图片所示:

下面介绍使用FFMpeg来获取这些信息。

* 使用函数avformat_open_input打开文件,结封装。
* 使用函数avformat_find_stream_info查找并添加流信息到Format上下文中。
* 使用函数av_dict_get获取文件中的字典信息。
下面是关键部分代码:

<>1.获取音乐相关信息

获取文件中的信息:
// 打开文件 int result = avformat_open_input(&m_AVFormatContext, fileName.
toLocal8Bit().data(), nullptr, nullptr); if (result != 0 || m_AVFormatContext ==
nullptr) return false; // 查找流信息,把它存入AVFormatContext中 if (
avformat_find_stream_info(m_AVFormatContext, nullptr) < 0) return false; int
streamsCount= m_AVFormatContext->nb_streams; // 读取详细信息 AVDictionaryEntry *tag =
nullptr; while (tag = av_dict_get(m_AVFormatContext->metadata, "", tag,
AV_DICT_IGNORE_SUFFIX)) { QString keyString = tag->key; QString valueString =
QString::fromUtf8(tag->value); m_InfoMap.insert(keyString, valueString); }
这里将信息放到了一个QMap中存储。
下面是我本地的音频文件中的得到的字典信息:


title表示歌曲名,album表示专辑名称,artist表示艺术家(歌手)

<>2.获取图片

获取图片代码关键部分如下:
int streamsCount = m_AVFormatContext->nb_streams; for (int i=0; i<streamsCount;
++i) { if (m_AVFormatContext->streams[i]->disposition &
AV_DISPOSITION_ATTACHED_PIC) { AVPacket pkt = m_AVFormatContext->streams[i]->
attached_pic; m_InfoImage = QImage::fromData((uchar*)pkt.data, pkt.size); } }
这里将图片信息存入到QImage类型的名为m_InfoImage的成员变量中。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信