我已在各种手机上测试过我的应用程序。我的应用程序主要功能是通过手机摄像头拍摄照片和录制视频。我在大多数手机上都没有遇到问题,但我确实在Motorola DROID RAZR上遇到了这个问题。我拍照时我的应用程序工作正常。但是当我录制视频时,我遇到了一个问题。当我录制视频时,我得到一个空白屏幕。手机屏幕上没有预览显示。我不知道它为什么会发生,但在大多数手机上它的工作正常。并且在这款手机(droid razr)上正常拍照。
摩托罗拉DROID RAZR配置,
这是我的代码,
Camera camera = Camera.open();
Parameters params = camera.getParameters();
camera.setDisplayOrientation(90);
camera.setParameters(params);
camera.setDisplayOrientation(90);
MediaRecorder recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setVideoSize(640, 480);
recorder.setMaxDuration(25000);
recorder.setOrientationHint(90);
更新
我在Motorola Droid Razr仿真器上测试了这个应用程序。我得到以下例外,
MediaRecorder(430): prepare failed: -17
System.err(430): java.io.IOException: prepare failed.
System.err(430): at android.media.MediaRecorder._prepare(Native Method)
System.err(430): at android.media.MediaRecorder.prepare(MediaRecorder.java:590)
但我没有在我的其他模拟器上得到此异常。如何解决这个问题?
答案 0 :(得分:3)
最后我找到了解决方案。下面的代码适用于所有设备。 ;)
Holder holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Camera camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
Log.e(TAG, e.getMessage());
e.printStackTrace();
}
camera.unlock();
MediaRecorder recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoSize(640, 480);
recorder.setVideoFrameRate(20);
recorder.setVideoEncodingBitRate(3000000);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
try {
String videopath = File.createTempFile("video", ".mp4")
.getAbsolutePath();
recorder.setOutputFile(videopath);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
recorder.setPreviewDisplay(holder.getSurface());
答案 1 :(得分:0)
此设备似乎不支持MediaRecorder.setOrientationHint()。尝试评论该行。 mMediaRecorder.setOrientationHint(90)