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

8

我有一些编辑视频的代码,并创建了一个AVAssetExportSession,以便将编辑后的视频保存到某个地方。我想将它保存到相册中,但无法确定相册的NSURL是什么。

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

有人知道如何确定正确的NSURL以将视频保存到相机胶卷吗?感谢您提前的帮助。

2个回答

14

使用 session.outputURL = ... 无法将视频直接保存到相机胶卷。您需要将视频保存到文件路径(临时或其他方式),然后使用writeVideoAtPathToSavedPhotosAlbum:将该URL处的视频写入到相机胶卷中,例如:

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
谢谢Lyndsey!完美。 - Brad
@LyndseyIsDo,你有没有想过如何更改所选视频的分辨率?我需要使用AVAssetExportPreset1280x720吗? - user2786

9
这里是一份针对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")
            }
        }
    })
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接