そのため、録画中のビデオフレームのタイムスタンプを取得する方法を模索してきました。
オンラインおよびAPIドキュメントのすべてのサンプルでは、MediaRecorderを使用してカメラからのビデオを録画するように指示されています。問題は、タイムスタンプデータが返されないことと、フレームを記録するときに呼び出されるコールバックがないことです。
私はAndroid4.2ソースコードでカメラアプリの調査を開始し、これについて大きな進歩を遂げることができました。SurfaceTextureにはtimestampプロパティがあるため、SurfaceTextureのonFrameAvailableリスナーが呼び出されたときに、カメラからのビデオを正常に記録し、フレームのタイムスタンプをファイルに保存しました。
しかし、さらに調査したところ、記録されたときではなく、フレームが表示されているときにこれらのコールバックを受け取っていたことがわかりました。後から考えると、これは非常に理にかなっているので、もっと早く見つけたはずです。
いずれにせよ、私はさらにCameraアプリに進み、それが持つEffectsRecorderクラスを見始めました。OpenGLシェーダーの使用を許可するために、フィルターフレームワークを介していくつかの文書化されていないAPIを使用していることがわかりました。私のユースケースでは、これは役立つので、この道を進み続けるでしょう。私はまだビデオを正しく録画するためにそれを通り抜けようとしていますが、録画ではなく、表示されているタイムスタンプのみを取得するように感じます。
さらに見てみると、その下にMediaRecorderクラスがあるフィルターを使用しており、カメラ以外の文書化されていない2番目のビデオソースであるGRALLOC_BUFFER = 2を使用していることがわかります。これはさらに興味深く便利ですが、最終的には、記録されているフレーム。
コミュニティの誰かがこれに遭遇したことを期待して、StackOverflowにアピールしています。どこを見ればよいかというポインタが必要です。ソースコードのほとんどがAOSPから削除されたばかりなので、ソースコードを提供できますが、何が関連するのかわからないという理由だけで、まだ提供していません。
ヘルプは大歓迎です。