Pull to refresh

Работа с камерой в Android: снимаем видео

Development for Android *
В комментариях к статье Работа с камерой в Android был задан вопрос о том, как сделать видеозапись. Оказывается, все это делается довольно просто.

За запись видео (а так же и аудио) отвечает класс MediaRecorder.
Собственно, чтобы включить запись, необходимо проделать следующее:

1. Создать объект класса MediaRecorder
MediaRecorder recorder = new MediaRecorder();

2. Настроить источники аудио и видео
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

в качестве источника звука можно также указать:
MediaRecorder.AudioSource.MIC - обычный микрофон, использующийся для видеозаписи
MediaRecorder.AudioSource.CAMCORDER - микрофон связанный с той камерой, на которую ведется запись

3. Задать выходной формат
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

также можно задать:
MediaRecorder.OutputFormat.MPEG_4 - mp4
MediaRecorder.OutputFormat.THREE_GPP - 3gp

4. Настроить параметры видео и аудио записи (например, следующими значениями)
recorder.setVideoEncodingBitRate(150000); // битрейт видео
recorder.setAudioEncodingBitRate(8000); // битрейт аудио
recorder.setAudioSamplingRate(8000); // частота дискретизации записи аудио
recorder.setAudioChannels(1); // количество каналов записи аудио
recorder.setVideoFrameRate(30); // фреймрейт записи видео
recorder.setVideoSize(640, 480); // размер картинки
recorder.setMaxDuration(0); // максимальная длительность записи
recorder.setMaxFileSize(0); // максимальный размер файла

5. Задать имя файла для записи
recorder.setOutputFile(путь);

6. Задать preview
recorder.setPreviewDisplay(Surface);

7. Приготовиться к записи
recorder.prepare();

8. Долгожданный пуск. В этот момент включится превью и начнется запись.
recorder.start();

Чтобы закончить:
9. Останавливаем запись
recorder.stop();

10. Если хотим использовать этот же объект для другой записи с другими настройками
recorder.reset(); // возвращаемся к шагу, задающему setAudioSource()

11. Освобождаем объект
recorder.release(); 

Если хочется видеть превью до начала записи, то необходимо подружить камеру и рекордер. Для этого делаем следующее:

перед началом записи:
— останавливаем превью камеры
camera.stopPreview();

— разрешаем совместное использование камеры
camera.unlock();

— задаем объект камеры рекордеру
recorder.setCamera(camera);

после окончания записи:
— запрещаем совместный доступ к камере
camera.reconnect();

— включаем превью камеры
camera.startPreview();

Ну и, конечно же, не забываем отключать фотосъемку на время видеозаписи.

Исходники адаптированной для видеозаписи программы фотосъемки из предыдущей статьи (также добавлено меню настроек) можно скачать по ссылке.

При написании использовались следующие источники информации:

1. Shawn Van Every. Pro Android Media: Developing Graphics, Music, Video and Rich Media Apps for Smartfones and Tablets. Apress 2009.
2. Описание класса Camera
3. Описание класса MediaRecorder
Tags: androidcameramediarecorder
Hubs: Development for Android
Total votes 32: ↑29 and ↓3 +26
Comments 9
Comments Comments 9

Popular right now