問題タブ [avvideocomposition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - AVPlayerItemVideoOutput がビデオ コンポジションでのシーク後にフレームの配信を停止する
動画を再生し、Core Image フィルターを使用して処理したいと考えています。私は次の設定をしています:
- としてのビデオ
AVAsset
AVPlayer
ビデオの再生を制御するための- はプレーヤーに
AVAsset
渡されますAVPlayerItem
- Core Image フィルタは、
AVMutableVideoComposition
で初期化init(asset:applyingCIFiltersWithHandler:)
され、プレーヤー アイテムに割り当てられたを使用して適用されます。 - を
AVPlayerItemVideoOutput
使用して処理されたフレームを取得するために使用されますcopyPixelBuffer(forItemTime:itemTimeForDisplay:)
これは期待どおりに機能します。ただし、 を使用してプレーヤーを逆方向にシークすると、奇妙な動作が観察されます。新しいピクセル バッファseek(to:completionHandler:)
の配信がAVPlayerItemVideoOutput
突然停止し、hasNewPixelBuffer(forItemTime:)
が返されますfalse
。ただし、これは、ビデオ構成に適用されるフィルターが少し高価な場合にのみ発生します。非常に単純なフィルターを使用する場合、またはフィルターをまったく使用しない場合、シークは期待どおりに機能します。
このテクニカル ノートに触発されて、完成後にコンポジションをプレーヤー アイテムに再割り当てする回避策を見つけましたseek
が、これは非常にハックに感じられます。特に単純なフィルター パイプラインで機能しているためです。
誰もこれに遭遇したことがありますか?別の方法で構成する必要があるものはありますか?
swift - AVVideoComposition によるフレームの事前レンダリングを停止するにはどうすればよいですか?
フィルターを適用しながらフレームをレンダリングするカスタム コンポジターがあります。スライダーでフィルター プロパティを変更すると、ビデオ コンポジションが事前にレンダリングされ、事前にレンダリングされたフレームの古いフィルター値が保持されるため、変更が遅れます。videoComposition - をリセットすることでこれを修正できますplayerItem.videoComposition = videoComposition
。これはうまく機能し、上記の問題は修正されますが、新しい問題が発生します。スライダーのようなものを使用すると、変化が非常に速く発生するため、この操作によって CPU が過負荷になり、ビデオがぎくしゃくします。Slider にステップを追加し、より大きな増分だけ変更することでこれを改善できますが、これはまだ完全ではなく、顕著なラグが生じます。また、ユーザーがこれらのごくわずかな変更を行えるようにしたいので、この修正はそれだけの価値がありません。この機能を無効にする良い方法を知っている人はいますかAVVideoComposition
またはカスタムコンポジター?それはお尻の痛みでした。