我想播放视频并使用 Core Image 过滤器对其进行处理。我有以下设置:
- 视频作为
AVAsset
- 用于
AVPlayer
控制视频播放 AVAsset
传递给AVPlayerItem
玩家- 核心图像过滤器是使用
AVMutableVideoComposition
初始化init(asset:applyingCIFiltersWithHandler:)
并分配给播放器项目的 - an
AVPlayerItemVideoOutput
用于获取处理后的帧copyPixelBuffer(forItemTime:itemTimeForDisplay:)
这按预期工作。但是,我在使用 向后搜索播放器时观察到奇怪的行为seek(to:completionHandler:)
:AVPlayerItemVideoOutput
突然停止提供新的像素缓冲区并hasNewPixelBuffer(forItemTime:)
返回false
。但这仅在视频合成中应用的过滤器更昂贵时才会发生。当使用非常简单的过滤器或根本不使用过滤器时,搜索按预期工作。
受此技术说明的启发,我发现了一种解决方法,即在完成后将合成重新分配给播放器项目seek
,但这感觉非常糟糕——尤其是因为它适用于简单的过滤器管道。
以前有人遇到过吗?有什么我需要配置不同的吗?