Skip to content

Commit 7782a31

Browse files
Merge pull request #1 from VLprojects/LDI-1553-add-readme
docs: Add relevant readme file
2 parents 0b286ae + 6927343 commit 7782a31

File tree

1 file changed

+72
-2
lines changed

1 file changed

+72
-2
lines changed

README.md

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,72 @@
1-
# livedigital-ios-sdk-binary
2-
LiveDigitalSDK public builds (binary XCFramework)
1+
# livedigital SDK
2+
3+
Этот репозиторий содержит сборки нативной реализации livedigital SDK для iOS в формате толстого бинарного XCFramework.
4+
5+
livedigital SDK — клиент сервиса livedigital (https://docs.livedigital.space). SDK реализует
6+
* сигналинг (подключение, обмен командами с медиа-сервером)
7+
* логику восстановления соединения при реконнекте
8+
* анализ качества соединения
9+
* работу с входящими и исходящими медиа-треками
10+
* работу с видео-слоями
11+
* размытие и замену фона для исходящего видео
12+
* логику выделения активного спикера
13+
* транспорт для передачи команд и мета-данных специфичных для приложения
14+
15+
## Совместимость
16+
17+
* устройства iOS / iPadOS 16+
18+
* симуляторы iOS / iPadOS 16+
19+
20+
Поддержка iOS 15 есть, но находится в стадии deprecated. Стабильность работы на ней не тестируется и не гарантируется. Поддержка может быть прекращена в скором времени.
21+
22+
SDK поддерживает работу на симуляторах, однако полноценное тестирование должно проводиться на реальном устройстве, т.к. имплементация работы с камерой, размытие фона, набор поддерживаемых кодеков и видео-форматов могут отличаться.
23+
24+
## Подключение
25+
26+
Доступны два способа подключения через менеджеры зависимостей — CocoaPods и SwiftPM. Мы рекомендуем использовать SwiftPM как более актуальное и современное решение.
27+
28+
Мы рекомендуем фиксировать точную версию зависимости (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`), т.к. выпуск мажорного релиза обычно связан с необходимостью изменений в коде приложения.
29+
30+
Подключать зависимость нужно в таргет приложения, а также в таргеты расширений которые могут использовать SDK (например Broadcast Upload Extension для демонстрации экрана, если оно реулизуется).
31+
32+
### Swift Package Manager
33+
34+
* Подключить пакет `LiveDigitalSDK` из репозитория `https://github.com/VLprojects/livedigital-ios-sdk-binary.git`.
35+
* Из пакета добавить единственную публичную библиотеку `LiveDigitalSDK` в необходимые таргеты.
36+
37+
### CocoaPods
38+
39+
*Несмотря на то что livedigital SDK публикуется в CocoaPods Trunk репозиторий, мы рекомендуем подключать нашу и все остальные зависимости не из Trunk, а напрямую указывая репозиторий и конкретную версию или тег. CocoaPods Trunk будет закрыт в 2026 году, после чего там не будут публиковаться новые версии.*
40+
41+
* Добавить под `LiveDigitalSDK` в необходимые таргеты
42+
```Ruby
43+
pod 'LiveDigitalSDK',
44+
:git => 'https://github.com/VLprojects/livedigital-ios-sdk-binary',
45+
:tag => '2.12.3'
46+
```
47+
* Установить зависимости командой `pod install --repo-update`.
48+
49+
## Пример интеграции и демо
50+
51+
Этот репозиторий содержит папку Example с проектом демонстрирующим интеграцию и использование livedigital SDK. Example проект выполнен в минималистичном духе и не должен рассматриваться с точки зрения удобства UX, красоты кода и архитектуры, надёжности решений и т.д.
52+
53+
Исходный код общий, но проектных файла два:
54+
55+
* SPM_Example.xcodeproj — SDK подключено через SwiftPM. Для начала работы можно просто открыть проект.
56+
* CP_Example.xcworkspace — SDK подключено через CocoaPods. Перед открытием проекта (воркспейса) нужно установить зависимости выполнив команду `pod install --repo-update`.
57+
58+
Для запуска на реальном устройстве нужно предварительно настроить подписывание приложения на вкладке Signing & Capabilities в настройках таргета `LiveDigitalSDKExample` используя свой Apple Developer Account.
59+
60+
При запуске приложения показывается экран `StartVC` содержащий поля для ввода идентификатора спейса(группы) и комнаты.
61+
62+
Основная работа сосредоточена в классе `SessionVC`, который отвечает за сессию "звонка" или "конференции". При первом запуске будут запрошены доступы к камере и микрофону. Для сохранения простоты Example проекта, он не реализует полноценной обработки ситуации когда разрешения не выданы. После выдачи разрешений происходит подключение к комнате. В верхней части экрана отображается локальный участник с кнопками включения микрофона и камеры. Основную часть экрана занимает сетка участников с горизонтальной прокруткой.
63+
64+
Для простоты проверки работы SDK, в Example проекте в комнате участники видят не только друг друга, но и себя (с аудио и видео прошедшими до медиа-сервера и обратно). Таким образом можно протестировать работу SDK используюя всего одно устройство. При подключении нескольких участников к одной комнате это может мешать тестированию звука, так что можно отключить получение медиа-треков собственного участника удалив строку `channelSession.shouldShowLocalPeer = true`. Для удобства тестирования можно зайти в ту же комнату через веб-приложение livedigital. Сссылку на тестовую комнату можно получить у нашей команды.
65+
66+
Горизонтальный свайп по своему превью переключает камеру между фронтальной и основной. Долгое нажатие на кнопку микрофона показывает меню выбора звукового устройства.
67+
68+
Example приложение кроме базовой работы с SDK реализует две часто востребованные механики:
69+
70+
* Обмен мета-данными участников. При старте сессии (`engine.connectToChannel(...)`) передаётся параметр `peerPayload: ["name": UIDevice.current.name]`. Передаваемое значение (словарь) может содержать набор произвольных ключей и значений, с которыми работает приложение — имя пользователя, userId в терминах приложения, версия приложения, статус пользователя и т.д.. Во время сессии пользователь может обновлять свои мета-данные через метод `self.channelSession?.updatePeerPayload(...)`. Другие участники находящиеся в комнате могут прочитать метаданные друг друга через свойство `peer.payload`, а также могут получать обновления метаданных в режиме реального времени в callback метод `gotPeerAppDataUpdates(_ updates:)`.
71+
72+
* Пауза невидимых входящих видео-потоков. SDK позволяет сократить нагрзку на сеть и батарею пользователя ставя ненужные в данный момент входяшие медиа-потоки на паузу. Например если приложение свёрнуто — достаточно получать только аудио, а видео поток остановить. Если в комнате находятся 12 участников, но на экране видны только 2 — остальные 10 потоков можно поставить на паузу. Пример реализации этой механики находится в методе `updateVisiblePeersVideos`.

0 commit comments

Comments
 (0)