iOS通过PHAsset/MediaPlayer获取本地照片、视频、音频学习总结

您所在的位置:网站首页 mamamo歌曲资源 iOS通过PHAsset/MediaPlayer获取本地照片、视频、音频学习总结

iOS通过PHAsset/MediaPlayer获取本地照片、视频、音频学习总结

#iOS通过PHAsset/MediaPlayer获取本地照片、视频、音频学习总结| 来源: 网络整理| 查看: 265

背景介绍

需求:获取并展示iOS设备内存储的图片、音频、视频环境:Xcode10库:PHPhotos.h,MediaPlayer

说明:设备内图片来自于相册,视频来自于相册和媒体库,音频来于自媒体库。

头文件引用:

#import 一、获取本地图片、音频、视频第一步:判断相册权限,遍历相册资源

1.判断相册权限

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { //status == PHAuthorizationStatusDenied 用户已经明确否认了权限的访问 //status == PHAuthorizationStatusRestricted 此应用程序没有被授权访问的照片数据。可能是家长控制权限 //status == PHAuthorizationStatusNotDetermined 用户尚未做出选择这个应用程序的问候 //status == PHAuthorizationStatusAuthorized 用户已经授权应用访问照片数据 }]; 第二步:如果有访问权限,则遍历相册资源

1.如果想获取系统创建的相册:

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

如果想获取自定义的相册:

PHFetchResult *albums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

如果二者都要,则要分别获取以上两类相册,再分别遍历;

2.遍历相册里的资源,即图片或视频

for (PHAssetCollection *collection in smartAlbums) { //遍历获取相册 if ([collection numberOfAssets] > 0) { //获取当前相册里所有的PHAsset,也就是图片或者视频 PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; for (NSInteger j = 0; j < fetchResult.count; j++) { //从相册中取出照片 asset = fetchResult[j]; if (assediaType == PHAssetMediaTypeImage) { //得到一个图片类型资源 }else if (assediaType == PHAssetMediaTypeVideo) { //得到一个视频类型资源 }else if (assediaType == PHAssetMediaTypeAudio) { //音频,PHAsset的mediaType属性有三个枚举值,笔者对PHAssetMediaTypeAudio暂时没有进行处理 } } } }

【相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】

音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

第三步.遍历媒体库中的视频和音频

1.遍历媒体库中的音频;媒体库中的音频一般为音乐,可以获取专辑列表,也可以获取音频列表,下面获取的是音频列表,

- (void)browseMPMediaAudio { NSArray *collections = [[MPMediaQuery songsQuery] collections]; NSMutableArray *musics = [NSMutableArray array]; for (MPMediaItemCollection *collection in collections) { //每个collection是一个专辑,专辑里包含若干个音频 for (MPMediaItem *item in [collection items]) { //每个item就是一个音频 } } }

2.遍历媒体库中的视频,

- (void)browseMPMediaVideo:(void(^)(NSArray *))videoBlock { MPMediaPropertyPredicate *filterPre = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeAnyVideo] forProperty:MPMediaItemPropertyMediaType]; MPMediaQuery *query = [[MPMediaQuery alloc] init]; [query addFilterPredicate:filterPre]; NSMutableArray *temp = [NSMutableArray arrayWithCapacity:0]; for (MPMediaItem *item in [query items]) { //每个item就是一个视频 } }

通过以上三步,便可以获取到iOS设备本地存储的图片、音频、视频。在获取成功之后,便需要展示这些资源了。

二、展示图片,播放音频和视频

1.相册里的图片、视频

注意:有的iPhone用户会将相册里的文件备份到iCloud上(可以在“设置”里查看“使用iCloud的应用“,”照片“开关是否打开),这时要想获取图片文件或播放视频,就需要通过网络从iCloud上拉取,代码里的networkAccessAllowed一定要设置为YES,

获取图片和视频的缩略图都可以用下面的方法

PHImageRequestOptions *opt = [[PHImageRequestOptions alloc]init]; opt.networkAccessAllowed = YES; opt.resizeMode = PHImageRequestOptionsResizeModeExact; //targetSize可以设置为你想要的大小 [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:imageSize contentMode:PHImageContentModeDefault options:opt resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { //如果没写opt.networkAccessAllowed = YES;,这里得到的result==nil }];

播放相册里的视频使用AVPlayer即可,播放之前要先获取视频,networkAccessAllowed 也要设置为YES

PHVideoRequestOptions *option = [[PHVideoRequestOptions alloc] init]; option.networkAccessAllowed = YES; option.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *info) { dispatch_async(dispatch_get_main_queue(), ^{ if (progressHandler) { progressHandler(progress, error, stop, info); } }); }; [[PHImageManager defaultManager] requestPlayerItemForVideo:asset options:option resultHandler:^(AVPlayerItem *playerItem, NSDictionary *info) { //获取到的可以用于播放的视频playerItem }];

2.播放媒体库里的视频和音频

播放媒体库的视频和视频,可以通过获取MPMediaItem对象的地址,再用AVPlayer播放

NSString* filePath = [[mediaItem valueForProperty:MPMediaItemPropertyAssetURL] absoluteString];

注意:以上获取资源的过程都应放在子线程操作

原文链接:iOS通过PHAsset/MediaPlayer获取本地照片、视频、音频学习总结_ios 根据phasset 加载视频_土豆橙的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3