Skip to content

VLprojects/livedigital-android-sdk-binary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 

Repository files navigation

livedigital SDK

Этот репозиторий содержит сборки нативной реализации 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

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‑репозиторий

  1. Добавьте следующее в build.gradle проекта:
dependencyResolutionManagement {
    repositories {
        maven {
            setUrl("https://raw.github.com/VLprojects/livedigital-android-sdk-binary/master")
        }
    }
}
  1. Добавьте зависимость в 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).