视频修剪因块AVAssetExportSessionStatus.Failed失败

时间:2015-07-01 13:41:40

标签: iphone swift video trim

我已将this代码转换为Swift语言,但我得到了这个

  

错误:错误域= AVFoundationErrorDomain代码= -11800“操作无法完成”UserInfo = 0x174278600 {NSUnderlyingError = 0x170241d10“操作无法完成。(OSStatus error -12780。)”,NSLocalizedFailureReason =未知发生错误(-12780),NSLocalizedDescription =操作无法完成}(例如AVAssetExportSessionStatus.Failed)。

请帮我解决这个问题

func cropVideo(sourceURL: NSURL)
    {
        let asset = AVURLAsset(URL: sourceURL, options: nil)

        let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality)
                var error : NSError?
   let file = "Finaloutput.mp4"
     /*   let paths : AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0]
        let outputURL1 = paths[0] as? String*/
        let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
        let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
        let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)

        let outputURL1 = paths[0] as? String

        let filemgr = NSFileManager.defaultManager()
        filemgr.createDirectoryAtPath(outputURL1!, withIntermediateDirectories: true, attributes: nil, error: &error)
        var outputURL = outputURL1!.stringByAppendingPathComponent(file)
        filemgr.removeItemAtPath(outputURL, error: &error)

        let FinalUrlTosave = NSURL(string: outputURL)
        exportSession.outputURL=FinalUrlTosave
        exportSession.shouldOptimizeForNetworkUse = true
        // exportSession.outputFileType = AVFileTypeQuickTimeMovie
        exportSession.outputFileType = AVFileTypeQuickTimeMovie;
        let start:CMTime
        let duration:CMTime
         start = CMTimeMakeWithSeconds(1.0, 600)
         duration = CMTimeMakeWithSeconds(19.0, 600)
        // let timeRangeForCurrentSlice = CMTimeRangeMake(start, duration)
        let range = CMTimeRangeMake(start, duration);
        exportSession.timeRange = range

        let destinationURL1 = NSURL(string: outputURL)

        exportSession.exportAsynchronouslyWithCompletionHandler({
            switch exportSession.status{
            case  AVAssetExportSessionStatus.Failed:

                println("failed \(exportSession.error)")
            case AVAssetExportSessionStatus.Cancelled:
                println("cancelled \(exportSession.error)")
            default:
                println("complete....complete")
                self.SaveVideoToPhotoLibrary(destinationURL1!)

            }
        })
    }
  func SaveVideoToPhotoLibrary(outputFileURL: NSURL)

    {


        assetsLibrary = ALAssetsLibrary()

        let videoURL = outputFileURL as NSURL?

        if let library = assetsLibrary{

            if let url = videoURL{

                library.writeVideoAtPathToSavedPhotosAlbum(url,
                    completionBlock: {(url: NSURL!, error: NSError!) in

                        print(url)

                        if let theError = error{
                            print("Error happened while saving the video")
                            print("The error is = \(theError)")
                        } else {
                            print("no errors happened")
                        }

                })
            } else {
                print("Could not find the video in the app bundle")
            }

        }


    }

1 个答案:

答案 0 :(得分:1)

找到解决方案: 我改变了这一行,它对我有用

 let FinalUrlTosave = NSURL(fileURLWithPath: outputURL)

而不是

let FinalUrlTosave = NSURL(string: outputURL)

我没有得到确切的路径。