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



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

我成功地创建了AVAsset录音文件并使用SCPlayer的第三方类播放它。

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

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

请帮忙...

您可以执行以下操作:

  1. 使用AVAssetExportSessionAVAsset对象导出到文件路径网址。
  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. 不要忘记在
  4. 执行任何您需要处理它的事情后清理输出文件;)

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
}];

相关内容

最新更新