Intereting Posts
Ошибка , когда я попытался установить adb Лучшая практика для предоставления нескольких тем для Android-приложений Android adb не позволит мне вводить команды Intel INDE – захват видео для Unity 3D (как захватить только видео и аудио приложения вместо использования микрофона) Android: Должен ли я обращаться к LicenseChecker каждый раз, когда приложение открывается? Android AppCompat ProgressDialog? Как вы создаете TextView в макете? Android SeekBar для контроля прогресса MediaPlayer Android Studio не работает нормально с gradle 2.10 и плагин gradle 2.0.0-alpha5 Как получить прямое расстояние между двумя местами в андроиде? Запись на консоль вывода пользовательского интерфейса UI Структура каталога проектов тестирования Android при использовании Eclipse Ошибка Eclipse – parseSdkContent – не распознавание файлов XML Android gradle build Ошибка: (9, 0) Метод Gradle DSL не найден: 'compile ()'. Мультитекстовое текстовое изображение в android

Сбой Android MediaRecorder

ОБНОВЛЕНО:

Хорошо, после нескольких дней тестирования и отладки … Я ПОЛУЧИЛ РАБОТУ, но не так, как хочу.

Причина, по которой она разбилась ранее, была из-за «переориентации» камеры во время блокировки экрана, по-видимому, что часто происходит сбой.

Как только я заставил его использовать ландшафтный режим, он работает. Однако я не хочу, чтобы он использовал ландшафтный режим; Я хочу, чтобы он работал в портретном режиме.

Код берется непосредственно из образца Android Studio (Media -> MediaRecorder). Образец имел код, работающий в ландшафтном режиме, и я не могу понять, как заставить его использовать портретный режим, чтобы я мог избежать переориентации и, таким образом, избежать сбоев?

Нет ничего в onPause, onResume-код и указатель на стек, указывающий на вызов этого метода.

Легкий репродукция:

1) Используйте Android Studio, чтобы получить приложение примера MediaRecord. 2) В манифесте, изменить, android: screenOrientation = "landscape"> в Portrait. 3) Приложение не будет запускаться сейчас.

Я добавил mCamera.setDisplayOrientation (90), то же самое.

Код:

@TargetApi(Build.VERSION_CODES.HONEYCOMB) private boolean prepareVideoRecorder(){ // BEGIN_INCLUDE (configure_preview) mCamera = CameraHelper.getDefaultCameraInstance(); // We need to make sure that our preview and recording video size are supported by the // camera. Query camera to find all the sizes and choose the optimal size given the // dimensions of our preview surface. Camera.Parameters parameters = mCamera.getParameters(); List<Camera.Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes(); Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(mSupportedPreviewSizes, mPreview.getWidth(), mPreview.getHeight()); // Use the same size for recording profile. CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); profile.videoFrameWidth = optimalSize.width; profile.videoFrameHeight = optimalSize.height; // likewise for the camera object itself. parameters.setPreviewSize(profile.videoFrameWidth, profile.videoFrameHeight); mCamera.setParameters(parameters); try { // Requires API level 11+, For backward compatibility use {@link setPreviewDisplay} // with {@link SurfaceView} mCamera.setPreviewTexture(mPreview.getSurfaceTexture()); } catch (IOException e) { Log.e(TAG, "Surface texture is unavailable or unsuitable" + e.getMessage()); return false; } // END_INCLUDE (configure_preview) // BEGIN_INCLUDE (configure_media_recorder) mMediaRecorder = new MediaRecorder(); // Step 1: Unlock and set camera to MediaRecorder mCamera.unlock(); mMediaRecorder.setCamera(mCamera); // Step 2: Set sources mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) mMediaRecorder.setProfile(profile); // Step 4: Set output file mMediaRecorder.setOutputFile(CameraHelper.getOutputMediaFile( CameraHelper.MEDIA_TYPE_VIDEO).toString()); mMediaRecorder.setOrientationHint(90); // END_INCLUDE (configure_media_recorder) MediaScannerConnection.scanFile(this, new String[] { CameraHelper.getOutputMediaFile( CameraHelper.MEDIA_TYPE_VIDEO).getPath() }, new String[] { "video/mp4" }, null); // Step 5: Prepare configured MediaRecorder try { mMediaRecorder.prepare(); } catch (IllegalStateException e) { Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); releaseMediaRecorder(); return false; } catch (IOException e) { Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); releaseMediaRecorder(); return false; } return true; } 

Журналы:

 06-27 02:18:08.244 25734-25752/com.watchdawg.watchdawg E/MediaRecorder﹕ start failed: -22 06-27 02:18:08.253 25734-25752/com.watchdawg.watchdawg E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: com.watchdawg.watchdawg, PID: 25734 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:304) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.RuntimeException: start failed. at android.media.MediaRecorder.start(Native Method) at com.watchdawg.watchdawg.RecordActivity$MediaPrepareTask.doInBackground(RecordActivity.java:276) at com.watchdawg.watchdawg.RecordActivity$MediaPrepareTask.doInBackground(RecordActivity.java:267) at android.os.AsyncTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) 

Всякий раз, когда приложение удаляется из недавнего списка задач, процесс не будет полностью очищен, просто пользовательский интерфейс будет очищен. Таким образом, ответственность за очистку ресурса, связанного с вашей деятельностью или приложением, зависит от приложения. Следовательно, вам необходимо переопределить метод onTaskRemoved () в вашем сервисе (служба Android) и выполнить очистку (освобождение экземпляра mediaplayer и т. Д.).

Попробуйте вот так:

  mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setVideoFrameRate(24); mMediaRecorder.setVideoSize(720,480); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mPreview.setRotation(90); 

Вместо mMediaRecorder.setProfile (профиль); надеюсь, что это работает!