如何将AVAsset转换为NSData或将其保存到文件pipe理器

我正在尝试使用AVAsset来录制audio文件,然后第一次存储在NSFileManager之后,然后将其转换为nsdata我调用API来存储它。

我成功创buildAVAsset录音文件,并使用SCPlayer第三方Class进行SCPlayer

现在的问题是,我不知道如何使用AVAsset文件保存在文件pipe理器,然后调用API后,通过将其转换为NSData发送它。

有什么办法将AVAsset转换为NSData

请帮忙…

您可以执行以下操作:

  1. 使用AVAssetExportSession将您的AVAsset对象导出到文件pathURL。
  2. 使用其dataWithContentsOfURL方法将其转换为NSData

     NSURL *fileURL = nil; __block NSData *assetData = nil; // asset is you AVAsset object AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality]; exportSession.outputURL = fileURL; // eg .mov type exportSession.outputFileType = AVFileTypeQuickTimeMovie; [exportSession exportAsynchronouslyWithCompletionHandler:^{ assetData = [NSData dataWithContentsOfURL:fileURL]; NSLog(@"AVAsset saved to NSData."); }]; 
  3. 不要忘了在做任何事情之后清理输出文件;)

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 } }) 

你可以看看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 }];