提问者:小点点

使用NSUrl获取视频文件的NSData


我在路径上有文件

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

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

Error domain=nscocoaerrordomain code=257“无法打开IMG_0292.mov文件,因为您没有查看该文件得权限。”UserInfo=nsFilePath=/var/mobile/media/dcim/100apple/img_0292.mov,NsUnderlyingError=0x178C9F90 Error Domain=nsPosixErrordomain Code=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个答案

匿名用户

你不能直接访问URL不在你的应用程序沙箱(没有几个例外)。要获取视频文件的数据,请看一下以下方法:

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

    }];

希望这能帮上忙。