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

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

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

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

Мобильный стриминг с помощью стриминговой платформы EdgeЦентр
Мобильный стриминг с помощью стриминговой платформы EdgeЦентр

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

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

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

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

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

  • LFLiveKit — устаревшее: последний коммит — 21.12.2016.
  • HaishinKit — поддерживается на текущий момент, бесплатное.
  • Larix SDK — рабочее решение, но платное ($300 за предоставление исходников).
  • KSYLive — устаревшее: последний коммит — 22.03.2020, описание на китайском языке.

Учитывая всё это, самой подходящей библиотекой будет HaishinKit. Это свежее, рабочее и при этом бесплатное решение с хорошей документацией.

К тому же у HaishinKit много плюсов:

  • Постоянно обновляется
  • Поддерживает воспроизведение RTMP
  • Удобно устанавливается в приложение
  • Скрывает работу с AVCaptureSession внутри себя: удобно, когда приложению не нужна дополнительная работа с сессией
  • Поддерживает переключение и отключение камеры, отключение микрофона во время трансляции
  • Умеет изменять разрешение, битрейт, включать и выключать видео и аудио во время трансляции
  • Даёт возможность достаточно гибко настроить параметры трансляции
  • Есть возможность ставить трансляцию на паузу

Но есть и несколько минусов:

  • Нет возможности использовать адаптивный битрейт
  • Скрывает работу с AVCaptureSession внутри себя — это может вызвать проблемы, когда необходимы какие-либо действия с поступающими аудио и видео

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

В библиотеке есть два типа объектов для стриминга: RTMPStream и RTMPConnection.

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

1. Init

Чтобы использовать библиотеку HaishinKit в своём проекте, нужно добавить её через SPM, указав:

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

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

Указываем необходимые разрешения в Info.plist проекта:

  • NSMicrophoneUsageDescription (Privacy — Microphone Usage Description).
  • NSCameraUsageDescription (Privacy — Camera Usage Description).

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

При стриминге с камеры смартфона нужно видеть, что транслируется. Для этого есть соответствующий View, который будет отображать поток с камеры на экране. В iOS для этих целей используется объект класса MTHKView, ĸ которому прикрепляется объект RTMPStream.

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

Прежде всего нужно настроить и активировать AVAudioSession. Сделать это можно в классе приложения AppDelegate:

Создаём объекты RTMPConnection и RTMPStream:

Задаём параметры потока rtmpStream:

HaishinKit settings

5. Адаптивные битрейт и разрешение видео

Для реализации адаптивного битрейта и разрешения видео используется два метода RTMPStreamDelegate:

  1. — метод вызывается каждую секунду при достаточной пропускной способности, используется для увеличения.
  2. — метод вызывается при недостаточной пропускной способности, используется для снижения.

Пример реализации:

6. Фоновый стриминг

Apple не позволяет снимать видео в фоне, а значит, библиотека не может отправлять видеофрагменты на сервер. На стороне сервера из-за этого возникают сбои, и трансляция прерывается.

Чтобы исправить этот недостаток, нужна версия библиотеки с расширенным функционалом.

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

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

Чтобы поставить стрим на паузу, используем булевое свойство paused со значением true:

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

Для взаимодействия со стриминговой платформой EdgeЦентр будем использовать EdgeЦентр API. Запросы будем выполнять нативным кодом с помощью методов структуры NetworkManager, которая передает данные в класс HTTPCommunication. Парсинг данных происходит через протокол CodingKey при помощи структуры DataParser. При желании можно использовать любую другую библиотеку 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.

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

Для воспроизведения активной трансляции используем стандартный плеер AVPlayer.

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

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

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

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

Организовать онлайн-трансляцию в iOS-приложении с помощью наших примеров довольно просто и не займёт много времени. Всё, что вам понадобится, — это опенсорс-библиотека HaishinKit и стриминговая платформа EdgeЦентр.

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

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

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