表面ビューにも表示しながら、Androidのフロントカメラからビデオを録画しようとしています。
フロントカメラで私が見つけたのは、表面ビューが通常のビューを示しているにもかかわらず、録画中にミラーがビデオを反転させることです。
これを防止または修正する方法はありますか?
Android正面カメラからの画像が反転しないようにする方法 )のような他のstackoverflowの記事を読みました
しかし、それはフロントカメラで写真を撮り、画像を反転させることだけを話しているようです。これは、マトリックスを使用してすでに修正しました。ただし、ビデオにマトリックスを使用することは機能しないようです。
私の場合、それを再生するときに水平方向に反転する必要があります。録音するとき、それはミラー効果のためにすでに反転されており、私が見るようにそれを変更することはできません。しかし、以下のコードはプレイ中の私の問題を解決しました。
videoPlayer.setScaleX(-1);
私には解決策がありませんが、重要なのは次のとおりです。
MediaRecorder.setOrientationHint
出力ビデオ再生の方向ヒントを設定します。このメソッドは、prepare()の前に呼び出す必要があります。このメソッドは、ビデオ録画中にソースビデオフレームを回転させませんが、出力形式がOutputFormat.THREE_GPPまたはOutputFormat.MPEG_4の場合、出力ビデオの回転角度を含む合成マトリックスを追加します。 これにより、ビデオプレーヤーは再生に適切な方向を選択できます。一部のビデオプレーヤーは、再生中にビデオの構成マトリックスを無視することを選択する場合があることに注意してください。
私はH264でビデオを録画していますが、うまくいきません:(しかし、それはあなたを助けるかもしれません。それを試してみましたか?
SetDisplayOrientationメソッドのドキュメント( http://developer.Android.com/reference/Android/hardware/Camera.html )には、次のものがあります。
正面カメラのプレビュー表示は、回転前に水平方向に反転します。つまり、画像はカメラセンサーの中央の垂直軸に沿って反射されます。そのため、ユーザーは自分自身を鏡を見ているように見ることができます。
したがって、プレビュー表示は反転する必要がありますが、録画したビデオは反転しないでください。プレビュー表示で、自分が鏡を見ているように見えますか?もしそうなら、すべてが正常に動作しています。
次のような行列変換を適用する必要があります。
if(isFrontCamera) {
m.preScale(-ratio, ratio);
} else {
m.preScale(ratio, ratio);
}
サイズを変更しないと、配給量は1になり、フロントカメラ以外のpreScaleは廃止されます。