Skip to content
 
 

Latest commit

 

History

875 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiveKit 图标、仓库名称以及一些背景示例代码。

LiveKit Android Kotlin SDK

Maven Central

使用此 SDK 为你的 Android/Kotlin 应用添加实时视频、音频和数据功能。通过连接到 LiveKit Cloud 或自托管服务器,只需几行代码即可构建多模态 AI、直播或视频通话等应用。

目录

文档

文档和指南请访问 https://docs.livekit.io

API 参考文档请访问 https://docs.livekit.io/client-sdk-android/index.html

Note

这是 Android SDK 的 v2 版本。从 v1.x 迁移到 v2.x 时可能会遇到少量破坏性变更。 请阅读迁移指南了解变更的详细概述。

安装

LiveKit for Android 以 Maven 包的形式发布。

...
dependencies {
  def livekit_version = "2.25.3"

  implementation "io.livekit:livekit-android:$livekit_version"

  // CameraX 支持,含捏合缩放、闪光灯控制等
  implementation "io.livekit:livekit-android-camerax:$livekit_version"

  // 轨道处理器,如虚拟背景
  implementation "io.livekit:livekit-android-track-processors:$livekit_version"

  // 最新开发版本的快照:
  // implementation "io.livekit:livekit-android:2.25.4-SNAPSHOT"
}

基于 Compose 的应用请查看 Android Components SDK 获取 Compose 组件支持。

此外还需要 JitPack 作为仓库之一。在 settings.gradle 中:

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        //...
        maven { url 'https://jitpack.io' }

        // 如需 SNAPSHOT 版本访问
        // maven { url 'https://central.sonatype.com/repository/maven-snapshots/' }
    }
}

使用方法

权限

LiveKit 依赖 RECORD_AUDIOCAMERA 权限来使用麦克风和摄像头。这些权限必须在运行时请求。参考示例应用了解示例。

发布摄像头和麦克风

room.localParticipant.setCameraEnabled(true)
room.localParticipant.setMicrophoneEnabled(true)

屏幕共享

// 创建一个用于屏幕采集的 intent launcher
// 必须在 onCreate() 之前注册,最好作为实例属性
val screenCaptureIntentLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    val resultCode = result.resultCode
    val data = result.data
    if (resultCode != Activity.RESULT_OK || data == null) {
        return@registerForActivityResult
    }
    lifecycleScope.launch {
        room.localParticipant.setScreenShareEnabled(true, data)
    }
}

// 需要开启屏幕共享时,执行以下操作
val mediaProjectionManager =
    getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
screenCaptureIntentLauncher.launch(mediaProjectionManager.createScreenCaptureIntent())

渲染订阅的轨道

LiveKit 使用 SurfaceViewRenderer 来渲染视频轨道。同时也通过 TextureViewRenderer 提供了 TextureView 实现。订阅的音频轨道会自动播放。

class MainActivity : AppCompatActivity() {

    lateinit var room: Room

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        // 创建 Room 对象。
        room = LiveKit.create(applicationContext)

        // 设置视频渲染器
        room.initVideoRenderer(findViewById<SurfaceViewRenderer>(R.id.renderer))

        connectToRoom()
    }

    private fun connectToRoom() {

        val url = "wss://your_host"
        val token = "your_token"

        lifecycleScope.launch {

            // 设置事件处理。
            launch {
                room.events.collect { event ->
                    when (event) {
                        is RoomEvent.TrackSubscribed -> onTrackSubscribed(event)
                        else -> {}
                    }
                }
            }

            // 连接到服务器。
            room.connect(
                url,
                token,
            )

            // 打开音频/视频录制。
            val localParticipant = room.localParticipant
            localParticipant.setMicrophoneEnabled(true)
            localParticipant.setCameraEnabled(true)
        }
    }

    private fun onTrackSubscribed(event: RoomEvent.TrackSubscribed) {
        val track = event.track
        if (track is VideoTrack) {
            attachVideo(track)
        }
    }

    private fun attachVideo(videoTrack: VideoTrack) {
        videoTrack.addRenderer(findViewById<SurfaceViewRenderer>(R.id.renderer))
        findViewById<View>(R.id.progress).visibility = View.GONE
    }
}

完整实现请参阅基础示例应用

音频模式

默认情况下,音频配置为双向通话模式。

如果你正在构建直播或媒体播放为主的应用,可以在创建 Room 对象时使用 MediaAudioType 预设以获得更好的音频质量。

val room = LiveKit.create(
    appContext = application,
    overrides = LiveKitOverrides(
        audioOptions = AudioOptions(
            audioOutputType = AudioType.MediaAudioType()
        )
    )
)

注意:音频路由将由系统自动处理,无法手动控制。

如需更精细地控制音频属性和模式,可以传入 CustomAudioType

@FlowObservable

标注 @FlowObservable 的属性可以作为 Kotlin Flow 来观察变更:

coroutineScope.launch {
    room::activeSpeakers.flow.collectLatest { speakersList ->
        /*...*/
    }
}

示例应用

注意:如果想直接从本仓库运行示例应用,请参考开发环境说明

我们有一个基础快速入门示例应用(链接),展示了如何连接到房间、发布设备音频/视频以及显示一个远程参与者的视频。

还有两个功能更完善的视频会议示例应用:

两者都使用 CallViewModel,它负责管理 Room 连接并暴露基础视频会议应用所需的数据。

每个应用中对应的 ParticipantItem ��负责各个参与者 UI 的展示:

开发环境

要开发 Android SDK 或直接从本仓库运行示例应用,你需要:

  • 克隆仓库到本地
  • 确保 protocol 子模块仓库已初始化并更新
git clone https://github.com/livekit/client-sdk-android.git
cd client-sdk-android
git submodule update --init

如果你在 Apple Silicon Mac(如 M1、M2 等)上进行开发,请在 $HOME/.gradle/gradle.properties 中添加以下内容:

protoc_platform=osx-x86_64

可选(开发便利)

  1. https://webrtc.googlesource.com/src 下载 WebRTC 源码
  2. 在 Android Studio 中通过指向 webrtc/sdk/android 文件夹添加源码。


LiveKit 生态系统
Agents SDKPython · Node.js
LiveKit SDK浏览器 · Swift · Android · Flutter · React Native · Rust · Node.js · Python · Unity · Unity (WebGL) · ESP32 · C++
入门应用Python Agent · TypeScript Agent · React App · SwiftUI App · Android App · Flutter App · React Native App · Web Embed
UI 组件React · Android Compose · SwiftUI · Flutter
服务端 APINode.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP (社区) · .NET (社区)
资源文档 · Docs MCP Server · CLI · LiveKit Cloud
LiveKit Server 开源LiveKit server · Egress · Ingress · SIP
社区开发者社区 · Slack · X · YouTube

About

LiveKit SDK for Android

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages