AVAssetExportSession错误iOS8.1 Swift

时间:2015-03-06 02:05:18

标签: swift ios8.1 avassetexportsession

我想使用下面的代码为电影添加边框,它在iPad2(7.1)上运行良好,但它无法在iPhone 6(8.1)上运行。 AVAssetExporterSession返回状态未完成,有什么问题吗?

func addBorderToVideo(composition: AVMutableVideoComposition, size: CGSize){
    var borderImage = imageWithColor(UIColor.greenColor(), imageSize: CGRectMake(0, 0, size.width, size.height))

    var backgrouondLayer = CALayer()
    backgrouondLayer.contents = borderImage
    backgrouondLayer.frame = CGRectMake(0, 0, size.width, size.height)
    backgrouondLayer.masksToBounds = true

    var videoLayer = CALayer()
    videoLayer.frame = CGRectMake(cropSize, cropSize, size.width - cropSize, size.width - cropSize)

    var parentLayer = CALayer()
    parentLayer.frame = CGRectMake(0, 0, size.width, size.height)
    parentLayer.addSublayer(backgrouondLayer)
    parentLayer.addSublayer(videoLayer)
    composition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, inLayer: parentLayer)
}


func exportVideo()
{
    //add videoTrack
    var mixComposition = AVMutableComposition()
    var videoTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID(kCMPersistentTrackID_Invalid))
    videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, self.videoAsset.duration), ofTrack: self.videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] as AVAssetTrack, atTime: kCMTimeZero, error: nil)

    //add layerInstructions
    var mainInstruction = AVMutableVideoCompositionInstruction()
    var videoLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack)
    mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, self.videoAsset.duration)
    mainInstruction.layerInstructions = NSArray(object: videoLayerInstruction)

    //add mainInstructions
    var mainCompositionInst = AVMutableVideoComposition()
    mainCompositionInst.renderSize = videoTrack.naturalSize
    mainCompositionInst.instructions = NSArray(object: mainInstruction)
    mainCompositionInst.frameDuration =  CMTimeMake(1, 30)

// appley效果         self.addBorderToVideo(mainCompositionInst,size:videoTrack.naturalSize)

    // get path
    var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    var documentsDirectory = paths[0] as String
    var myPathDocs = documentsDirectory.stringByAppendingPathComponent(NSString(format: "FinalVideo-%d.mp4", arc4random()%1000))
    var url = NSURL.fileURLWithPath(myPathDocs)!

    //create exporter
    var exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)
    exporter.outputURL = url
    exporter.outputFileType = AVFileTypeMPEG4
    exporter.shouldOptimizeForNetworkUse = true
    exporter.videoComposition = mainCompositionInst
    exporter.exportAsynchronouslyWithCompletionHandler { () -> Void in
        if exporter.status == AVAssetExportSessionStatus.Completed
        {
            var library = ALAssetsLibrary()
            library.writeVideoAtPathToSavedPhotosAlbum(url, completionBlock: { (assetURL, error) -> Void in
                var alert = UIAlertView(title: "Ok", message: "Movie Saved", delegate: nil, cancelButtonTitle: "OK")
                alert.show()
            })
        }
        else
        {
            var alert = UIAlertView(title: "Error", message: "something is wrong", delegate: nil, cancelButtonTitle: "OK")
            alert.show()
        }

    }
}

0 个答案:

没有答案