用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]; } }];
希望这可以帮助。