我正在使用 Swift 在视图的 AVPlayerLayer 中显示来自 AVPlayer 的内容。关联的 AVPlayerItem 有一个 videoComposition,创建它的代码略微简化版本(没有错误检查等)如下所示:
playerItem.videoComposition = AVVideoComposition(asset: someAsset, applyingCIFiltersWithHandler: {
[unowned self] (request: AVAsynchronousCIImageFilteringRequest) in
let paramDict = << set up parameter dictionary based on class vars >>
// filter the image
let filter = self.ciFilterWithParamDict(paramDict) {
filter.setValue(request.sourceImage, forKey: kCIInputImageKey)
if let filteredImage = filter.outputImage {
request.finishWithImage(filteredImage, context: nil)
}
})
当 AVPlayer 正在播放或搜索时,这一切都按预期工作。如果创建并加载了新的 videoComposition,则 AVPlayerLayer 会正确渲染。
但是,当我更改了一些用于计算过滤器参数的值时,我还没有找到一种方法来“触发” AVPlayer/AVPlayerItem/AVVideoComposition 以重新渲染。如果我更改值然后播放或搜索,它会正确呈现,但前提是我播放或搜索。有没有办法“就地”触发渲染?