Главная » Разработка для Android » ЗАПИСЬ АУДИО И ВИДЕО в Android приложении

0

 

Стандартный класс, поддерживающий запись, называется Medi aRecorder. Он во многом напоминает Medi aPl ауег и в течение жизненного цикла проходит через различные состояния. Эти состояния перечислены ниже (подробнее о них рассказывает диаграмма состояний, приведенная на сайте разработчиков Android по адресу http://developer.android.com/reference/android/media/MediaRecorder.html):

инициализация (initialize) – инстанцирование класса Medi aRecorder;

инициализирован (initialized) – Medi aRecorder готов к использованию;

источник данных сконфигурирован (DataSource configured) – источник медиа (где будет размещаться вывод) сконфигурирован; О подготовлен (prepared) – Medi aRecorder подготовлен к записи; О запись (recording) – идет запись;

освобождено (released) – все ресурсы высвобождены.

Для использования Medi aRecorder в файле описания необходимо задать несколько прав доступа:

чтобы разрешить видеозапись, активируйте RECORDVIDEO и CAMERA:

<uses-permission android:name="android.permission.RECORD_VIDEO"/> <uses-permission android:name="android.permission.CAMERA"/>

для записи аудио активируйте RECORD_AUDIO:

<uses-permission android:name="android.permission.RECORD AUDIO"/>

Запись аудио

Существует три метода для записи аудио. Стандартный метод называется Medi aRecorder. Наиболее простой метод связан с использованием намерения – Intent. Метод AudioRecorder можно использовать для записи непосредственно из аппаратных буферов.

Запись аудио при помощи MediaRecorder

Сначала инициализируем MediaRecorder. Затем задаем информацию об источнике данных (источник ввода аудио, формат вывода, тип кодировки, где именно будет записываться файл и т. д.). Начиная с версии 8 можно также задавать скорость цифрового потока (битрейт) и частоту дискретизации (sampling rate). Когда все это будет сделано, вызываем метод ргерагеС):

Затем, когда потребуется начать запись, вызываем метод start():

Когда запись необходимо остановить, вызываем метод stopC). Если после этого вы собираетесь продолжить запись, вызовите reset (), чтобы принудительно перевести Medi aRecorder в исходное состояние бездействия. Затем переконфигурируйте источник данных, чтобы снова подготовить MediaRecorder:

Когда MediaRecorder уже не нужен, убедитесь, что вы его высвободили:

В следующем примере показано небольшое удобное приложение, использующее разработанный нами код, чтобы предоставить пользователю кнопку Record (Запись).

При нажатии этой кнопки метод record выполняется применительно к файлу, путь к которому уже проставлен. После этого становится видна кнопка Stop (Стоп), а кнопка Record (Запись) становится невидимой. После нажатия кнопки Stop (Стоп) вызывается метод stop Record и кнопка Record (Запись) вновь становится видимой:

Запись аудио с применением намерений

Проще всего записывать аудио с помощью Intent. Просто создайте намерение (intent) MediaStore.Audio. Medi а. RECORD_SOUND_ACTION и запустите его методом startActivity ForResultO, запуск происходит из активности Activity. Так запускается стандартный инструмент записи аудио, который имеется на большинстве устройств с Android. Далее записывается определенное аудио:

После того как запись завершится и инструмент аудиозаписи закончит работу, ваша активность Activity, сделавшая вызов к startActi vityForResult О, будет снова перенесена на передний план. Когда это произойдет, метод onActi vityResult(), относящийся к вашей активности Activity, будет запущен с указанным вами кодом запроса (requestCode), в данном случае – 1, кодом результата (ОК или ошибка) и с намерением, несущим уникальный идентификатор ресурса, который указывает на записанный аудиофайл:

Запись аудио с применением AudioRecorder

Параллельно с Audi oTrack, Audi oRecorder предоставляет гораздо более прямой способ записи:

Метод AudioRecord указывает тип источника, с которого будет вестись запись (микрофон, камкордер, голосовой вызов), частоту дискретизации в герцах (44100, 22050 или 11025), конфигурацию аудио (моно или стерео), формат/кодировку аудио и длину буфера в байтах. Обратите внимание на то, что именно размер этого буфера определяет, как долго AudioRecord сможет вести запись до того, как начнет «наслаивать» данные, которые пока еще не считаны. Данные должны считываться с аудиооборудования более мелкими фрагментами, чем общий размер буфера записи. Метод AudioRecord в Android достаточно сконфигурировать один раз, после чего он автоматически будет распознавать, как взаимодействовать с оборудованием конкретного устройства. Поэтому работа с программой будет протекать без всяких проблем.

Чтобы начать запись, переведите AudioRecord в состояние Record (Запись) и начинайте циклически считывать данные из аппаратного буфера:

Чтобы остановить запись, переведите Audi oRecord в состояние Stop (Стоп). Если вы больше не собираетесь ничего записывать, то не забудьте высвободить все ресурсы, которые были вовлечены в процесс записи. В противном случае можно вызвать метод startRecording(), чтобы вновь начать запись:

Запись видео

Видео можно записывать двумя способами: с помощью Medi aRecorder или посредством Intent. Запись необработанной информации не поддерживается, как и в случае с аудио.

Запись видео с применением MediaRecorder

Процесс записи видео с применением MediaRecorder во многом напоминает аналогичный процесс с аудио. Инициализируется MediaRecorder, подготавливается источник данных, потом Medi aRecorder запускается. Можно предложить пользователю окно предварительного просмотра, чтобы он мог отслеживать снимаемое видео. Для этого, как и для воспроизведения аудио, предоставляется поверхность – о ней мы говорили выше. Обычно применяется вид VideoView:

Запись видео с применением намерений

Запись видео с использованием намерений напоминает аналогичный процесс с аудио. В таком случае применяется намерение MediaStore.ACTION_VIDEO_CAPTURE, результирующие данные – это URI видеофайла.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии