Этот репозиторий содержит сборки нативной реализации livedigital SDK для Android в формате толстого бинарного файла.
livedigital SDK — клиент сервиса livedigital (https://docs.livedigital.space). SDK реализует
- сигналинг (подключение, обмен командами с медиа-сервером)
- логику восстановления соединения при реконнекте
- анализ качества соединения
- работу с входящими и исходящими медиа-треками
- работу с видео-слоями
- размытие и замену фона для исходящего видео
- логику выделения активного спикера
- транспорт для передачи команд и мета-данных специфичных для приложения
- устройства Android / Android 9+
- эмуляторы Android / Android 9+
Android target sdk = 15 (35 api)
SDK поддерживает работу на эмуляторах, однако полноценное тестирование следует проводить на реальном устройстве, т.к. имплементация работы с камерой, размытие фона, набор поддерживаемых кодеков и видео-форматов могут отличаться.
Kotlin версии 2.1.20
SDK использует зависимости:
| Библиотека | Group:Artifact | Версия |
|---|---|---|
| Kotlinx Serialization JSON | org.jetbrains.kotlinx:kotlinx-serialization-json |
1.8.0 |
| Retrofit | com.squareup.retrofit2:retrofit |
2.11.0 |
| Retrofit Serialization Converter | com.squareup.retrofit2:converter-kotlinx-serialization |
2.11.0 |
| Socket.IO Client | io.socket:socket.io-client |
2.1.2 |
| ML Kit Segmentation Selfie | com.google.mlkit:segmentation-selfie |
16.0.0-beta6 |
Подключение происходит через Maven‑репозиторий
- Добавьте следующее в
build.gradleпроекта:
dependencyResolutionManagement {
repositories {
maven {
setUrl("https://raw.github.com/VLprojects/livedigital-android-sdk-binary/master")
}
}
}
- Добавьте зависимость в
build.gradleнужного модуля:
dependencies {
implementation("com.github.vlprojects:livedigital-android-sdk:1.4.0")
}
Этот репозиторий содержит папку Example с проектом демонстрирующим интеграцию и использование livedigital SDK. Example проект выполнен в минималистичном духе и не должен рассматриваться с точки зрения удобства UX, красоты кода и архитектуры, надёжности решений и т.д.
В приложении реализован Foreground Service CallService для работы в фоне(так как Android начиная с 15, ограничивает сетевые запросы, если процесс приложения не активен). Также в приложении реализован механизм выключения локальной камеры при переходе приложения в фон (так как Android ограничивает работу камеры в фоне ~5 секундами)
При запуске проекта происходит запрос разрешения на отправку уведомления(нужный для работы Foreground Service, сценарий отказа в example не предусмотрен). После успешного получения разрешения вход в комнату и запуск CallService. Группа и комната зашиты внутри companion object MainViewModel.kt. Также в комментарии над классом MainActivity есть ссылка для подключения в комнату с web версии.
Основная работа сосредоточена в классах MainActivity и MainViewModel, которые отвечает за сессию "звонка" или "конференции".
Для успешного подключения к комнате в ней должен присутствовать пользователь с web версии.
Во время нахождения в комнате доступны следующие действия:
- Переподключение к комнате по нажатию на кнопку Restart
- Включение/выключение камеры по нажатию на кнопку Camera (при первом нажатии будет запрошено разрешение на работу с камерой, обработка отказа в рамках example не предусмотрена)
- Включение/выключение микрофона по нажатию на кнопку Mic (при первом нажатии будет запрошено разрешение на работу с микрофонм, обработка отказа в рамках example не предусмотрена)
- Переключение девайса отвечающего за аудио (при первом нажатии будет запрошено разрешение на работу с Bluetooth, обработка отказа в рамках example не предусмотрена)
- Переключение между фронтальной и основной камерами по нажатию на кнопку Switch camera
Видео с локальной камеры отображается в правом нижнем углу сетки участников. Видео удаленного участника отображается на весь размер сетки. Для переключения между удаленными участниками нужно сделать свайп вправо/влево.
Example приложение кроме базовой работы с SDK реализует часто востребованную механику:
- Обмен мета-данными участников. При старте сессии (
liveDigitalEngine?.connectToChannel(...)) передаётся параметрchannelSessionParamsвнутри которого есть поле appData. appData - этоJsonObject, который может содержать набор произвольных ключей и значений, с которыми работает приложение — имя пользователя, userId в терминах приложения, версия приложения, статус пользователя и т.д.. Во время сессии пользователь может обновлять свои мета-данные через методsession?.updateMyPeerAppData(...). Другие участники находящиеся в комнате могут прочитать метаданные друг друга через свойствоpeer.appData, а также могут получать обновления метаданных в режиме реального времени в callback методpeerAppDataUpdated(peerId: PeerId, appData: JSONObject).