ビデオをカスタムビューでキャプチャしようとしています。 Camera.setDisplayOrientation(rotation)を使用してビデオを正しい向きで表示できますが、記録されたビデオはまだ横長モードです。ポートレートモードでは、ビデオを正しくキャプチャできません。Android、MediaRecorderをポートレートモードで使用して録画ビデオを回転させる方法
私はhttps://github.com/googlesamples/android-Camera2Videoをテストしましたが、同じ問題もあります。
許可を確認した後、の後にsetCameraOrientation()
メソッドを呼び出しています。
private void setCameraOrientation()
{
int rotation = getRotation();
mCamera.setDisplayOrientation(rotation);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setRotation(rotation);
mCamera.setParameters(parameters);
}
private int getRotation()
{
Display display = getWindowManager().getDefaultDisplay();
int rotation = 0;
switch (display.getRotation())
{
case Surface.ROTATION_0:
rotation = 90;
break;
case Surface.ROTATION_90:
rotation = 0;
break;
case Surface.ROTATION_180:
rotation = 270;
break;
case Surface.ROTATION_270:
rotation = 180;
break;
}
return rotation;
}
これにより、正しい向きでビデオを表示できます。しかし、私がMediaRecorder
を停止して保存したファイルをチェックした後、90度回転したビデオのアスペクト比が悪いと思う。私は自分のコンピュータとVideoView要素を持つ別の断片に引っ張って調べました。
private boolean prepareRecorder()
{
mCamera.lock();
mCamera.unlock();
recorder = new MediaRecorder();
recorder.setCamera(mCamera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
if (!mIsMute)
{
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setProfile(profile);
}
else
{
recorder.setOutputFormat(profile.fileFormat);
recorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
recorder.setVideoFrameRate(profile.videoFrameRate);
recorder.setVideoEncoder(profile.videoCodec);
recorder.setVideoEncodingBitRate(profile.videoBitRate);
}
recorder.setMaxDuration(maxVideoDuration - videoProgress);
String fileName = StorageUtil.sharedUtil().getExternalStorageDir() + File.separator + String.format(
fileNameFormat, videoCount);
recorder.setOutputFile(fileName);
recorder.setPreviewDisplay(surfaceHolder.getSurface());
try
{
recorder.prepare();
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
、その後、私はちょうど私がちょうどrecoreder.prepare();
前recorder.setOrientationHint(90);
を試みたが、それは何もしませんちなみにrecorder.start();
を呼び出す:私prepareRecorderの方法があります。私は正しい向きを表示できますが、保存することはできません。
ご回答ありがとうございますが、これは私の問題ではありません。私はすでに 'setCameraOrientation()'メソッドで表示方向を設定しています。これは私が録画中に正しく表示するのに役立ちますが、私の問題はポートレートモードでビデオを保存することです。 ビデオは常に横長モードで保存されますが、ffmpegを使用してビデオを回転させているため、追加の時間(数秒)がかかります。 Android7.0 OS搭載の一般的なモバイルAndroid Oneでテストしています。 –
なぜffmpegを使ってビデオを回転させていますか?正しいローテーションは、ビデオのメタデータに記録されている必要があります。それは起こっていないのですか? –
ビデオを録画して、次の画面で再生します。回転させないと、ビデオが間違った向きで再生されます。最初はAndroidのプレイヤーと関連があると思っていましたが、私のパソコンに.mp4ビデオを引き込み、結果は同じでした。ビデオは-90度の向きが間違って再生されました。私はffmpegで回転するビデオでのみこの問題を解決できました。 –