//

//  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. Postman测试api@RequestBody接收参数

    api postman 结果 { , "message": "Content type 'multipart/form-data;boundary=----------- ...

  2. php解析mpp文件中的多级任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  3. Bootstrap——导航居中

    这是采用了栅格,设置缩进,使看起来居中,但是手机浏览会靠到最左边.另外center-block类好像也不管用. <div class="row"> <ul cla ...

  4. 使用srvany.exe把程序安装成windows服务的方法

    http://mazhihui.iteye.com/blog/1294431 srvany.exe是什么? srvany.exe是Microsoft Windows Resource Kits工具集的 ...

  5. 如何使用Maven scope

    maven 有6个scope类型,下面简单总结备忘下 <dependency> <groupId>javax.servlet</groupId> <artif ...

  6. iOS 添加Resource bundle target(静态库中使用图片等资源)

    一.首先将资源文件打包成bundle 新建工程:File -> New -> Project... -> OS X -> Framework & Library -&g ...

  7. ASPX代码加固小结

    1.replace替换 <%@Page Language="C#"%> <% string strID=Request["id"]; strI ...

  8. CentOS7--Firewalld防火墙

    Firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及"zone"的区域功能概念,使用图形化工具firewall ...

  9. [Ubuntu] 如何在 Lubuntu 安装 python-spidermonkey

    SpiderMonkey 是由 Mozilla 开发的 Javascript 引擎,它由 C/C++ 编写而成.Mozilla 在其多个产品中使用了该引擎,包括 Firefox 浏览器. python ...

  10. Hadoop集群三种作业调度算法介绍

    Hadoop集群中有三种作业调度算法,分别为FIFO,公平调度算法和计算能力调度算法 先来先服务(FIFO) Hadoop中默认的调度器FIFO,它先按照作业的优先级高低,再按照到达时间的先后选择被执 ...