Obtenez NSData pour le file video avec NSUrl

J'ai un file au path

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

et je veux get NSData de ce file, mais j'ai eu une erreur

Error Domain = NSCocoaErrorDomain Code = 257 "Le file" IMG_0292.MOV "n'a pas pu être ouvert car vous n'êtes pas autorisé à le voir." UserInfo = {NSFilePath = / var / mobile / Media / DCIM / 100APPLE / IMG_0292.MOV, NSUnderlyingError = 0x178c9f90 {Domaine d'erreur = Code NSPOSIXErrorDomain = 1 "Opération non autorisée"}}

J'ai essayé avec

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

et

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

et pas de chance.

J'ai aussi PHAsset de file video, mais je ne sais pas comment get NSData de celui-ci. S'il vous plaît, aidez-moi à get NSData.

Vous ne pouvez pas accéder directement aux URL qui ne se trouvent pas dans le sandbox de votre application (à quelques exceptions près). Pour get datatables d'un file video, veuillez consulter les methods suivantes:

Pour iOS 9 ou supérieur, utilisez la méthode suivante de PHAssetResource:

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

Pour iOS 8 ou supérieur:

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

Lisez ensuite le NSData de l'URL exscope.

Juste pour l'amour de l'achèvement .. Cela a fonctionné pour moi:

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

J'espère que cela t'aides.