用NSUrl获取video文件的NSData

我有path文件

var/mobile/Media/DCIM/100APPLE/IMG_0292.MOV 

我想获得这个文件的NSData,但我得到错误

错误域= NSCocoaErrorDomain代码= 257“文件”IMG_0292.MOV“无法打开,因为您没有权限查看它。 UserInfo = {NSFilePath = / var / mobile / Media / DCIM / 100APPLE / IMG_0292.MOV,NSUnderlyingError = 0x178c9f90 {Error Domain = NSPOSIXErrorDomain Code = 1“Operation not permitted”}}

我试着用

 NSError *error; NSData *videoData = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedAlways error:&error]; 

 NSError* error = nil; NSData* data = [NSData dataWithContentsOfURL:fileURL options:NSDataReadingUncached error:&error]; 

没有运气。

我也有PHAsset的video文件,但不知道如何从中获取NSData。 请帮我拿NSData。

您不能直接访问不在应用程序沙箱内的url(没有几个例外)。 要获取video文件的数据,请查看以下方法:

对于iOS 9或更高版本,请使用以下PHAssetResource方法:

 - (PHAssetResourceDataRequestID)requestDataForAssetResource:(PHAssetResource *)resource options:(PHAssetResourceRequestOptions *)options dataReceivedHandler:(void (^)(NSData *data))handlercompletionHandler:(void (^)(NSError *error))completionHandler; 

对于iOS 8或更高版本:

 - (PHImageRequestID)requestExportSessionForVideo:(PHAsset *)asset options:(PHVideoRequestOptions *)options exportPreset:(NSString *)exportPreset resultHandler:(void (^)(AVAssetExportSession *exportSession, NSDictionary *info))resultHandler; 

然后读取导出的URL的NSData。

为了完成的缘故..这对我有用:

  PHImageManager *manager = [PHImageManager defaultManager]; [manager requestAVAssetForVideo:asset.baseAsset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) { if([asset isKindOfClass:[AVURLAsset class]]){ //Get the url NSURL *url = [(AVURLAsset *)asset URL]; } }]; 

希望这可以帮助。