0

Я пытаюсь добавить текст поверх видео, но независимо от того, что я делаю, я получаю неверную ошибку композиции (-11841). Я следил за учебниками, читал темы, и ничего не выделялось как неправильное. Я совмещаю 3 видео, и аудио трек, и это отлично работает. Я пытаюсь добавить текст для продолжительности первого видеоклипа (videoStartAsset).Недопустимая ошибка композиции (-11841) при попытке добавить CATextLayer в видео

Вот код, я использую:

var mainInstruction = AVMutableVideoCompositionInstruction() 
    mainInstruction.timeRange = CMTimeRange(start: kCMTimeZero, duration: videoStartTimeRange.duration) 

    var videoLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoCompositionTrack) 
    var videoAssetTrack = videoStartAsset.tracksWithMediaType(AVMediaTypeVideo)[0] as AVAssetTrack 

    videoLayerInstruction.setOpacity(0.0, atTime: videoStartTimeRange.duration) 

    mainInstruction.layerInstructions = [videoLayerInstruction] 

    var mainCompositionInst = AVMutableVideoComposition() 
    var naturalSize = videoAssetTrack.naturalSize 
    var renderWidth = naturalSize.width 
    var renderHeight = naturalSize.height 
    mainCompositionInst.renderScale = Float(UIScreen.mainScreen().scale) 
    mainCompositionInst.renderSize = CGSize(width: 640.0, height: 480.0) 
    mainCompositionInst.instructions = [mainInstruction] 
    mainCompositionInst.frameDuration = CMTimeMake(1, 30) 

    var nameTextLayer = CATextLayer() 
    nameTextLayer.font = "FONT" 
    nameTextLayer.fontSize = 100 
    nameTextLayer.frame = CGRect(x: 0.0, y: 0.0, width: naturalSize.width, height: naturalSize.height) 
    if let nameText = nameInputText?.label?.text { 
     nameTextLayer.string = "TEXT" 
    } else { 
     nameTextLayer.string = "DEFAULT TEXT" 
    } 
    nameTextLayer.alignmentMode = kCAAlignmentCenter 
    nameTextLayer.foregroundColor = UIColor.whiteColor().CGColor 

    var overlayLayer = CALayer() 
    overlayLayer.addSublayer(nameTextLayer) 
    overlayLayer.frame = CGRect(x: 0.0, y: 0.0, width: naturalSize.width, height: naturalSize.height) 
    overlayLayer.masksToBounds = true 

    var parentLayer = CALayer() 
    var videoLayer = CALayer() 

    parentLayer.frame = CGRect(x: 0.0, y: 0.0, width: naturalSize.width, height: naturalSize.height) 
    videoLayer.frame = CGRect(x: 0.0, y: 0.0, width: naturalSize.width, height: naturalSize.height) 

    parentLayer.addSublayer(videoLayer) 
    parentLayer.addSublayer(overlayLayer) 

    mainCompositionInst.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, inLayer: parentLayer) 

Спасибо.

ответ

0

Исправлена ​​моя проблема; Оказывается, ошибка была быть брошенным из следующей строки:

mainInstruction.timeRange = CMTimeRange(start: kCMTimeZero, duration: videoStartTimeRange.duration) 

Это потому, что я устанавливаю TimeRange быть время диапазон первого видеоклипа (где должен быть добавлен текст), вместо timeRange всего видео (я объединять 3 видео в один, поэтому мне нужно было установить timeRange как сумму всех их продолжительности).

Спасибо Apple за очень описательное сообщение об ошибке./sarcasm

0
AVErrorInvalidVideoComposition = -11841, 

You attempted to perform a video composition operation that is not supported. 

Available in iOS 5.0 and later. 

Дополнительные сведения об ошибках Фонда AV вы ча найти here.

+0

Спасибо за ответ. Однако я знаю, что такое ошибка; проблема в том, что я не могу понять, что вызывает ее. Я следил за учебниками, я сварил его до минимума, и он все еще бросает его. –