【发布时间】:2020-02-16 15:39:34
【问题描述】:
有人可以帮我理解在不重启视频播放器的情况下切换 CIFilters 的正确方法吗?
我在视图中播放本地视频。如果我在集合视图中点击一个单元格,视频将更改 CIFilter。
我的代码
let filter = CIFilter(name: "CIPhotoEffectNoir")!
let asset = AVAsset(url: fooURL)
let item = AVPlayerItem(asset: asset)
item.videoComposition = AVVideoComposition(asset: asset, applyingCIFiltersWithHandler: { request in
let source = request.sourceImage.clampedToExtent()
filter.setValue(source, forKey: kCIInputImageKey)
let output = filter.outputImage
request.finish(with: output!, context: nil)
})
player = AVPlayer(playerItem: item)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = videoViewDetail.bounds
videoViewDetail.layer.addSublayer(playerLayer)
player?.play()
代码效果很好,应用正确
但我有一个包含许多 CIFilter 的集合视图。 在点击一个单元格时,我找不到将过滤器切换到视频的方法。 如果我使用新过滤器重新创建一个新播放器并将其添加为当前“addsublayer”的替代品,播放器将重新启动视频。
@IBAction func tap(_ sender: UITapGestureRecognizer) {
let location = sender.location(in: self.collectionView)
let indexPath = self.collectionView.indexPathForItem(at: location)
if let index = indexPath {
// code to switch to another CIFilter like for example "CISepiaTone"
}
}
在不重新启动视频的情况下将 CIFilters 更改为正在播放的视频的最佳方法是什么 是否可以使用新过滤器保存视频?
谢谢!
【问题讨论】:
标签: ios video swift5 cifilter avvideocomposition