//

//  AVMetadataInfo.h

//  AVMetadata

//

//  Created by Wengrp on 15/10/27.

//  Copyright © 2015年 Wengrp. All rights reserved.

//

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

#import <AVFoundation/AVFoundation.h>

@interface AVMetadataInfo : NSObject

/**

 获取音视频文件的Metadata信息(可以获取到mp3以及m4a的相关信息)

 *AVMetadataCommonKeyArtwork这个参数是可以换的,换不同的参数可以取得不同的值

 *[注意]此方法中用到了信号量将异步操作转换成了同步操作,尽量在主线程中使用

 @param fileURL 文件的URL地址

 @return 一个包含了相关内容的字典

 */

+ (NSDictionary *)dataInfoFromFileURL:(NSURL *)fileURL;

@end

//

//  AVMetadataInfo.m

//  AVMetadata

//

//  Created by Wengrp on 15/10/27.

//  Copyright © 2015年 Wengrp. All rights reserved.

//

#import "AVMetadataInfo.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

iOS - 音乐播放器需要获取音乐文件的一些数据信息(封装获取封面图片的类)的更多相关文章

  1. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下:http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该怎 ...

  2. Ubuntu 14.04 用户如何安装深度音乐播放器和百度音乐插件

    播放本地音乐或者收听国外的音乐电台,Ubuntu 14.04 自带的音乐播放器 Rhythmbox 完全能够满足,但是如果你想有像酷狗那样的国内播放器就需要折腾一下,还好有深度音乐播放器,这是一款完全 ...

  3. 在线音乐播放器-----酷狗音乐api接口抓取

    首先身为一个在线音乐播放器,需要前端和数据库的搭配使用. 在数据库方面,我们没有办法制作,首先是版权问题,再加上数据量.所以我们需要借用其他网络播放器的数据库. 但是这些在线播放器,如百度,酷狗,酷我 ...

  4. 22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现

    1 编写以下案例: 当点击了"播放"之后,在手机上的/mnt/sdcard2/natural.mp3就会播放. 2 编写布局文件activity_main.xml <Line ...

  5. 用Vue来实现音乐播放器(十四):歌手数据接口抓取

    第一步:在api文件夹下创建一个singer.js文件 返回一个getSingerList()方法  使他能够在singer.vue中调用 import jsonp from '../common/j ...

  6. 记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器

    1.本教程仅供个人学习用,禁止用于任何的商业和非法用途,如涉及版权问题请联系笔者删除. 2.随笔系作者原创文档,转载请注明文档来源:http://www.cnblogs.com/apresunday/ ...

  7. Andriod小项目——在线音乐播放器

    转载自: http://blog.csdn.net/sunkes/article/details/51189189 Andriod小项目——在线音乐播放器 Android在线音乐播放器 从大一开始就已 ...

  8. Android大作业 --音乐播放器

    1.项目成员(本次作业主要对上一次的音乐播放器进行完善) 韦家城 学号:1600802026 班级:161  博客:https://www.cnblogs.com/ln9969cc/ 邓乾尧 学号:1 ...

  9. 10个免费开源的JS音乐播放器插件

    点这里 音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些 网页播放器 插件比较少见,所以这里为大家整理一个集合,也许会有用到的时候. 下面整理的播放器有些是支持自适应的, ...

随机推荐

  1. MySQL 字符串拼接详解

    在Mysql 数据库中存在两种字符串连接操作.具体操作如下一. 语法:   1. CONCAT(string1,string2,…)   说明 : string1,string2代表字符串,conca ...

  2. oracle 产生随机数

    -- 产生一个任意大小的随机数select dbms_random.random from dual; -- 产生一个100以内的随机数select abs(mod(dbms_random.rando ...

  3. Ubuntu16.04下安装CUDA8.0和tensorflow

    GPU版的Tensorflow无疑是深度学习的一大神器,当然caffe之类的框架也可以用GPU来加速训练. 注意:以下安装默认为python2.7 1. 安装依赖包 $ sudo apt-get in ...

  4. Oracle批量执行SQL语句

    SQLServer的场合,用";"分割SQL语句即可正常执行. Oracle的场合,会报ORA-00911错误.Oracle中需要加上begin end才正确. Dim Sql A ...

  5. 入门常用SQL及官方文档的使用

    SQL语句基础理论 SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作关系型数据库. 5大主要类型: ①DQL(Data Query Language,数据查询语言)语句,主要由于se ...

  6. weblogic上部署项目出错

    一. Unable to access the selected application. Exception in AppMerge flows' progression Exception in ...

  7. linux sumba服务器简单配置

    使用samba设置linux和windows直接简单的文件共享 前提: 1.linux和windows已经可以互相ping同 2.已经安装好smb 查看是否安装smb rpm -aq|grep smb ...

  8. [转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃

    简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃 虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束.并且发送 ...

  9. PHP 图片 平均分割

    $filename = 'D://WWW/1.jpg'; $p = 5; // Get new sizes list($width, $height) = getimagesize($filename ...

  10. js replace replaceAll

    今天因为一些原因来看这篇博文,测试了一下根本不对.replace根本没有string.replace("字符","字符")这样的写法,而是stringObjec ...