使用 NSUrl 获取视频文件的 NSData

Get NSData for video file with NSUrl

我有文件在路径

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

我想获取此文件的 NSData 但出现错误

Error Domain=NSCocoaErrorDomain Code=257 "The file “IMG_0292.MOV” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/var/mobile/Media/DCIM/100APPLE/IMG_0292.MOV, NSUnderlyingError=0x178c9f90 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

我试过

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。

您无法直接访问不在您的应用程序沙盒中的 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;

然后读取导出的NSData URL.

只是为了完成..这对我有用:

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

    }];

希望对您有所帮助。