使用 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];
}
}];
希望对您有所帮助。
我有文件在路径
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];
}
}];
希望对您有所帮助。