Ios AVVideoComposition与CIFilters崩溃

Ios AVVideoComposition与CIFilters崩溃,ios,avfoundation,avassetexportsession,avvideocomposition,Ios,Avfoundation,Avassetexportsession,Avvideocomposition,我通过以下方式使用CIFilters创建AVVideoComposition: videoComposition = AVMutableVideoComposition(asset: asset, applyingCIFiltersWithHandler: {[weak self] request in // Clamp to avoid blurring transparent pixels at the image edges le

我通过以下方式使用CIFilters创建AVVideoComposition:

 videoComposition = AVMutableVideoComposition(asset: asset, applyingCIFiltersWithHandler: {[weak self] request in  

            // Clamp to avoid blurring transparent pixels at the image edges  
            let source = request.sourceImage.clampedToExtent()  
            let output:CIImage  

            if let filteredOutput = self?.runFilters(source, filters: filters)?.cropped(to: request.sourceImage.extent) {  
                output = filteredOutput  
            } else {  
                output = source  
            }  

            // Provide the filter output to the composition  
            request.finish(with: output, context: nil)  
        })  
然后为了正确处理旋转,我创建了一个passthrough指令,它在passthrough层上设置标识转换

     let passThroughInstruction = AVMutableVideoCompositionInstruction()  
     passThroughInstruction.timeRange = CMTimeRangeMake(start: CMTime.zero, duration: asset.duration)  
     let passThroughLayer = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack)  
            passThroughLayer.setTransform(CGAffineTransform.identity, at: CMTime.zero)   
     passThroughInstruction.layerInstructions = [passThroughLayer]  
            videoComposition.instructions = [passThroughInstruction]  
问题是它会崩溃,并出现以下错误:

'*** -[AVCoreImageFilterCustomVideoCompositor startVideoCompositionRequest:] Expecting video composition to contain only AVCoreImageFilterVideoCompositionInstruction'  
我的问题是,如果我没有指定此passthrough指令,则如果输入资源的videotrack包含指定旋转90度的preferredTransform,则输出不正确。如何将视频合成与核心图像过滤器结合使用,以正确处理视频轨迹的首选变换


编辑:该问题看起来类似,但与涉及回放的其他问题不同。在我的例子中,播放是可以的,但渲染会产生扭曲的视频。

好的,我发现了真正的问题。问题是应用AVMutableVideoComposition(asset:,ApplyingCifilterWithHandler:)函数返回的videoComposition隐式创建一条合成指令,该指令在通过视频轨迹上的preferredTransform应用旋转变换的情况下,物理旋转CIImage。它是否应该这样做是有争议的,因为preferredTransform应用于玩家级别。作为一种解决方法,除了回答中的建议之外。我必须调整通过视频设置中的AVVideoWidthKey、AVVideoHeightKey传递的宽度和高度,该设置传递给Avassetrader/Writer。

可能重复的问题是播放中没有问题。渲染时输出失真。我将尝试在这个答案中提出建议。