Проблема с камерой Motorola DROID RAZR Когда я записываю видео
Я проверил свое приложение на различных мобильных телефонах. Основным функционалом моих приложений является фотографирование и запись видео через камеру телефона. Я не сталкивался с проблемой на большинстве мобильных телефонов, но я столкнулся с этой проблемой на Motorola DROID RAZR. Мое приложение работает нормально, когда я делаю снимок. Но я сталкиваюсь с проблемой при записи видео. Когда я записываю видео, я получаю пустой экран. На экране мобильного телефона нет предварительного просмотра. Я не знаю, почему это происходит, но на большинстве мобильных телефонов работает нормально. И фотографирование работает нормально на этом телефоне (дроид разр).
Конфигурация Motorola DROID RAZR,
- ОПЕРАЦИОННАЯ СИСТЕМА: Android v2.3.5.
- КАМЕРА: HD-камера, 8MP.
- ПРОЦЕССОР: TI OMAP4430
Вот мой код,
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)
Но я не получил это исключение на моем другом эмуляторе. Как решить эту проблему?
2 ответа
Наконец я нашел решение. Ниже код хорошо работает на всех устройствах.;)
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());
Похоже, это устройство не поддерживает MediaRecorder.setOrientationHint(). Попробуйте закомментировать эту строку. mMediaRecorder.setOrientationHint(90)