如何将视频从AVAssetExportSession保存到相机胶卷?

时间:2015-03-11 01:25:23

标签: ios swift

我有一些编辑视频的代码,然后创建一个AVAssetExportSession来保存编辑过的视频。我想将它保存到相机胶卷,但无法弄清楚NSURL是什么。

var session: AVAssetExportSession = AVAssetExportSession(asset: myasset, presetName: AVAssetExportPresetHighestQuality)
session.outputURL = ???
session.exportAsynchronouslyWithCompletionHandler(nil)

有谁知道如何确定将视频保存到相机胶卷的正确NSURL?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:11)

您只需使用session.outputURL = ...即可将视频直接保存到相机胶卷。您必须将视频保存到文件路径(临时或其他方式),然后使用writeVideoAtPathToSavedPhotosAlbum:将该网址上的视频写入您的相机胶卷,例如:

var exportPath: NSString = NSTemporaryDirectory().stringByAppendingFormat("/video.mov")
var exportUrl: NSURL = NSURL.fileURLWithPath(exportPath)!

var exporter = AVAssetExportSession(asset: myasset, presetName: AVAssetExportPresetHighestQuality)
exporter.outputURL = exportUrl

exporter.exportAsynchronouslyWithCompletionHandler({
    let library = ALAssetsLibrary()
    library.writeVideoAtPathToSavedPhotosAlbum(exportURL, completionBlock: { (assetURL:NSURL!, error:NSError?) -> Void in
        // ...
    })
})

答案 1 :(得分:5)

以下是 Swift 3 的清理答案,现在通过Photos框架保存到相册。

您需要同时导入AVFoundationPhotos才能生效。

func exportAsset(asset: AVAsset) {
    let exportPath = NSTemporaryDirectory().appendingFormat("/video.mov")
    let exportURL = URL(fileURLWithPath: exportPath)

    let exporter = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality)
    exporter?.outputURL = exportURL

    exporter?.exportAsynchronously(completionHandler: {
        PHPhotoLibrary.shared().performChanges({
            PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: exportURL)
        }) { saved, error in
            if saved {
                print("Saved")
            }
        }
    })
}