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

Dha*_*ana 14 iphone objective-c nsdata ios

我正在尝试使用AVAsset录制音频文件然后在我将其存储在NSFileManager之后,之后将其转换为nsdata i Call API来存储它.

我成功创建AVAsset录制文件并使用第三方类播放SCPlayer.

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

有什么办法可以转换AVAssetNSData???

请帮忙...

its*_*rof 23

您可以执行以下操作:

  1. 使用AVAssetExportSession您的出口AVAsset对象的文件路径URL.
  2. 将其转换为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.");
    }];
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在做完所需的任何事情后,不要忘记清理输出文件;)


小智 6

斯威夫特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
                }
            })
Run Code Online (Sandbox Code Playgroud)