I am using media recorder to record video in an android app.
mMediaRecorder.setCamera(mServiceCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
String file_name = Environment.getExternalStorageDirectory().getPath() +"/myVideo.mp4";
mMediaRecorder.setOutputFile(file_name);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
The problem is in the line
mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
In HTC and Xperia, setVideoSize works fine (Will work only if I don't comment this line). But in Nexus and Note, setVideoSize won't work( Will work only if I comment this line).
What should I do in order for the app to run in all these devices correctly??
You need to understand that the preview and the actual captured video are two different things, likewise Preview sizes and Video sizes are two different parameters. What you see in the viewfinder is essentially the preview, but it is not what actually gets recorded.
When starting a camera, you set the preview size to the camera. But you must query for the supported preview sizes and should set one among them.
Camera camera = camera.open(); List psizes = camera.getParameters() .getSupportedPreviewSizes();
Once you have set up the preview, you can start recording by using a MediaRecorder, and the video size can be set to the media recorder, and it is the actual size of the video that will be captured. Again, you should set one of supported video size.
List sizes = camera.getParameters() .getSupportedVideoSizes();
and then, you can set one of these to the media recorder
mediaRecorder.setVideoSize(videoWidth, videoHeight);
So, remember to check for the supported sizes always, else you are bound to get an app crash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With