//

//  MusicInfoArray.h

//  LocationMusic

//

//  Created by Wengrp on 2017/6/22.

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

//

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

#import <AVFoundation/AVFoundation.h>

@interface MusicInfoArray : NSObject

/**

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

*/

+ (NSMutableArray *)MusicInfoArray;

@end

//

//  MusicInfoArray.m

//  LocationMusic

//

//  Created by Wengrp on 2017/6/22.

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

//

#import "MusicInfoArray.h"

@implementation MusicInfoArray

+ (NSMutableArray *)MusicInfoArray

{

    NSMutableArray *resultArray = [[NSMutableArray alloc] init];

    NSArray *mp3Array = [NSBundle pathsForResourcesOfType:@"mp3" inDirectory:[[NSBundle mainBundle] pathForResource:@"Music" ofType:@"bundle"]];

    for (NSString *filePath in mp3Array) {

        NSURL *url = [NSURL fileURLWithPath:filePath];

        NSString *MusicName = [filePath lastPathComponent];

        AVURLAsset *mp3Asset = [AVURLAsset URLAssetWithURL:url options:nil];

        NSLog(@"%@",mp3Asset);

        for (NSString *format in [mp3Asset availableMetadataFormats]) {

            NSMutableDictionary *infoDict = [[NSMutableDictionary alloc] init];

            [infoDict setObject:MusicName forKey:@"MusicName"];

            NSLog(@"format type = %@",format);

            for (AVMetadataItem *metadataItem in [mp3Asset metadataForFormat:format]) {

                NSLog(@"commonKey = %@",metadataItem.commonKey);

                if ([metadataItem.commonKey isEqualToString:@"artwork"]) {

                    NSString *mime = [(NSDictionary *)metadataItem.value objectForKey:@"MIME"];

                    NSLog(@"mime: %@",mime);

                    [infoDict setObject:mime forKey:@"artwork"];

                }

                else if([metadataItem.commonKey isEqualToString:@"title"])

                {

                    NSString *title = (NSString *)metadataItem.value;

                    NSLog(@"title: %@",title);

                    [infoDict setObject:title forKey:@"title"];

                }

                else if([metadataItem.commonKey isEqualToString:@"artist"])

                {

                    NSString *artist = (NSString *)metadataItem.value;

                    NSLog(@"artist: %@",artist);

                    [infoDict setObject:artist forKey:@"artist"];

                }

                else if([metadataItem.commonKey isEqualToString:@"albumName"])

                {

                    NSString *albumName = (NSString *)metadataItem.value;

                    NSLog(@"albumName: %@",albumName);

                    [infoDict setObject:albumName forKey:@"albumName"];

                }

            }

            [resultArray addObject:infoDict];

        }

    }

    return resultArray;

}

@end

iOS - 获取音视频文件的Metadata信息的更多相关文章

  1. 获取音视频文件AVMetadata数据

    获取音视频文件AVMetadata数据 问题来源: http://stackoverflow.com/questions/16318821/extracting-mp3-album-artwork-i ...

  2. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  3. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  4. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...

  5. Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)

    上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值. ...

  6. Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  7. Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会

    文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...

  8. Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验

    前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...

  9. DirectShow 获取音视频输入设备列表

    开发环境:Win10 + VS2015 本文介绍一个 "获取音频视频输入设备列表" 的示例代码. 效果图 代码下载 代码下载(VC2015):Github - DShow_simp ...

随机推荐

  1. Java学习之——JavaBeans

    1.什么是JavaBeans? JavaBeans是Java语言中可以重复使用的软件组件,它们是一种特殊的Java类,将很多的对象封装到了一个对象(bean)中.特点是 可序列化, 提供无参构造器, ...

  2. vue-cli生成的项目配置开发和生产环境不同的接口

    vue-cli生成的项目,vue项目配置了不同开发环境的接口地址,axios.defaults.baseURL如何引用这个地址,这是在我发布项目的时候考虑的,于是想到了 方法一: config下配置文 ...

  3. windows2008 使用nginx 反向代理实现负载均衡解决HTTPS 证书问题

    由于项目需要 负载均衡由NBL 转成nginx 反向代理.考虑都是https模块,所以证书成了个难题. 解决方案: 1.下载openssl(windows 安装包) 2.打开bin/下面的openss ...

  4. 源码分析五(HashSet的内部实现)

    一:首先来看看Hashset的继承体系 public class HashSet<E> extends AbstractSet<E> implements Set<E&g ...

  5. uploadify在火狐下上传不了的解决方式,java版(Spring+SpringMVC+MyBatis)具体解决方式

     因为技术选型的原因,在一个产品中.我选择了uploadify,选择它的原因是它有完好的技术文档说明(http://www.uploadify.com/documentation/),唯一不足的是 ...

  6. Linux+Redis实战教程_day01_常用命令【重点】

    3.常用命令[重点] Linux命令中参数,一般都是无序的.特殊情况下除外 3.1.磁盘管理命令 ls命令:列出目录内容 参数: -a 查询所有文件和文件夹.包含隐藏的 -l 查询详细列表    ls ...

  7. mongodb 搭建主从服务器

    mongodb 主从配置比较简单,只需要在启动的时候添加参数(-master.-slave -source IP:PORT). Ubuntu 16.04 系统环境 监听端口分别为:27010.2701 ...

  8. 8 -- 深入使用Spring -- 1...4 属性占位符配置器

    8.1.4 属性占位符配置器 PropertyPlaceholderConfigurer 是一个容器后处理器,负责读取Properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的 ...

  9. Android开发-- findViewById()方法得到空指针

    如果想通过调用findViewById()方法获取到相应的控件,必须要求当前Activity的layout通过setContentView. 如果你通过其他方法添加了一个layout,如需获取这个la ...

  10. Ajax 分析方法

    我们如何查看到 Ajax 请求: 以 https://m.weibo.cn/u/2830678474 这个网页为例,按 F12,加载网页,然后选择资源类型为 XHR 的就可以看到 Ajax 请求了 我 ...