一、使用KVC的方式
PHAssetResource * resource = [[PHAssetResource assetResourcesForAsset: videoModel.asset] firstObject];
// file:///var/mobile/Media/DCIM/165APPLE/IMG_5225.MOV
NSString *tempPrivateFileURL = [resource valueForKey:@"privateFileURL"];
// IMG_5225.MOV
NSString * tempFilename = resource.originalFilename;
二、使用PHImageManager的方式
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHImageRequestOptionsVersionCurrent;
options.deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic;
PHImageManager *manager = [PHImageManager defaultManager];
// 这三个方法都能拿到文件的路径
// 1.Playback only. The result handler is called on an arbitrary queue.
[manager requestPlayerItemForVideo:videoModel.asset options:options resultHandler:^(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info) {
AVURLAsset *urlAsset = (AVURLAsset *)playerItem.asset;
// file:///var/mobile/Media/DCIM/165APPLE/IMG_5225.MOV
NSURL *url = urlAsset.URL;
}];
// 2.Export. The result handler is called on an arbitrary queue.
[manager requestExportSessionForVideo:videoModel.asset options:options exportPreset:AVAssetExportPreset960x540 resultHandler:^(AVAssetExportSession * _Nullable exportSession, NSDictionary * _Nullable info) {
AVURLAsset *urlAsset = (AVURLAsset *)exportSession.asset;
// file:///var/mobile/Media/DCIM/165APPLE/IMG_5225.MOV
NSURL *url = urlAsset.URL;
}];
// 3.Everything else. The result handler is called on an arbitrary queue.
[manager requestAVAssetForVideo:videoModel.asset options:options resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
AVURLAsset *urlAsset = (AVURLAsset *)asset;
// file:///var/mobile/Media/DCIM/165APPLE/IMG_5225.MOV
NSURL *url = urlAsset.URL;
}];