Прямые трансляции с мобильных устройств позволяют поддерживать связь с аудиторией, где бы вы ни находились. Сервисы, которые предоставляют такую возможность, пользуются огромной популярностью и используются в самых разных сферах.
В прошлой статье «Как создать приложение для мобильного стриминга на Android» мы говорили о том, как организовать стриминг на Android. А в этом материале подробно рассмотрим, как создать собственное приложение для мобильного стриминга и просмотра прямых трансляций на iOS, и разберём, как интегрировать его со стриминговой платформой EdgeЦентр.
Для отправки видео и аудио через публичные сети используются протоколы потоковой передачи. Один из самых популярных протоколов для доставки потоков — RTMP. Его приём поддерживают большинство стриминговых платформ. Он надёжный и отлично подходит для проведения прямых эфиров благодаря низкой задержке и ретрансляции пакетов данных на основе протокола TCP.
Для распространения и воспроизведения контента на устройствах пользователей стриминговые платформы предлагают популярные и масштабируемые форматы вещания — HLS и DASH. Устройства на iOS оснащены нативным плеером AVPlayer, который поддерживает воспроизведение HLS, поэтому остановимся именно на этом протоколе.
Опенсорс-решений для RTMP-стриминга с iOS-устройств немного, а действительно рабочих вариантов ещё меньше. Давайте рассмотрим основные:
Учитывая всё это, самой подходящей библиотекой будет HaishinKit. Это свежее, рабочее и при этом бесплатное решение с хорошей документацией.
К тому же у HaishinKit много плюсов:
Но есть и несколько минусов:
В библиотеке есть два типа объектов для стриминга: RTMPStream и RTMPConnection.
Давайте пошагово разберём, как организовать мобильный стриминг.
Чтобы использовать библиотеку HaishinKit в своём проекте, нужно добавить её через SPM, указав:
Указываем необходимые разрешения в Info.plist проекта:
При стриминге с камеры смартфона нужно видеть, что транслируется. Для этого есть соответствующий View, который будет отображать поток с камеры на экране. В iOS для этих целей используется объект класса MTHKView, ĸ которому прикрепляется объект RTMPStream.
Прежде всего нужно настроить и активировать AVAudioSession. Сделать это можно в классе приложения AppDelegate:
Создаём объекты RTMPConnection и RTMPStream:
Задаём параметры потока rtmpStream:
Для реализации адаптивного битрейта и разрешения видео используется два метода RTMPStreamDelegate:
Пример реализации:
Apple не позволяет снимать видео в фоне, а значит, библиотека не может отправлять видеофрагменты на сервер. На стороне сервера из-за этого возникают сбои, и трансляция прерывается.
Чтобы исправить этот недостаток, нужна версия библиотеки с расширенным функционалом.
Подключаемся к серверу и запускаем трансляцию:
Чтобы поставить стрим на паузу, используем булевое свойство paused со значением true:
Для взаимодействия со стриминговой платформой EdgeЦентр будем использовать EdgeЦентр API. Запросы будем выполнять нативным кодом с помощью методов структуры NetworkManager, которая передает данные в класс HTTPCommunication. Парсинг данных происходит через протокол CodingKey при помощи структуры DataParser. При желании можно использовать любую другую библиотеку HTTP.
Пример метода для создания запроса:
Для работы с API нужно авторизоваться. Используем указанные при регистрации email и пароль для получения Access Token, который нужно будет использовать в следующих запросах.
Получить 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Центр.