获取音视频文件AVMetadata数据
获取音视频文件AVMetadata数据
问题来源:
http://stackoverflow.com/questions/16318821/extracting-mp3-album-artwork-in-ios
http://stackoverflow.com/questions/14030746/ios-avfoundation-how-do-i-fetch-artwork-from-an-mp3-file
做音乐播放器应用有时候需要获取音乐文件的一些数据信息,比如该音乐文件中的封面图片,艺人名,专辑名等,如何获取呢?本人抛砖引玉,写一个获取封面图片的类供大家参考.
//
// AVMetadataInfo.h
//
// http://home.cnblogs.com/u/YouXianMing/
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import <Foundation/Foundation.h> #warning 需要引入AVFoundation.framework @interface AVMetadataInfo : NSObject /**
获取音视频文件的Metadata信息(可以获取到mp3以及m4a的相关信息) *AVMetadataCommonKeyArtwork这个参数是可以换的,换不同的参数可以取得不同的值 *[注意]此方法中用到了信号量将异步操作转换成了同步操作,尽量在主线程中使用 @param fileURL 文件的URL地址
@return 一个包含了相关内容的字典
*/
+ (NSDictionary *)dataInfoFromFileURL:(NSURL *)fileURL; @end
//
// AVMetadataInfo.m
//
// http://home.cnblogs.com/u/YouXianMing/
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "AVMetadataInfo.h"
#import <AVFoundation/AVFoundation.h> @implementation AVMetadataInfo + (NSDictionary *)dataInfoFromFileURL:(NSURL *)fileURL
{
// 创建字典
NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // 创建信号量(将异步变成同步)
dispatch_semaphore_t semaphore = dispatch_semaphore_create(); AVAsset *asset = [AVURLAsset URLAssetWithURL:fileURL options:nil];
[asset loadValuesAsynchronouslyForKeys:@[@"commonMetadata"]
completionHandler:^{
// 发送信号量
dispatch_semaphore_signal(semaphore);
}]; // 无限等待
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); // 获取数据
NSArray *artworks = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata
withKey:AVMetadataCommonKeyArtwork
keySpace:AVMetadataKeySpaceCommon];
for (AVMetadataItem *item in artworks)
{
if ([item.keySpace isEqualToString:AVMetadataKeySpaceID3])
{
NSDictionary *dict = [item.value copyWithZone:nil]; // 获取图片
UIImage *image = [UIImage imageWithData:[dict objectForKey:@"data"]];
[dic setObject:image forKey:@"Artwork"];
}
if ([item.keySpace isEqualToString:AVMetadataKeySpaceiTunes])
{
// 获取图片
UIImage *image = [UIImage imageWithData:[item.value copyWithZone:nil]];
[dic setObject:image forKey:@"Artwork"];
}
} return [NSDictionary dictionaryWithDictionary:dic];
} @end
引入头文件,然后
没有然后了,就是这么简单.想要获取其他信息,请读者自行修改,很简单的.
获取音视频文件AVMetadata数据的更多相关文章
- iOS - 获取音视频文件的Metadata信息
// // MusicInfoArray.h // LocationMusic // // Created by Wengrp on 2017/6/22. // Copyright © 2017年 W ...
- FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据
如何使用FFmpeg抽取音视频的音频数据,代码如下: void adts_header(char *szAdtsHeader, int dataLen); // 使用FFmpeg从视频中抽取音频 vo ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- COS 音视频实践 | 数据工作流助你播放多清晰度视频
前言 你是否遇到过这样的场景: 兴致勃勃地观看心爱的视频,正当到了激动人心的高潮部分,却突然因为网速过差被迫陷入"转圈圈"的人生以及社会的大思考中. 又或者是身为网速畅通无阻的vi ...
- Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)
上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值. ...
- DirectShow 获取音视频输入设备列表
开发环境:Win10 + VS2015 本文介绍一个 "获取音频视频输入设备列表" 的示例代码. 效果图 代码下载 代码下载(VC2015):Github - DShow_simp ...
- android获取mp4视频文件总时长和视频宽高<转>
android使用 MediaMetadataRetriever 获取视频文件的 总时长 和视频的分辨率. 根据该方式获取视频信息可以看出不仅仅可以获取时长和分辨率,还能获取到其他的一些视频信息,不错 ...
- iOS开发- 获取本地视频文件
下面具体介绍下实现过程.先看效果图.图1. 未实现功能前, iTunes截图 图2. 实现功能后, iTunes截图 图3. 实现功能后, 运行截图 好了, 通过图片, 我们可以看到实现的效果.功能包 ...
- asp.net 获取音视频时长 的方法
http://www.evernote.com/l/AHPMEDnEd65A7ot_DbEP4C47QsPDYLhYdYg/ 日志: 1.第一种方法: 调用:shell32.dll ,win7 ...
随机推荐
- 【笔试题】Java 继承知识点检测
笔试题 Java 继承知识点检测 Question 1 Output of following Java Program? class Base { public void show() { Syst ...
- Redis Cluster集群的搭建与实践
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
- 快速提高 Vi/Vim 使用效率的原则与途径
Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器.因其强大的功能和高效的操作,Vi/Vim 也成为众多 Unix/Linux 用户.管理员必须掌握并熟练使用的编辑工具之一.尤其是在 ...
- thinkphp5.0生命周期
本篇内容我们对ThinkPHP5.0的应用请求的生命周期做大致的介绍,以便于开发者了解整个执行流程. 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件. ...
- Python类总结-多态及鸭子类型
Python天生支持多态. 什么是多态: 一类事务的多种形态. 多态的一个例子 class Alipay(): def pay(self,money): print('用支付宝支付了%s元' % mo ...
- 基于rsync方式的文件备份
rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用.本文主要讲述的是如何自架rsync服 务器,以实现文件传输.备份和镜像.相对ta ...
- Yii apache配置站点出现400 Bad Request 的解决方法
<VirtualHost *:80> ServerName localhost ServerAlias localhost DocumentRoot "/www/frogCms/ ...
- hashMap原理剖析
在日常开发中,hashMap应该算是比较常用的一个类了,今天就来学习一下hashMap的实现原理. 概念 1.什么时hash? 书面定义:就是把一个不固定长度的二进制值映射成一个固定长度的二进制值. ...
- 【BZOJ 1398】 1398: Vijos1382寻找主人 Necklace (最小表示法)
1398: Vijos1382寻找主人 Necklace Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 308 Solved: 129 Descrip ...
- PHP 笔记——会话控制
1. Session的操作 1.1 启动 Session session_start(void):bool 1.2 注册 Session 会话变量启动后,全部被保存在全局数组$_SESSION[]中. ...