2015-03-11 6 views
6

मैं कुछ कोड है कि एक वीडियो को संपादित करता है, और फिर संपादित वीडियो कहीं बचाने के लिए एक AVAssetExportSession पैदा करता है। मैं कैमरा रोल करने के लिए इसे बचाने के लिए चाहते हैं, लेकिन समझ नहीं क्या उसके लिए NSURL है।कैसे कैमरा रोल में AVAssetExportSession से एक वीडियो को बचाने के लिए?

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

क्या कोई जानता है कि कैमरा रोल में वीडियो सहेजने के लिए सही NSURL कैसे निर्धारित किया जाए? आपकी सहायता के लिये पहले से ही धन्यवाद।

उत्तर

10

आप नहीं अपने वीडियो सीधे कैमरा रोल में बस 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

धन्यवाद Lyndsey! उत्तम। – Brad

3

यहाँ एक के लिए इस सवाल का जवाब साफ है स्विफ्ट 3 कि अब Photos ढांचे के माध्यम से एल्बम को बचाता है।

इस काम के लिए आपको AVFoundation और Photos दोनों आयात करने की आवश्यकता होगी।

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") 
      } 
     } 
    }) 
} 
संबंधित मुद्दे