多媒体 -获取本地图片和视频文件

前言

很多自定义播放器,和自定义多选相册的图片都是需要先获取系统图片库中的所有图片资源或者视屏资源 ,所使用的核心方法就是AssetsLibrary框架里的ALAssetsLibrary。

事先准备

  • 导入系统类库

导入系统库.png

  • 封装一个实体model类 #import <AssetsLibrary/AssetsLibrary.h> @interface AlbumVideoInfo : NSObject @property(nonatomic, copy) NSString *name; @property(nonatomic, assign) long long size; //Bytes @property(nonatomic, strong) NSNumber *duration; @property(nonatomic, copy) NSString *format; @property(nonatomic, strong) UIImage *thumbnail; @property (nonatomic, strong) NSURL *videoURL; @end @implementation AlbumVideoInfo @end

取本地视屏资料 、播放:

{
    _albumVideoInfos = [[NSMutableArray alloc]initWithCapacity:0];
    [self loadVideos];
 }

- (void)loadVideos{

ALAssetsLibrary *library1 = [[ALAssetsLibrary alloc] init];
[library1 enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    if (group) {

       #获取所有video资源,当然也可以获取所有图片资源,本地语音备忘录中的语音是无法获取的,
       #曾经努力了很久也无法获得,如果知道怎么获取的朋友,一定要告诉我下,多谢。
        [group setAssetsFilter:[ALAssetsFilter allVideos]];
        [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            
            if (result) {
                AlbumVideoInfo *videoInfo = [[AlbumVideoInfo alloc] init];
                #视屏的封页图片
                videoInfo.thumbnail = [UIImage imageWithCGImage:result.thumbnail];
                videoInfo.videoURL = result.defaultRepresentation.url;
                #视频的时长
                videoInfo.duration = [result valueForProperty:ALAssetPropertyDuration];
                videoInfo.name = [self getFormatedDateStringOfDate:[result valueForProperty:ALAssetPropertyDate]];
                videoInfo.size = result.defaultRepresentation.size; //Bytes
                videoInfo.format = [result.defaultRepresentation.filename pathExtension];
                [_albumVideoInfos addObject:videoInfo];
            }
        }];
    } else {
        //没有更多的group时,即可认为已经加载完成。
        NSLog(@"after load, the total alumvideo count is %ld",_albumVideoInfos.count);
        for (int i = 0; i<_albumVideoInfos.count; i++) {
            AlbumVideoInfo *videoInfo = _albumVideoInfos[i];
            NSLog(@"%@ ",videoInfo.duration);
            BaitiaoImageV.image = videoInfo.thumbnail;
        }
        dispatch_async(dispatch_get_main_queue(), ^{
  //                [self showAlbumVideos];
        });
    }
    
} failureBlock:^(NSError *error) {
    NSLog(@"Failed.");
}];
}

//将创建日期作为文件名
-(NSString*)getFormatedDateStringOfDate:(NSDate*)date{
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
    [dateFormatter setDateFormat:@"yyyyMMddHHmmss"]; //注意时间的格式:MM表示月份,mm表示分钟,HH用24小时制,小hh是12小时制。
    NSString* dateString = [dateFormatter stringFromDate:date];
    return dateString;
}


由于相册视频不能获取到绝对地址,故使用系统自带的MPMoviePlayerController,进行播放

 if (!_moviePlayer) { 
  _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:albumVideoInfo.videoURL];
 }
else{ [_moviePlayer setContentURL:albumVideoInfo.videoURL];
}

获得所有系统资源后,就可以实现自己的自定义效果啦

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程之旅

iOS 全局禁止横屏,但视频播放界面选择性横屏的解决办法

有时我们的APP并没有适配横屏的需求,但是在个别视频播放界面,我们需要在播放视频的时候横屏,退出全屏的时候不能横屏,但是有时候并没有原生API并没有给出解决方案...

5502
来自专栏Python疯子

iOS 单选按钮组--只能而且必选一个按钮

2、初始化并默认一个选项,这里用了4个button,实际可以采用2个,因为写一半才发现后面的汉字也要设置成可点的,就懒得改了,直接改成button了

5222
来自专栏哈雷彗星撞地球

iOS 中如何判断当前是2G/3G/4G/5G/WiFi

5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了。 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如...

2342
来自专栏wym

方块处理(2) ---十天教会你俄罗斯方块

UINT_PTR SetTimer(HWND hWnd,UINT_PTR nlDEvent,

911
来自专栏技术之路

【swift学习笔记】六.访facebook登录页面

代码最下边有下载地址。 做这个demo的主要心得就是自适应所有的屏幕,要先布局大的框架,再一步一步设置小的细节。 看一下效果 ? 再看一下自动适应所有屏幕的效果...

2438
来自专栏coding...

Objective-C MapKit的使用-LBS简单的租车主界面demo效果分析代码demo地址

https://github.com/gongxiaokai/EasyCarDemo

1704
来自专栏iOS开发攻城狮的集散地

iOS AVPlayer视频播放器

7504
来自专栏技术总结

DWIntrosPage 简单定制引导页

下面摘取部分代码 DWIntrosPageContentViewController

1375
来自专栏飞扬的花生

可以添加自定义的Select控件

1.控件dom <select name="WebSiteTarget" id="WebSiteTarget" class="w1" onchange="edi...

2338
来自专栏iOS122-移动混合开发研究院

实现iOS图片等资源文件的热更新化(二):自定义的动态 imageNamed

这篇文章,要解决的是,使用一个自定义的 imageNamed 函数来替代系统的 imageNamed 函数.内部逻辑,将贯穿对比论证 关于"合适"的图片的定义....

2136

扫码关注云+社区

领取腾讯云代金券