利用ffmpeg读取音乐文件的专辑信息(包括专辑封面图片)
工作原理
读取metadata
AVFormatContext 结构体中有一个属性是metadata,我们在读取一个多媒体文件的时候,可以通过AVDictionaryEntry访问这个属性的数据。
AVFormatContext *fmt_ctx = NULL;
AVDictionaryEntry *tag = NULL;
av_register_all();
if ((ret = avformat_open_input(&fmt_ctx, "path_to_file.mp3", NULL, NULL))){
printf("Fail to open file");
}
//读取metadata中所有的tag
while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))){
printf("Tag:%s , Value: %s", tag->key, tag->value);
}
AvFormatContext
AVDictionaryEntry
读取metadata的官方示例
读取专辑封面图片
// read the format headers
if (fmt_ctx->iformat->read_header(fmt_ctx) < 0) {
printf("No header format");
return;
}
for (int i = 0; i < fmt_ctx->nb_streams; i++){
if (fmt_ctx->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) {
AVPacket pkt = fmt_ctx->streams[i]->attached_pic;
//使用QImage读取完整图片数据(注意,图片数据是为解析的文件数据,需要用QImage::fromdata来解析读取)
QImage img = QImage::fromData((uchar*)pkt.data, pkt.size);
imageWidget->setPixmap(QPixmap::fromImage(img));
break;
}
}
我给深度文件管理器添加的音乐文件预览播放的支持效果(Linux deepin):
音乐文件封面缩略图预览

播放预览



相关推荐
wangdaren 2020-08-15
wqiaofujiang 2020-07-05
PGzxc 2020-07-04
ShoppingChen 2020-06-25
cherayliu 2020-06-17
83096129 2020-06-08
83096129 2020-06-08
PGzxc 2020-06-01
ShoppingChen 2020-05-29
cherayliu 2020-05-11
ShoppingChen 2020-05-11
83096129 2020-05-10
PGzxc 2020-05-07
cherayliu 2020-04-27
cherayliu 2020-04-11