我正在使用Swift在視圖的AVPlayerLayer中顯示來自AVPlayer的內容。關聯AVPlayerItem有videoComposition,並稍微簡化了代碼的版本來創建它(沒有錯誤檢查等),看起來是這樣的:如何在AVVideoComposition的applyCIFiltersWithHandler中觸發重繪過濾器?
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來重新渲染。如果我改變了數值然後玩或尋求,它就會被正確渲染,但只有在我玩或尋求的時候。有沒有辦法觸發渲染「到位」?
這方面的進展如何?我遇到同樣的問題 –
沒有進展。對不起,布萊恩。我放棄了,而是隻是非實時地逐幀渲染。 –