
Research
Security News
Lazarus Strikes npm Again with New Wave of Malicious Packages
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
io.livekit:livekit-android
Advanced tools
Use this SDK to add realtime video, audio and data features to your Android/Kotlin app. By connecting to LiveKit Cloud or a self-hosted server, you can quickly build applications such as multi-modal AI, live streaming, or video calls with just a few lines of code.
Docs and guides at https://docs.livekit.io.
API reference can be found at https://docs.livekit.io/client-sdk-android/index.html .
[!NOTE] This is v2 of the Android SDK. When migrating from v1.x to v2.x you might encounter a small set of breaking changes. Read the migration guide for a detailed overview of what has changed.
LiveKit for Android is available as a Maven package.
...
dependencies {
def livekit_version = "2.9.0"
implementation "io.livekit:livekit-android:$livekit_version"
// CameraX support with pinch to zoom, torch control, etc.
implementation "io.livekit:livekit-android-camerax:$livekit_version"
// Snapshots of the latest development version are available at:
// implementation "io.livekit:livekit-android:2.9.1-SNAPSHOT"
}
Compose-based apps should check out our Android Components SDK for composables support.
You'll also need JitPack as one of your repositories. In your settings.gradle
file:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
//...
maven { url 'https://jitpack.io' }
// For SNAPSHOT access
// maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
}
}
LiveKit relies on the RECORD_AUDIO
and CAMERA
permissions to use the microphone and camera.
These permission must be requested at runtime. Reference
the sample app
for an example.
room.localParticipant.setCameraEnabled(true)
room.localParticipant.setMicrophoneEnabled(true)
// create an intent launcher for screen capture
// this *must* be registered prior to onCreate(), ideally as an instance val
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)
}
}
// when it's time to enable the screen share, perform the following
val mediaProjectionManager =
getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
screenCaptureIntentLauncher.launch(mediaProjectionManager.createScreenCaptureIntent())
LiveKit uses SurfaceViewRenderer
to render video tracks. A TextureView
implementation is also
provided through TextureViewRenderer
. Subscribed audio tracks are automatically played.
class MainActivity : AppCompatActivity() {
lateinit var room: Room
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Create Room object.
room = LiveKit.create(applicationContext)
// Setup the video renderer
room.initVideoRenderer(findViewById<SurfaceViewRenderer>(R.id.renderer))
connectToRoom()
}
private fun connectToRoom() {
val url = "wss://your_host"
val token = "your_token"
lifecycleScope.launch {
// Setup event handling.
launch {
room.events.collect { event ->
when (event) {
is RoomEvent.TrackSubscribed -> onTrackSubscribed(event)
else -> {}
}
}
}
// Connect to server.
room.connect(
url,
token,
)
// Turn on audio/video recording.
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
}
}
See the basic sample app for the full implementation.
By default, the audio is configured for two-way communications.
If you are building a livestreaming or media playback focus app, you can use the preset
MediaAudioType
when creating the Room
object for better audio quality.
val room = LiveKit.create(
appContext = application,
overrides = LiveKitOverrides(
audioOptions = AudioOptions(
audioOutputType = AudioType.MediaAudioType()
)
)
)
Note: audio routing becomes automatically handled by the system and cannot be manually controlled.
For more control over the specific audio attributes and modes, a CustomAudioType
can be
passed instead.
@FlowObservable
Properties marked with @FlowObservable
can be accessed as a Kotlin Flow to observe changes
directly:
coroutineScope.launch {
room::activeSpeakers.flow.collectLatest { speakersList ->
/*...*/
}
}
Note: If you wish to run the sample apps directly from this repo, please consult the Dev Environment instructions.
We have a basic quickstart sample app here, showing how to connect to a room, publish your device's audio/video, and display the video of one remote participant.
There are two more full featured video conferencing sample apps:
They both use
the CallViewModel
, which handles the Room
connection and exposes the data needed for a basic video conferencing
app.
The respective ParticipantItem
class in each app is responsible for the displaying of each
participant's UI.
To develop the Android SDK or running the sample app directly from this repo, you'll need:
git clone https://github.com/livekit/client-sdk-android.git
cd client-sdk-android
git submodule update --init
For those developing on Macs with Apple silicon (e.g. M1, M2, etc.), please add below to $HOME/.gradle/gradle.properties
protoc_platform=osx-x86_64
webrtc/sdk/android
folder.LiveKit Ecosystem | |
---|---|
Realtime SDKs | React Components · Browser · Swift Components · iOS/macOS/visionOS · Android · Flutter · React Native · Rust · Node.js · Python · Unity (web) · Unity (beta) |
Server APIs | Node.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP (community) |
Agents Frameworks | Python · Playground |
Services | LiveKit server · Egress · Ingress · SIP |
Resources | Docs · Example apps · Cloud · Self-hosting · CLI |
FAQs
LiveKit Android SDK, WebRTC Rooms
We found that io.livekit:livekit-android demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.
Security News
Opengrep continues building momentum with the alpha release of its Playground tool, demonstrating the project's rapid evolution just two months after its initial launch.