//

//  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. koa2实现拦截器进行登录前session校验

    //定义允许直接访问的url const allowpage = ['/login','/api/login'] //拦截 function localFilter(ctx) { let url = ...

  2. css只改变input输入框光标颜色不改变文字颜色实现方法

    input:focus{color:blue}//光标颜色 input{ text-shadow: 0px 0px 0px red;//文字颜色 -webkit-text-fill-color: tr ...

  3. innodb分区

    当 MySQL的总记录数超过了100万后,性能会大幅下降,可以采用分区方案 分区允许根据指定的规则,跨文件系统分配单个表的多个部分.表的不同部分在不同的位置被存储为单独的表. 1.先看下innodb的 ...

  4. VB2008新特性

    1.扩展方法 (Extension Methods) 给Person类扩展Print方法 Public Module PersonExtension <System.Runtime.Compil ...

  5. 如何下载腾讯视频的视频转为MP4常用格式视频

    想起之前看过中央一台的<我要上春晚>中有个节目叫<迎春花>,两个女孩表现特别好,想下载这个视频,然后发现CCTV提供的客户端不好用,腾讯视频有,但是腾讯视频下载下来是qlv格式 ...

  6. springboot测试service层的单元测试

    package com.test.service; import com.task.Application;import com.task.model.po.TaskRecordDo;import o ...

  7. 【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  8. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  9. goto的用法

    using UnityEngine; using System.Collections; public class goto1 : MonoBehaviour { public bool can = ...

  10. MQ java 基础编程(一)

    本文转自:http://www.blogjava.net/i369/articles/88035.html 编写人:邬文俊 编写时间 : 2006-2-16 联系邮件 : wenjunwu430@gm ...