Мы используем cookie, чтобы сайт был лучше для вас.
Внимание
У Вас отключена поддержка Cookie в браузере. Возможно некорректное отображение сайта!

Как создать приложение для мобильного стриминга на Android

Прямые трансляции с мобильных устройств позволяют поддерживать связь с аудиторией, где бы вы ни находились. Сервисы, которые предоставляют такую возможность, пользуются огромной популярностью и используются в самых разных сферах.

В этой статье подробно рассмотрим, как создать собственное приложение для мобильного стриминга и просмотра прямых трансляций на Android, и разберём, как интегрировать его со стриминговой платформой EdgeЦентр.

Как создать приложение для мобильного стриминга на Android
Мобильный стриминг с помощью стриминговой платформы EdgeЦентр

Протоколы потоковой передачи

Для отправки видео и аудио через публичные сети используются протоколы потоковой передачи. Один из самых популярных протоколов для доставки потоков — RTMP. Его приём поддерживают большинство стриминговых платформ. Он надёжный и отлично подходит для проведения прямых эфиров благодаря низкой задержке и ретрансляции пакетов данных на основе протокола TCP.

Для распространения и воспроизведения контента на устройствах пользователей стриминговые платформы предлагают популярные и масштабируемые форматы вещания — HLS и DASH. Устройства на Android оснащены нативным плеером MediaPlayer, который поддерживает воспроизведение HLS, поэтому остановимся именно на этом протоколе.

Выбор библиотеки для формирования RTMP-потока

Опенсорс-решений для RTMP-стриминга с Android-устройств немного, а действительно рабочих вариантов ещё меньше. Давайте рассмотрим некоторые из них.

1. rtmp-rtsp-stream-client-java

Плюсы:

  • Свежая библиотека, стабильно обновляется
  • Поддержка минимальной API 16
  • Поддержка Camera и Camera2 API
  • Переключение камеры во время трансляции
  • Адаптивный битрейт
  • Включение и выключение аудио и видео во время трансляции
  • Возможность настроить параметры трансляции
  • Установка OpenGL-фильтров, изображений, GIF или текста в реальном времени
  • Простое использование: всё работает «из коробки», без дополнительных манипуляций
  • Наличие документации и инструкций ĸ библиотеке на GitHub
  • Удобный импорт библиотеки через Gradle

Минусы:

  • Отсутствует функция приостановки трансляции

2. HaishinKit

Плюсы:

  • Стабильно обновляется
  • Поддерживает воспроизведение RTMP
  • Использует актуальный Camera2 API
  • Поддерживает переключение камеры во время трансляции
  • Позволяет настроить параметры трансляции

Минусы:

  • Отсутствует возможность использования адаптивного битрейта
  • Отсутствует функция приостановки трансляции

3. LiveVideoBroadcaster

Плюсы:

  • Поддержка минимального API 28
  • Переключение камеры во время трансляции
  • Адаптивное качество трансляции (фреймрейт и битрейт)
  • Включение и отключение аудио во время трансляции

Минусы:

  • Устаревшая: последний ĸоммит — 28.07.2020
  • Использует устаревший Camera API
  • Отсутствует импорт библиотеки через Gradle
  • Значительно сложнее в реализации, чем rtmp-rtsp-stream-client-java
  • Фреймы, отправляемые библиотекой, содержат ошибки (DC, AC, MV)

В итоге из трёх вариантов больше всего плюсов и меньше всего минусов у rtmp-rtsp-stream-client-java. Поэтому мы считаем эту библиотеку самым подходящим решением.

Реализация стриминга по RTMP-протоколу с Android-смартфона

В библиотеке rtmp-rtsp-stream-client-java есть два типа объектов для стриминга: RtmpCamera1 и RtmpCamera2. В первом для захвата потока с камеры смартфона используется Camera API, во втором — Camera2 API.

Мы рекомендуем использовать RtmpCamera2, так как Camera API устарел начиная с Android API level 21. В нашем примере мы используем актуальный RtmpCamera2.

Сейчас мы пошагово рассмотрим, как использовать библиотеку rtmp-rtsp-stream-client-java для мобильного стриминга. Но сначала давайте кратко разберём схему её работы.

  • При вызове метода происходит захват камеры.
  • Захваченная сессия камеры поступает на вход OpenGlView, где показывается пользователю.
  • При вызове метода устанавливается соединение с удаленным сервером.
  • Захваченная сессия с камеры передаётся по RTMP-протоколу на указанный rtmpUrl.

