iOS获取音频的专辑图与视频的缩略图

在制作音频播放器的时候,显示专辑图、艺术家、歌曲名等可能首先想到的是用字典封装。但实际上,音频文件中封装了这些数据,所以直接从mp3等文件中读取出来就可以了。而视频,系统的播放器类是没有缩略图显示的,需要自己读取。本文将讲解,如何获取音频和视频图片。

环境信息:

Mac OS X 10.9

Xcode:5.1.1

IOS 7.1.1

正文:

导入框架:

AVFoundation.framework

CoreMedia.framework

MediaPlayer.framework

一. 获取音频文件中的专辑图片

/**
  *  通过音乐地址,读取音乐数据,获得图片
  * 
  *  @param url 音乐地址 
  * 
  *  @return音乐图片
*/ 
- (UIImage *)musicImageWithMusicURL:(NSURL *)url {
       NSData *data = nil;
       // 初始化媒体文件
       AVURLAsset *mp3Asset = [AVURLAsset URLAssetWithURL:url options:nil];
       // 读取文件中的数据
       for (NSString *format in [mp3Asset availableMetadataFormats]) { 
             for (AVMetadataItem *metadataItem in [mp3Asset metadataForFormat:format]) {
                  //artwork这个key对应的value里面存的就是封面缩略图,其它key可以取出其它摘要信息,例如title - 标题
                  if ([metadataItem.commonKey isEqualToString:@"artwork"]) {
                       data = [(NSDictionary*)metadataItem.value objectForKey:@"data"];
                       break;
                  }
             }
       }
       if (!data) { 
            // 如果音乐没有图片,就返回默认图片
            return [UIImage imageNamed:@"default"];
       }
       return [UIImage imageWithData:data];
}

当然,除了获取图片(data),还可以获取很多信息。如果有需要,可以NSLog以下这个集合,就知道了。

二. 视频首帧缩略图

/** 
*  通过视频的URL,获得视频缩略图
* 
*  @param url 视频URL 
* 
*  @return首帧缩略图 
*/ 
- (UIImage *)imageWithMediaURL:(NSURL *)url {
      NSDictionary *opts = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] 
                                                       forKey:AVURLAssetPreferPreciseDurationAndTimingKey]; 
      // 初始化媒体文件
      AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:url options:opts];
      // 根据asset构造一张图
      AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:urlAsset];
      // 设定缩略图的方向
      // 如果不设定,可能会在视频旋转90/180/270°时,获取到的缩略图是被旋转过的,而不是正向的(自己的理解)
      generator.appliesPreferredTrackTransform = YES;
      // 设置图片的最大size(分辨率)
      generator.maximumSize = CGSizeMake(600, 450);
      // 初始化error
      NSError *error = nil;
      // 根据时间,获得第N帧的图片
      // CMTimeMake(a, b)可以理解为获得第a/b秒的frame
      CGImageRef img = [generator copyCGImageAtTime:CMTimeMake(0, 10000) actualTime:NULL error:&error];
      // 构造图片
      UIImage *image = [UIImage imageWithCGImage: img];
      return image; 
}

对于读视频首帧缩略图这个程序,有几个配置是按照自己理解来写的注释,所以为了准确性,下面我将苹果官方的解释和stakoverflow上的一些解释贴出来,大家综合参考。


自己根据上面的描述做了一个列子

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    self.view.backgroundColor = [UIColor whiteColor];

    

    UIImageView * firstFrameImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetWidth(self.view.frame)/4 * 3)];

    [self.view addSubview:firstFrameImageView];

    NSURL * url = [NSURL URLWithString:@"http://192.168.1.188:8090/iGolf/uploadfiles/51124431.mp4"];

    UIImage * image = [self imageWithMediaURL:url];

    firstFrameImageView.image = image;

    

}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值