2016-12-20 87 views
1

我在路獲取NSData的視頻文件,NSURL

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。

+0

你是否要求訪問照片庫的權限? – Kuba

+0

是的,我願意。准許的許可 – Ossir

+0

@Ossir將選項設置爲零並嘗試 –

回答

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。

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

    }]; 

希望這有助於。