使用NSUrl获取NSData的视频文件

时间:2016-12-20 10:01:30

标签: ios xcode nsdata phasset

我在路径

处有档案
var/mobile/Media/DCIM/100APPLE/IMG_0292.MOV

我想得到这个文件的NSData,但是我收到了错误

  

错误域= NSCocoaErrorDomain代码= 257"文件“IMG_0292.MOV”   由于您无权查看,因此无法打开。"   的UserInfo = {NSFilePath =的/ var /移动/媒体/ DCIM / 100APPLE / IMG_0292.MOV,   NSUnderlyingError = 0x178c9f90 {错误域= NSPOSIXErrorDomain代码= 1   "不允许操作"}}

我试过

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

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

没有运气。

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

2 个答案:

答案 0 :(得分:2)

您无法直接访问不在应用沙箱中的网址(没有少数例外)。 要获取视频文件的数据,请查看以下方法:

对于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。

答案 1 :(得分:0)

为了完成起见..这对我有用:

    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];
        }

    }];

希望这有帮助。