2

動画を再生し、Core Image フィルターを使用して処理したいと考えています。私は次の設定をしています:

  • としてのビデオAVAsset
  • AVPlayerビデオの再生を制御するための
  • はプレーヤーにAVAsset渡されますAVPlayerItem
  • Core Image フィルタは、AVMutableVideoCompositionで初期化init(asset:applyingCIFiltersWithHandler:)され、プレーヤー アイテムに割り当てられたを使用して適用されます。
  • AVPlayerItemVideoOutput使用して処理されたフレームを取得するために使用されますcopyPixelBuffer(forItemTime:itemTimeForDisplay:)

これは期待どおりに機能します。ただし、 を使用してプレーヤーを逆方向にシークすると、奇妙な動作が観察されます。新しいピクセル バッファseek(to:completionHandler:)の配信がAVPlayerItemVideoOutput突然停止し、hasNewPixelBuffer(forItemTime:)が返されますfalseただし、これは、ビデオ構成に適用されるフィルターが少し高価な場合にのみ発生します。非常に単純なフィルターを使用する場合、またはフィルターをまったく使用しない場合、シークは期待どおりに機能します。

このテクニカル ノートに触発されて、完成後にコンポジションをプレーヤー アイテムに再割り当てする回避策を見つけましたseekが、これは非常にハックに感じられます。特に単純なフィルター パイプラインで機能しているためです。

誰もこれに遭遇したことがありますか?別の方法で構成する必要があるものはありますか?

4

0 に答える 0