web-dev-qa-db-ja.com

前面カメラでキャプチャされたビデオを逆Androidにしない方法は?

MediaRecorderを使用してビデオを録画しています。バックカメラを使用すると正常に機能しますが、フロントカメラを使用すると、キャプチャしたビデオが反転/反転します。つまり、右側のアイテムが左側に表示されます。カメラのプレビューは正常に機能しています、最後にキャプチャされたビデオが反転しました。

これはカメラのプレビューのようです

enter image description here

しかし、最終的なビデオは次のように表示されます(すべてのアイテムは左側に表示され、右側に表示されます)

enter image description here

これまでに試したこと:

レコーダーを準備するときにmatrixを適用しようとしましたが、何も変わっていないようです。

private boolean prepareRecorder(int cameraId){

    //# Create a new instance of MediaRecorder
    mRecorder = new MediaRecorder();

    setCameraDisplayOrientation(this,cameraId,mCamera);
    int angle = getVideoOrientationAngle(this,cameraId);
    mRecorder.setOrientationHint(angle);

    if(cameraId == Camera.CameraInfo.CAMERA_FACING_FRONT){
        Matrix matrix = new Matrix();
        matrix.preScale(1.0f,-1.0f);
    }

    //all other code to prepare recorder here
  }

以下のこの質問はすべて読みましたが、問題は解決しなかったようです。詳しくは、カメラのプレビューにSurfaceViewを使用しているため、この質問は役に立ちません。

1) Androidフリップフロントカメラミラー反転ビデオ

2) Android前面カメラの画像を反転させないようにする方法

3) 前面カメラの反転を防止する

だから私の質問は:

1)ビデオが反転していないフロントカメラでビデオをキャプチャする方法(カメラプレビューとまったく同じ)?

2)カメラプレビューがSurfaceViewを使用しているがTextureViewを使用していない場合にこれを実現するにはどうすればよいですか? (上記で言及したすべての質問のため、TextureViewの使用について教えてください)

すべての可能な解決策は大歓迎です。

[〜#〜]編集[〜#〜]

問題を明確にするために2つの短いビデオクリップを作成しました。ダウンロードして確認してください

1) 録画のカメラプレビュー中のビデオ

2) 録音の最終製品のビデオ

5
ken

したがって、システムカメラアプリがアプリに似たビデオを生成する場合、何か問題はありませんでした。次に、正面カメラのビデオ録画で何が起こるかを理解します。

前面カメラは、写真やビデオをキャプチャする方法が背面カメラと同じです。電話機が画面にカメラプレビューを表示する方法には違いがあります。ユーザーにとってより自然に見えるように、Android(および他のすべてのシステム))はプレビューをミラーリングするので、ミラーのように自分を見ることができます。

これは、プレビューの表示方法にのみ適用されることを理解することが重要です。ビデオ会議アプリを手に取り、両手で持っている2つのデバイスを接続して自分を見ると、自分の2つのインスタンスが反転していることに驚かれるでしょう。

これはバグではありません。これは、相手にビデオを提示する自然な方法です。

スケッチを見る:

これはあなたがシーンを見る方法です:

how you see the scene

これは、同僚が同じシーンを見る方法です

how your peer sees the same scene

通常、ビデオの録画は、2番目の画像のように、相手の視点からの視点から行われます。これは、ビデオ会議などの自然なセットアップです。

ただし、Snapchatや他のソーシャルアプリは、まるで鏡から記録したかのように(レコーダーが最初の写真を手に持っているかのように)正面向きのビデオクリップを保存することを選択します。この機能が好きな人もいれば、嫌いな人もいます( https://forums.androidcentral.com/general-help-how/664539-front-camera-pics-mirrored-reversed-only-snapchat.html を​​参照) =および https://www.reddit.com/r/nexus6/comments/3846ay/has_anyone_found_a_fix_for_snapchat_flipping

MediaRecorderを使用することはできません。 MediaCodecの低レベルAPIを使用して、処理されたフレームを記録できます。各フレームを「手動」で反転する必要があります。通常、MediaRecorderは、カメラをハードウェアエンコーダーに非常に効率的な方法で「接続」し、ピクセルをユーザーメモリにコピーする必要さえないため、パフォーマンスが大幅に低下する可能性があります。 この答え は、カメラをテクスチャにレンダリングする方法を操作する方法を示しています。

3
Alex Cohn