问题
I am trying to do that using AVAsset
to record Audio file and then after first i store it on NSFileManager
and after that by convert it to nsdata i Call API to store it.
I am successful to Create AVAsset
recording file and play it using third party Class that is SCPlayer
.
Now problem is that i don't know how to Use AVAsset
file for save it in file manager and then after call API to sent it by converting it to NSData
.
Is any way to convert AVAsset
to NSData
???
Please Help...
回答1:
You can do the following:
- Use
AVAssetExportSession
to export yourAVAsset
object to a file path URL. Convert it to
NSData
using itsdataWithContentsOfURL
method.NSURL *fileURL = nil; __block NSData *assetData = nil; // asset is you AVAsset object AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; exportSession.outputURL = fileURL; // e.g .mov type exportSession.outputFileType = AVFileTypeQuickTimeMovie; [exportSession exportAsynchronouslyWithCompletionHandler:^{ assetData = [NSData dataWithContentsOfURL:fileURL]; NSLog(@"AVAsset saved to NSData."); }];
Don't forget to clean up the output file after doing whatever you need to do with it ;)
回答2:
Swift 3
let manager = PHImageManager.default()
manager.requestAVAsset(forVideo: asset, options: nil, resultHandler: { (avasset, audio, info) in
if let avassetURL = avasset as? AVURLAsset {
guard let video = try? Data(contentsOf: avassetURL.url) else {
return
}
videoData = video
}
})
回答3:
You could have a look at AVAssetExportSession
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL = exportUrl;
[exporter exportAsynchronouslyWithCompletionHandler:^{
// here your file will be saved into file system at specified exportUrl
}];
来源:https://stackoverflow.com/questions/28237412/how-to-convert-avasset-to-nsdata-or-save-it-to-file-manager