【问题标题】:How to save a video from AVAssetExportSession to Camera Roll?如何将视频从 AVAssetExportSession 保存到相机胶卷?
【发布时间】:2015-05-12 16:15:58
【问题描述】:

我有一些代码可以编辑视频,然后创建 AVAssetExportSession 以将编辑后的视频保存在某处。我想将它保存到相机胶卷中,但不知道它的 NSURL 是什么。

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

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

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您不能仅使用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
            // ...
        })
    })
    

    【讨论】:

    • 谢谢林赛!完美。
    • @LyndseyIs您知道更改所选视频的分辨率吗?我是否需要使用 AVAssetExportPreset1280x720..
    【解决方案2】:

    这是 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")
                }
            }
        })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-01
      • 2015-01-06
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2015-09-25
      相关资源
      最近更新 更多