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

时间:2022-08-29 19:52:43
//

//  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的简单音乐播放器&lpar;模仿QQ音乐&rpar;

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

  2. Ubuntu 14&period;04 用户如何安装深度音乐播放器和百度音乐插件

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

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

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

  4. 22&lowbar;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. mongodb 安装、开启服务 和 php添加mongodb扩展

    1.下载mongodb:https://www.mongodb.org/downloads#production  (https://www.mongodb.org/dl/win32) 2.安装.配置 ...

  2. repcached的安装练习

    1 自行寻找一个具有大量非结构化数据,很难使用关系型数据库进行处理的场景,清晰描述场景并指出困难所在,要求原创  譬如说:以易迅电商为例,顾客会对购买的商品做出反馈评论,这些评论都是非结构化的数据,如 ...

  3. adb上使用cp&sol;mv命令的替代方法(failed on '&ast;&ast;&ast;' - Cross-device link解决方法)

    今天把玩手头的那部Android手机时碰到一个问题,即因为权限问题无法将文件复制到/system/和/data/分区中,经过一番折腾后,算是解决了,在此记录一笔.本方所涉及到的命令输入,均用斜体字表示 ...

  4. dedecms list 判断 每隔3次输出内容

    {dede:list pagesize='12' runphp='yes'} [field:global name=autoindex runphp="yes"](@me%3==0 ...

  5. DOM commend

    var comment = document.createComment("commend content"); var elem = document.getElementByI ...

  6. webservice axis2客户端设置代理方法&lpar;公司网络通过代理访问时)

    webservice axis2客户端设置代理方法(公司网络通过代理访问时)   UploadProcessInServiceStub stub = new UploadProcessInServic ...

  7. Hadoop集成

    Hadoop集成   长期以来,我每开个系列,只有兴趣写一篇,很难持之与恒.为了克服这个长久以来的性格弱点,以及梳理工作半年的积累.最近一个月会写两篇关于Mongo在地理大数据方面的实践和应用,一篇关 ...

  8. Java并发——volatile关键字

    什么是内存可见性? 这里就要提一下JMM(Java内存模型).当线程在运行的时候,并不是直接直接修改电脑主内存中的变量的值.线程间通讯也不是直接把一个线程的变量的值传给另一个线程,让其刷新变量.下面是 ...

  9. SPSS-聚类分析

    聚类分析(层次聚类分析(Q型聚类和R型聚类).快速聚类分析) 聚类分析的实质:是建立一种分类方法,它能够将一批样本数据按照他们在性质上的亲密程度在没有先验知识的情况下自动进行分类.这里所说的类就是一个 ...

  10. Android String&period;xml中的符号总结

    <b></b>加粗字体 <i></i> 斜体字体 <u></u> 给字体加下划线 \n 换行 \u0020表示空格 \u2026 ...