録画中に表示される実際の画面上のプレビューとは異なるサイズのビデオをユーザーが録画できるようにしようとしています。これは、次のように述べている関数に関するこのドキュメントgetSupportedVideoSizes
から可能であるようです。
返されたリストが null でない場合、返されたリストには少なくとも 1 つの Size が含まれ、ビデオ ソースとしてカメラが使用されている場合は、返されたリストのサイズの 1 つをカムコーダー アプリケーションの MediaRecorder.setVideoSize() に渡す必要があります。この場合、プレビューのサイズは、ビデオ録画中に録画されたビデオの解像度と異なる場合があります。
これは、一部の携帯電話がこの fn から null を返すことを示唆しています (私の経験では、Galaxy SIII が返します) が、そうでない場合は、実際のビデオとは異なる解像度でプレビューを提供することができます。この理解は正しいでしょうか?一部の電話は動作を許可し、他の電話は許可しませんか?
解決策を試みる:
ビデオ録画のセットアップの長いプロセスで使用される機能の公式説明では、setPreviewDisplay
次のように述べられています。
このメソッドが null サーフェスで呼び出された場合、またはまったく呼び出されなかった場合、メディア レコーダーはカメラのプレビュー サーフェスを変更しません。
これは私が望んでいるように思えますが、残念ながらこれを行うと、ビデオ録画プロセス全体が完全に台無しになります。ビデオを録画する過程で、この関数に null を渡したり、まったく呼び出したりすることはできないと想定しています。おそらく、他のコンテキストではこれで問題ありません。残念ながら、これは私には役に立たないようです。
私の唯一の次のステップは、TextureView
openGL を使用して実際の解像度とは異なる希望のサイズにテクスチャを引き伸ばす (そして画面から余分な部分をトリミングする) ために、s を調べて、典型的な SurfaceView 実装とは対照的にプレビュー テクスチャを使用することです。 、次に、SurfacesetPreviewDisplay
のコンストラクターを使用して関数の Surface をSurface(SurfaceTexture surfaceTexture)
構築します。TextureView
ICS との互換性がないため、また、かなり複雑になるため、 の使用は避けたいと思います。
これはデリケートなプロセスのように思えますが、誰かがこの分野でアドバイスを提供できることを願っています.
ありがとうございました。