Этот репозиторий содержит сборки нативной реализации livedigital SDK для iOS в формате толстого бинарного XCFramework.
livedigital SDK — клиент сервиса livedigital (https://docs.livedigital.space). SDK реализует
- сигналинг (подключение, обмен командами с медиа-сервером)
- логику восстановления соединения при реконнекте
- анализ качества соединения
- работу с входящими и исходящими медиа-треками
- работу с видео-слоями
- размытие и замену фона для исходящего видео
- логику выделения активного спикера
- транспорт для передачи команд и мета-данных специфичных для приложения
- устройства iOS / iPadOS 16+
- симуляторы iOS / iPadOS 16+
Поддержка iOS 15 есть, но находится в стадии deprecated. Стабильность работы на ней не тестируется и не гарантируется. Поддержка может быть прекращена в скором времени.
SDK поддерживает работу на симуляторах, однако полноценное тестирование должно проводиться на реальном устройстве, т.к. имплементация работы с камерой, размытие фона, набор поддерживаемых кодеков и видео-форматов могут отличаться.
Доступны два способа подключения через менеджеры зависимостей — CocoaPods и SwiftPM. Мы рекомендуем использовать SwiftPM как более актуальное и современное решение.
Мы рекомендуем фиксировать точную версию зависимости (SPM: Exact Version: 2.12.3 / CP: :tag => '2.12.3') и обновлять любые зависимости по мере необходимости только вручную. Как минимум необходимо зафиксировать мажорную версию (SPM: Up to Next Major Version: 2.12.0 < 3.0.0 / CP: ~> 2.12), т.к. выпуск мажорного релиза обычно связан с необходимостью изменений в коде приложения.
Подключать зависимость нужно в таргет приложения, а также в таргеты расширений которые могут использовать SDK (например Broadcast Upload Extension для демонстрации экрана, если оно реулизуется).
- Подключить пакет
LiveDigitalSDKиз репозиторияhttps://github.com/VLprojects/livedigital-ios-sdk-binary.git. - Из пакета добавить единственную публичную библиотеку
LiveDigitalSDKв необходимые таргеты.
Несмотря на то что livedigital SDK публикуется в CocoaPods Trunk репозиторий, мы рекомендуем подключать нашу и все остальные зависимости не из Trunk, а напрямую указывая репозиторий и конкретную версию или тег. CocoaPods Trunk будет закрыт в 2026 году, после чего там не будут публиковаться новые версии.
- Добавить под
LiveDigitalSDKв необходимые таргетыpod 'LiveDigitalSDK', :git => 'https://github.com/VLprojects/livedigital-ios-sdk-binary', :tag => '2.12.3'
- Установить зависимости командой
pod install --repo-update.
Этот репозиторий содержит папку Example с проектом демонстрирующим интеграцию и использование livedigital SDK. Example проект выполнен в минималистичном духе и не должен рассматриваться с точки зрения удобства UX, красоты кода и архитектуры, надёжности решений и т.д.
Исходный код общий, но проектных файла два:
- SPM_Example.xcodeproj — SDK подключено через SwiftPM. Для начала работы можно просто открыть проект.
- CP_Example.xcworkspace — SDK подключено через CocoaPods. Перед открытием проекта (воркспейса) нужно установить зависимости выполнив команду
pod install --repo-update.
Для запуска на реальном устройстве нужно предварительно настроить подписывание приложения на вкладке Signing & Capabilities в настройках таргета LiveDigitalSDKExample используя свой Apple Developer Account.
При запуске приложения показывается экран StartVC содержащий поля для ввода идентификатора спейса(группы) и комнаты.
Основная работа сосредоточена в классе SessionVC, который отвечает за сессию "звонка" или "конференции". При первом запуске будут запрошены доступы к камере и микрофону. Для сохранения простоты Example проекта, он не реализует полноценной обработки ситуации когда разрешения не выданы. После выдачи разрешений происходит подключение к комнате. В верхней части экрана отображается локальный участник с кнопками включения микрофона и камеры. Основную часть экрана занимает сетка участников с горизонтальной прокруткой.
Для простоты проверки работы SDK, в Example проекте в комнате участники видят не только друг друга, но и себя (с аудио и видео прошедшими до медиа-сервера и обратно). Таким образом можно протестировать работу SDK используюя всего одно устройство. При подключении нескольких участников к одной комнате это может мешать тестированию звука, так что можно отключить получение медиа-треков собственного участника удалив строку channelSession.shouldShowLocalPeer = true. Для удобства тестирования можно зайти в ту же комнату через веб-приложение livedigital. Сссылку на тестовую комнату можно получить у нашей команды.
Горизонтальный свайп по своему превью переключает камеру между фронтальной и основной. Долгое нажатие на кнопку микрофона показывает меню выбора звукового устройства.
Example приложение кроме базовой работы с SDK реализует две часто востребованные механики:
-
Обмен мета-данными участников. При старте сессии (
engine.connectToChannel(...)) передаётся параметрpeerPayload: ["name": UIDevice.current.name]. Передаваемое значение (словарь) может содержать набор произвольных ключей и значений, с которыми работает приложение — имя пользователя, userId в терминах приложения, версия приложения, статус пользователя и т.д.. Во время сессии пользователь может обновлять свои мета-данные через методself.channelSession?.updatePeerPayload(...). Другие участники находящиеся в комнате могут прочитать метаданные друг друга через свойствоpeer.payload, а также могут получать обновления метаданных в режиме реального времени в callback методgotPeerAppDataUpdates(_ updates:). -
Пауза невидимых входящих видео-потоков. SDK позволяет сократить нагрзку на сеть и батарею пользователя ставя ненужные в данный момент входяшие медиа-потоки на паузу. Например если приложение свёрнуто — достаточно получать только аудио, а видео поток остановить. Если в комнате находятся 12 участников, но на экране видны только 2 — остальные 10 потоков можно поставить на паузу. Пример реализации этой механики находится в методе
updateVisiblePeersVideos.