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 ...
随机推荐
- android手机内的通讯录数据库
今天看了一下 android手机内的通讯录数据库,简单的汇总了一下. 数据库见附件中的contacts2.db , 里面一共有40个表,34个视图,很庞大,挑几个重点的看一下. 1.表Raw_cont ...
- MathType怎么编辑半开半闭区间
数学中的公式有很多,涉及到各种各样的样式,这些公式都会用到不同的符号,每一个符号用在不同数学问题的公式中,都会有其特定的意义,比如括号.括号这个符号在除了能够表示优先运算之外,还可以代表区间的意思,小 ...
- phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- Sublime text2插件
Sublime插件: Sublime有好几种安装插件的方法,但是最好用也是最长用的是ctrl+shift+p. 第一步: 使用ctrl+` 调出Sublime控制台,在控制台中输入 import ur ...
- PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEvent 出现 NullPointerException【转载】
PopupWindow错误:PopupWindow$1.onScrollChanged 出现 NullPointerException和PopupViewContainer.dispatchKeyEv ...
- MyBatis 支持的扩展点(version:3.2.7)
从 [MyBatis 原码解析(version:3.2.7)] 中,我们得知,MyBatis去执行SQL都是通过 DefaultSqlSession 中的工具方法去执行的. 那么问题来了,MyBati ...
- 利用广播实现ip拨号——示例
1.创建activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- informix中的时间计算
今天看SUN服务器是的mail(vi /var/mail/xxxuser),发现定时任务上的一些存储过程执行有错误,其中有一个错误是long transaction,长事务错误,到数据库一查,天哪 ...
- [SecureCRT] 解决 securecrt failed to open the host key database file 的问题
SecureCRT 在 Windows XP 和 Windows 7 中的个人应用数据路径是不同的,在 Windows 7 中,应用数据路径为:C:\Users\<username>\Ap ...
- Push rejected: Push master to origin/master was rejected /failed to push some refs to /git did not exit cleanly
用studio提交代码报 Push rejected: Push master to origin/master was rejected 用TortiuseGit提交代码报下面错,(我是用这种方法解 ...