ビデオ フレームを OpenGL テクスチャとして使用できるように、アプリに SurfaceTexture.OnFrameAvailableListener インターフェイスを実装しています。すべてが正常にセットアップされ、完全に機能しますが、数秒後に onFrameAvailable(SurfaceTexture surfaceTexture) の呼び出しが停止し、SurfaceTexture.updateTextImage を介して新しいテクスチャデータがアップロードされていないため、OpenGL でビデオが効果的にフリーズしているように見えます。
onFrameAvailable にフラグを設定して、必要な場合にのみ GL スレッドから updateTextImage 呼び出しを実行しています。現在、すべての描画呼び出しでフラグを true に設定しているため、onFrameAvailable チェックがスキップされるため、ビデオ テクスチャデータがフレームごとにアップロードされます。このように、すべてが正常に実行されますが、同じ (ムービー フレーム) の場合、新しいテクスチャ データをアップロードする必要がないため、非効率的です。
私の知る限り、メモリリークはなく、logcat にはエラーが表示されていません。また、メディア プレーヤーはループするように設定されていますが、1 回の実行が完了する前に問題が発生します。
数秒後に onFrameAvailable が呼び出されなくなる原因は何ですか?