А теперь давайте пошагово разберём, как организовать мобильный онлайн-стриминг.

1. Init

Чтобы использовать библиотеку rtmp-rtsp-stream-client-java в своём проекте, необходимо добавить зависимости в build.gradle:

Актуальная версия библиотеки

2. Разрешения

Указываем необходимые разрешения в файле AndroidManifest.xml:

3. Отображение потока с камеры

При стриминге с камеры смартфона нужно видеть, что транслируется. Для этого есть соответствующий View, который будет отображать поток с камеры на экране. В Android используется SurfaceView или TextureView. Ещё в используемой библиотеке есть собственный OpenGlView, который наследуется от SurfaceView.

С RtmpCamera1 можно использовать любой из этих View, а с RtmpCamera2 доступен только OpenGlView. Но среди них только он позволяет использовать различные фильтры, изображения, GIF или текст во время трансляции.

Добавляем OpenGlView ĸ Layout Activity или Fragment, чтобы видеть поток с камеры:

Как создать приложение для мобильного стриминга на Android

4. Подготовка к трансляции

Чтобы инициализировать объект RtmpCamera2, нужен объект OpenGlView и реализация интерфейса ConnectCheckerRtmp:

Для использования адаптивного битрейта вносим дополнения в реализацию этого интерфейса:

В объект OpenGlView добавляем ĸоллбэĸ, в соответствующих методах которого будем запускать и останавливать превью с камеры:

Создаём объект RtmpCamera2, с помощью которого будет осуществляться стриминг:

5. Запуск и остановка прямого эфира

Задаём параметры видео и аудио, запускаем трансляцию.

Прямой эфир с параметрами по умолчанию:

Прямой эфир с кастомными параметрами:

Останавливаем эфир:

Интеграция со стриминговой платформой EdgeЦентр

Для взаимодействия со стриминговой платформой EdgeЦентр будем использовать EdgeЦентр API. Запросы будем выполнять с помощью Retrofit совместно с RxJava. При желании можно использовать любой другой способ отправки HTTP-запросов.

Авторизация

Для работы с API нужно авторизоваться. Используем указанные при регистрации email и пароль для получения Access Token, который нужно будет использовать в следующих запросах.

Получение PUSH URL

Получить URL для отправки RTMP-потока можно двумя способами:

Способ 1. Отправить запрос Get all live streams для получения всех live-потоков. В ответе мы получим данные по всем созданным в аккаунте потокам.

Пример отправки запроса:

Способ 2. Отправить запрос Get live stream для получения конкретного live-потока. В ответе мы получим информацию только о запрошенном потоке, если такой существует.

Пример отправки запроса:

Из ответов на эти запросы получаем push_url и используем его в качестве URL для отправки RTMP-потока. После начала стрима трансляция запустится автоматически. Выбираем нужный поток в личном кабинете. Можно воспользоваться предварительным просмотром, прежде чем публиковать стрим на свой сайт или в плеер.

Воспроизведение активной трансляции

С помощью стриминговой платформы EdgeЦентр можно показать трансляцию на сторонних ресурсах в разных форматах, в том числе в HLS.

Одновременное проведение и воспроизведение трансляции на одном устройстве мы в нашем примере рассматривать не будем. Стриминг должен быть запущен с любого другого устройства.

Для воспроизведения активной трансляции используем стандартный плеер MediaPlayer Android. Если вы хотите получить больше контроля над потоком и возможность кастомизировать плеер, мы рекомендуем использовать ExoPlayer.

Отображение на экране

Для отображения видеопотока на экране смартфона понадобится VideoView. Его нужно добавить в Layout Activity или Fragment, в котором вы планируете воспроизводить трансляцию:

Запуск воспроизведения

Перед воспроизведением нужно встроить hls_playlist_url активной трансляции в плеер при его инициализации. hls_playlist_url возвращается в ответе на запрос Get live stream, о котором мы говорили выше.

Инициализация плеера:

Как только инициализация завершится, запускаем воспроизведение вызовом метода videoView.start().

Запуск плеера:

Подведём итоги

Организовать онлайн-трансляцию в Android-приложении с помощью наших примеров довольно просто и не займёт много времени. Всё, что вам понадобится, — это опенсорс-библиотека rtmp-rtsp-stream-client-java и наша стриминговая платформа.

Подпишитесь на полезную рассылку

Выгодные предложения и важные новости раз в месяц. Без спама

Нажимая кнопку «Подписаться», я даю согласие на получение рекламно-информационной рассылки согласно Политике