iOS - 获取音视频文件的Metadata信息
// // 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信息的更多相关文章
- 获取音视频文件AVMetadata数据
获取音视频文件AVMetadata数据 问题来源: http://stackoverflow.com/questions/16318821/extracting-mp3-album-artwork-i ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)
上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值. ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
- DirectShow 获取音视频输入设备列表
开发环境:Win10 + VS2015 本文介绍一个 "获取音频视频输入设备列表" 的示例代码. 效果图 代码下载 代码下载(VC2015):Github - DShow_simp ...
随机推荐
- koa2使用注意点总结
post请求,ajax传入的参数获取的时候为ctx.request.body get请求,ajax传入参数获取的时候为ctx.request.query.参数名 koa-csrf可以设置什么请求的时候 ...
- 移动端网页使用flexible.js加入百度联盟广告样式不一致问题解决
flexible.js是淘宝推出的一款移动端手机自适应的库,源码内容很简洁,当网页使用了该库之后,页面会在head中加入对应的页面响应式的meta标签. 当使用flexible.js的时候,引入百度联 ...
- es 5 数组reduce方法记忆
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 概念:对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并 ...
- Android SDK Content loader has encountered a problem” “parseSdkContent Failed ”
昨天做了一个Android的小程序,调试的时候连接真实的手机,而不是用模拟器.今天早上打开eclipse的时候报错:“Android SDK Content loader has encountere ...
- java学习之maven
maven是项目构建工具,能把项目抽象成POM(Project Object Model) Maven使用POM对项目进行构建.打包.文档化等操作 解决了项目需要类库的依赖管理,简化了项目开发环境搭建 ...
- innodb分区
当 MySQL的总记录数超过了100万后,性能会大幅下降,可以采用分区方案 分区允许根据指定的规则,跨文件系统分配单个表的多个部分.表的不同部分在不同的位置被存储为单独的表. 1.先看下innodb的 ...
- phpcms 字符截取str_cut的使用
PHPCMS中截取字符串用的是 str_cut 系统函数,通常在输出标题或者是内容摘要的时候使用来限制字符串的字符,这样就可以防止因字符串而变成的页面变形等问题. 我们来看一下这个函数,在PHPCMS ...
- anaconda-ks.cfg详解
https://blog.csdn.net/whyhonest/article/details/7555229
- oop思维意识,类 模块命名空间,类扩展之继承 、组合、mixin三种模式
python的书都是讲怎么创建类怎么实例化对象,一般会用使用了,但还不具备这种编程意识.这是从python学习手册第四版节选出来的,书中说oop不仅是一种技术,更是一种经验.学习大神的看法,为什么需要 ...
- PHP缓存机制详解
一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ...