繁体   English   中英

AVVideoComposition与CIFilters崩溃

AVVideoComposition with CIFilters crash

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我这样创建带有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)  
        })  

然后,为了正确处理旋转,我创建了传递指令,该指令在传递层上设置身份转换。

     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'  

我的问题是,如果我未指定此passThroughInstruction,则如果输入资产的视频轨道包含指定90度旋转的preferredTransform,则输出不正确。 如何将视频合成与可正确处理视频轨道的preferredTransform的Core Image滤镜一起使用?

编辑:该问题看起来相似,但不同于涉及播放的其他问题。 就我而言,回放很好,但渲染会产生失真的视频。

1 个回复

好吧,我找到了真正的问题。 问题是应用由AVMutableVideoComposition(asset :, ApplyingCIFiltersWithHandler :)函数返回的videoComposition隐式创建一个合成指令,该指令可物理旋转CIImage,以防在视频轨道上通过preferredTransform施加旋转变换的情况。 是否应该执行此操作尚有争议,因为preferredTransform是在播放器级别应用的。 作为解决方法,除了答案中建议的以外。 我必须调整通过videoSettings中的AVVideoWidthKey,AVVideoHeightKey传递给AVAssetReader / Writer的宽度和高度。

1 CIFilters和AVVideoComposition指令

在我的应用中,我必须在播放时应用过滤器。 我通过使用AVVideoComposition来做到这一点,并将滤镜应用于每一帧。 但是由于某些原因,当我更改AVPlayerItem的videoComposition时,视频会旋转。 我试图通过使用转换来解决此问题,并将其添加到videoCo ...

2 CIFilters导致应用崩溃

我需要有关如何在内存上有效使用CIFilter的建议。 基本上,我将两个过滤器链接在一起。 棘手的部分是,在调用过滤器之前,我必须先将UIImage转换为CIImage。 该代码发布在下面: 而且此代码可以轻松将内存增加到200MB,这将导致应用程序崩溃。 那我在做什么错? ...

4 CIFilters值

是否有一个备忘清单显示所有CIFilter及其各自的值范围? 苹果如何在不告知我们可能的范围的情况下编写这样的文档,列出所有过滤器? 来吧苹果。 ...

6 将CIFilters切换到视频

有人可以帮助我了解在不重新启动视频播放器的情况下切换CIFilter的正确方法吗? 我在视图中播放本地视频。 如果在集合视图中点击一个单元格,视频将更改CIFilter。 我的密码 代码效果很好,效果正确 但是我有很多CIFilters的collectionview。 ...

7 大图像上的CIImage和CIFilters

我有大图像(至少我觉得它很大。我想在其上应用CIFilters。我的图像尺寸为3200x2000。但是问题是,当应用滤镜时,我的应用程序变得很滞后。我的意思是,对于相同大小的图像,如果我对较小的图像也能正常工作,那么我认为这可能是我如何实现它的问题,对吗? 顺便说一下,我的图像处理是这样完 ...

9 如何在 AVPlayer 中播放 AVVideoComposition?

大家好,我一直在创建一个 iOS 视频编辑应用程序。我创建了一个包含两层的 AVVideoComposition。现在我想在 AVPlayer 中播放这个合成。因为 AVVideoComposition 不是资产,所以我如何在 AVPlayer 中播放它? 这是我一直在尝试的示例代码。我听说过 AV ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM