我正在尝试使用AVAsset
来录制音频文件,然后首先将其存储在NSFileManager
之后,然后将其转换为nsdata i Call API来存储它。
我成功创建AVAsset
录制文件并使用SCPlayer
的第三方类播放。
现在的问题是,我不知道如何使用AVAsset
文件将其保存在文件管理器中,然后在调用API后通过将其转换为NSData
来发送它。
有没有办法将AVAsset
转换为NSData
???
请帮助......
答案 0 :(得分:22)
您可以执行以下操作:
AVAssetExportSession
将AVAsset
对象导出到文件
路径网址。使用NSData
将其转换为dataWithContentsOfURL
方法
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.");
}];
在做完所需的任何事情后,不要忘记清理输出文件;)
答案 1 :(得分:5)
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
}
})
答案 2 :(得分:3)
您可以查看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
}];