如何使用PHAsset从文件中获取NSData

时间:2016-02-26 12:45:11

标签: ios file nsurl phasset

我在路径

处有档案
NSError *error;
NSData *data = [NSData dataWithContentsOfFile:assetUrl.relativePath options:NSDataReadingMappedAlways error:&error];

但是当我尝试这段代码时 -

PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[assetUrl] options:nil];

我什么都没有,只有错误:

  

错误域= NSCocoaErrorDomain代码= 257“Неудалосьзавершить   операцию。 (Cocoa,ошибка257)“UserInfo = 0x175a61380   {NSFilePath =的/ var /移动/媒体/ DCIM / 100APPLE / IMG_0197.mov,   NSUnderlyingError = 0x17424e550“Неудалосьзавершитьоперацию。   不允许操作“}

文件存在,但我看不懂。

但同时AVPlayer通常会播放视频文件。

我试过

<strong>

但我没有得到任何结果。

2 个答案:

答案 0 :(得分:8)

您无法直接访问NSURL,因为文件位于应用沙盒之外。某些框架(如AVPlayer)具有异常授权,可以访问URL。 要访问PHAsset个对象的数据,请查看PHImageManager的以下方法:

对于图片:requestImageDataForAsset

视频:requestExportSessionForVideo

答案 1 :(得分:3)

对我来说,帮助了以下代码。使用__table__代替relativePath非常重要。

absoluteString

Swift 3版本: -

    [[PHImageManager defaultManager] requestAVAssetForVideo:videoContent options:options resultHandler:^(AVAsset* avasset, AVAudioMix* audioMix, NSDictionary* info){
                AVURLAsset* myAsset = (AVURLAsset*)avasset;
                NSData * data = [NSData dataWithContentsOfFile:myAsset.URL.relativePath];       
                if (data) {
                }
    }];