camera
を開いて、ビデオを録画するためにSurfaceView
にプレビューを設定します。録画を完了し、別のアクティビティを意図して、キャプチャしたビデオURIをVideoView
に設定します。自動的にカメラのプレビューとは異なります。カメラによるビデオキャプチャの向きが自動的に変化するのはなぜですか?
これは、カメラのプレビュー(私はビデオキャプチャがまったく同じに表示されている期待して)です:
しかし、撮影した映像を終わるには、以下のように表示されます。
ご覧のように、ビデオは風景モードで表示され、プレビューはポートレートモードになります。
private boolean prepareRecorder(){
//# Create a new instance of MediaRecorder
mRecorder = new MediaRecorder();
mCamera.unlock();
mRecorder.setCamera(mCamera);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//# Video settings
mRecorder.setVideoSize(1920,1280);
mRecorder.setVideoFrameRate(30);
mRecorder.setVideoEncodingBitRate(3000000);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//# Audio settings
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioEncodingBitRate(16);
mRecorder.setAudioSamplingRate(44100);
//Max duration 30 seconds
mRecorder.setMaxDuration(30000);
//set preview display
mRecorder.setPreviewDisplay(surfaceHolder.getSurface());
//set the ouput of the Mp4 file
MediaFileHelper mediaFileHelper = new MediaFileHelper();
outputFile =mediaFileHelper.getOutputVideoFile();
mRecorder.setOutputFile(outputFile.getAbsolutePath());
try{
mRecorder.prepare();
} catch (IOException e) {
Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}catch (IllegalStateException e){
Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}
return true;
}
は、だから私の質問は次のとおりです:ここではオープンCamera
@Override
public void surfaceCreated(SurfaceHolder holder) {
releaseCamera();
cameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
try{
mCamera = Camera.open(cameraId);
}catch (RuntimeException ex){
ex.printStackTrace();
}
Camera.Parameters parameters;
parameters = mCamera.getParameters();
List<Camera.Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes();
List<Camera.Size> mSupportedVideoSizes = parameters.getSupportedVideoSizes();
optimalSize = getOptimalVideoSize(mSupportedVideoSizes,
mSupportedPreviewSizes, videoSurface.getWidth(), videoSurface.getHeight());
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
profile.videoFrameWidth = optimalSize.width;
profile.videoFrameHeight = optimalSize.height;
parameters.setPreviewFrameRate(20);
parameters.setPreviewSize(profile.videoFrameWidth,profile.videoFrameHeight);
mCamera.setParameters(parameters);
mCamera.setDisplayOrientation(90);
try{
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
inPreview = true;
}catch (Exception e){
e.printStackTrace();
}
}
は、私はビデオレコーダーを準備する方法であるとき、ここで
はsurfaceCreated
のための私のコードです
1)どのようなビデオキャプチャの向きが180度回転する原因になるのは問題ですか?
2)どのようにカメラのプレビューと同じ向きのビデオを表面ビューで撮ることができますか?
ありがとうございます。
私は 'getRotation'に' videoUri'を入れる必要がありますか? – ken
はい、ビデオのカスタム最初の関数 –
ですので、2番目の関数の 'rotation'は1番目の関数による戻り値です?? – ken