0

私の Android アプリでは、カメラのプレビューに 16:9 の解像度を使用し、WebRTC 呼び出しを介して送信したいと考えています。360p (640x360) が一般的であり、送信に高いビットレートを必要としないため、使用したいと考えています。

Camera2 API を使用しています。ベスト プラクティスとして、最初にデバイスでサポートされている解像度のリストを特定し、360p がサポートされているかどうかを確認しました。確認したら、cameraCapturesession の作成に進みます

ただし、このチェックは一部のデバイスで失敗します - Real Me 5 Pro、Redmi Note 7S、redmi note 7 (すべて Android バージョン >=9 を実行)これらのデバイス

リストは cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(SurfaceTexture.class) 経由で取得されます getOutputSizes(ImageFormat.JPEG) でも同様に利用できませんでした

そして、サポートされている解像度を確認せずに 640*360 で cameraCaptureSession を強制的に作成すると、実際に機能しました - 640x360 の解像度をキャプチャできました。デバイス カメラが実際にサポートしているように見えますが、cameraCharacteristics から取得したリストにはありません。

チェックを行わずにこの解像度を強制することはできないと思います-一部のデバイスでは機能せず、例外/クラッシュがスローされる可能性があるため、360p に最も近い一致を選択してフォールバックを追加することを考えました-16:9 を妥協するか、1280x720 にする必要があります選択する必要があります - 送信にはより高いビットレートが必要です

360p は標準解像度だと思います。サポート対象としてリストされていないが、強制すると実際に機能する理由はありますか? ドキュメントの私の理解によると、SCALER_STREAM_CONFIGURATION_MAP は、ハードウェアでサポートされている解像度の完全なリストを返す必要があります。解決策または回避策を提案してください

4

1 に答える 1

0

640x360 の 16:9 は、解像度が非常に低いため、最近のモバイル カメラではあまり使用されていません。720p は、人々がビデオを録画したい最小サイズであるため、サポートされるサイズに反映されます。

ただし、640x480 (4:3 VGA) はサポートされることが保証されているため、16:9 を取得する場合は、それを使用してトリミングすることをお勧めします。

リストされていない場合にサイズが機能すると仮定するのは非常に危険です。そして、これはすべてデバイス固有のものになるため、事前に知ることはできず、一部の新しいデバイスは失敗する可能性があります. なので、全くお勧めしません。

于 2021-05-26T22:02:10.233 に答える