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

How to convert AVAsset to NSData or save it to file manager

我正在尝试使用 AVAsset 来录制音频文件,然后首先将其存储在 NSFileManager 上,然后将其转换为 nsdata 我调用 API 到存储它。

我成功创建 AVAsset 录音文件并使用第三方 Class 播放它,即 SCPlayer

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

有什么方法可以将AVAsset转换成NSData???

请帮忙...

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

您可以执行以下操作:

  1. 使用 AVAssetExportSession 将您的 AVAsset 对象导出到文件 路径 URL.
  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;
    // e.g .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
                }
            })