2016-12-20 2 views
1

У меня есть файл на путиПолучить NSData для видео файла с NSURL

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

и я хочу, чтобы получить NSData этого файла, но я получил ошибку

Ошибка домена = NSCocoaErrorDomain Code = 257 « файл «IMG_0292.MOV» не может быть открыт, потому что у вас нет разрешения на его просмотр ». UserInfo = {NSFilePath =/вар/мобильного/СМИ/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.

+0

Вы просили разрешения на доступ к библиотеке фотографий? – Kuba

+0

Да, да. разрешение – Ossir

+0

@Ossir делает параметры как nil и попробуйте его –

ответ

2

Вы не можете напрямую обращаться к URL-адресам, которые не находятся в изолированной программной среде приложений (за некоторыми исключениями). Чтобы получить данные для видео файла, пожалуйста, обратите внимание на следующие методах:

Для прошивки 9 или выше использовать следующий метод PHAssetResource:

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

Для прошивки 8 или выше:

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

Затем прочтите NSData экспортируемого URL.

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

    }]; 

Надеется, что это помогает.

Смежные вопросы