MediaRecorderを使用してビデオを録画しています。バックカメラを使用すると正常に機能しますが、フロントカメラを使用すると、キャプチャしたビデオが反転/反転します。つまり、右側のアイテムが左側に表示されます。カメラのプレビューは正常に機能しています、最後にキャプチャされたビデオが反転しました。
これはカメラのプレビューのようです
しかし、最終的なビデオは次のように表示されます(すべてのアイテムは左側に表示され、右側に表示されます)
これまでに試したこと:
レコーダーを準備するときに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
を使用しているため、この質問は役に立ちません。
2) Android前面カメラの画像を反転させないようにする方法
だから私の質問は:
1)ビデオが反転していないフロントカメラでビデオをキャプチャする方法(カメラプレビューとまったく同じ)?
2)カメラプレビューがSurfaceView
を使用しているがTextureView
を使用していない場合にこれを実現するにはどうすればよいですか? (上記で言及したすべての質問のため、TextureView
の使用について教えてください)
すべての可能な解決策は大歓迎です。
[〜#〜]編集[〜#〜]
問題を明確にするために2つの短いビデオクリップを作成しました。ダウンロードして確認してください
2) 録音の最終製品のビデオ
したがって、システムカメラアプリがアプリに似たビデオを生成する場合、何か問題はありませんでした。次に、正面カメラのビデオ録画で何が起こるかを理解します。
前面カメラは、写真やビデオをキャプチャする方法が背面カメラと同じです。電話機が画面にカメラプレビューを表示する方法には違いがあります。ユーザーにとってより自然に見えるように、Android(および他のすべてのシステム))はプレビューをミラーリングするので、ミラーのように自分を見ることができます。
これは、プレビューの表示方法にのみ適用されることを理解することが重要です。ビデオ会議アプリを手に取り、両手で持っている2つのデバイスを接続して自分を見ると、自分の2つのインスタンスが反転していることに驚かれるでしょう。
これはバグではありません。これは、相手にビデオを提示する自然な方法です。
スケッチを見る:
これはあなたがシーンを見る方法です:
これは、同僚が同じシーンを見る方法です
通常、ビデオの録画は、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は、カメラをハードウェアエンコーダーに非常に効率的な方法で「接続」し、ピクセルをユーザーメモリにコピーする必要さえないため、パフォーマンスが大幅に低下する可能性があります。 この答え は、カメラをテクスチャにレンダリングする方法を操作する方法を示しています。