動画を再生し、Core Image フィルターを使用して処理したいと考えています。私は次の設定をしています:
- としてのビデオ
AVAsset
AVPlayer
ビデオの再生を制御するための- はプレーヤーに
AVAsset
渡されますAVPlayerItem
- Core Image フィルタは、
AVMutableVideoComposition
で初期化init(asset:applyingCIFiltersWithHandler:)
され、プレーヤー アイテムに割り当てられたを使用して適用されます。 - を
AVPlayerItemVideoOutput
使用して処理されたフレームを取得するために使用されますcopyPixelBuffer(forItemTime:itemTimeForDisplay:)
これは期待どおりに機能します。ただし、 を使用してプレーヤーを逆方向にシークすると、奇妙な動作が観察されます。新しいピクセル バッファseek(to:completionHandler:)
の配信がAVPlayerItemVideoOutput
突然停止し、hasNewPixelBuffer(forItemTime:)
が返されますfalse
。ただし、これは、ビデオ構成に適用されるフィルターが少し高価な場合にのみ発生します。非常に単純なフィルターを使用する場合、またはフィルターをまったく使用しない場合、シークは期待どおりに機能します。
このテクニカル ノートに触発されて、完成後にコンポジションをプレーヤー アイテムに再割り当てする回避策を見つけましたseek
が、これは非常にハックに感じられます。特に単純なフィルター パイプラインで機能しているためです。
誰もこれに遭遇したことがありますか?別の方法で構成する必要があるものはありますか?