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 ...
随机推荐
- Java学习之——JavaBeans
1.什么是JavaBeans? JavaBeans是Java语言中可以重复使用的软件组件,它们是一种特殊的Java类,将很多的对象封装到了一个对象(bean)中.特点是 可序列化, 提供无参构造器, ...
- vue-cli生成的项目配置开发和生产环境不同的接口
vue-cli生成的项目,vue项目配置了不同开发环境的接口地址,axios.defaults.baseURL如何引用这个地址,这是在我发布项目的时候考虑的,于是想到了 方法一: config下配置文 ...
- windows2008 使用nginx 反向代理实现负载均衡解决HTTPS 证书问题
由于项目需要 负载均衡由NBL 转成nginx 反向代理.考虑都是https模块,所以证书成了个难题. 解决方案: 1.下载openssl(windows 安装包) 2.打开bin/下面的openss ...
- 源码分析五(HashSet的内部实现)
一:首先来看看Hashset的继承体系 public class HashSet<E> extends AbstractSet<E> implements Set<E&g ...
- uploadify在火狐下上传不了的解决方式,java版(Spring+SpringMVC+MyBatis)具体解决方式
因为技术选型的原因,在一个产品中.我选择了uploadify,选择它的原因是它有完好的技术文档说明(http://www.uploadify.com/documentation/),唯一不足的是 ...
- Linux+Redis实战教程_day01_常用命令【重点】
3.常用命令[重点] Linux命令中参数,一般都是无序的.特殊情况下除外 3.1.磁盘管理命令 ls命令:列出目录内容 参数: -a 查询所有文件和文件夹.包含隐藏的 -l 查询详细列表 ls ...
- mongodb 搭建主从服务器
mongodb 主从配置比较简单,只需要在启动的时候添加参数(-master.-slave -source IP:PORT). Ubuntu 16.04 系统环境 监听端口分别为:27010.2701 ...
- 8 -- 深入使用Spring -- 1...4 属性占位符配置器
8.1.4 属性占位符配置器 PropertyPlaceholderConfigurer 是一个容器后处理器,负责读取Properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的 ...
- Android开发-- findViewById()方法得到空指针
如果想通过调用findViewById()方法获取到相应的控件,必须要求当前Activity的layout通过setContentView. 如果你通过其他方法添加了一个layout,如需获取这个la ...
- Ajax 分析方法
我们如何查看到 Ajax 请求: 以 https://m.weibo.cn/u/2830678474 这个网页为例,按 F12,加载网页,然后选择资源类型为 XHR 的就可以看到 Ajax 请求了 我 ...