The app contains Basic, Advance, and Chat sample groups. Each row lists the app label, source file, and the main feature demonstrated.
If you are new to Agora vocabulary, read Feature Guide For Android Engineers first. It explains what each feature means and why an Android app would use it.
| Sample | Source | Demonstrates |
|---|---|---|
| Join Video Channel (With Token) | JoinChannelVideoToken.kt |
Joining a video channel with a token pasted at runtime. |
| Join Video Channel | JoinChannelVideo.kt |
Joining a video channel, enabling camera preview, rendering local and remote video. See JoinChannelVideo. |
| Join Audio Channel | JoinChannelAudio.kt |
Joining an audio-only channel and controlling basic audio parameters. |
| Sample | Source | Demonstrates |
|---|---|---|
| Live Streaming | LiveStreaming.kt |
Live broadcasting, audience/co-host role changes, video options, watermark/image source behavior. |
| RTMP Streaming | RTMPStreaming.kt |
Publishing an RTC stream to an RTMP endpoint with or without transcoding. |
| Media Metadata | MediaMetadata.kt |
Sending and receiving metadata with media frames. |
| Voice Effects | VoiceEffects.kt |
Voice effects, audio mixing, and sound effect controls. |
| Origin Audio Data | OriginAudioData.kt |
Observing raw audio data. |
| Custom Audio Source | CustomAudioSource.kt |
Publishing custom audio from a local asset instead of microphone input. |
| Custom Audio Render | CustomAudioRender.kt |
Receiving audio frames and rendering them with a custom player. |
| Origin Video Data | OriginVideoData.kt |
Observing video frames and saving screenshots. |
| Custom Video Source | CustomVideoSource.kt |
Publishing custom video frames from a local YUV asset. |
| Custom Video Render | CustomVideoRender.kt |
Rendering received video frames with custom OpenGL helpers. |
| Picture In Picture | PictureInPicture.kt |
Android picture-in-picture behavior for a video call screen. |
| Join Multi Channel | JoinMultiChannel.kt |
Joining a primary channel and an additional channel connection. |
| Channel Encryption | ChannelEncryption.kt |
Enabling built-in channel encryption with selectable encryption modes. |
| Play Audio Files | PlayAudioFiles.kt |
Playing audio files and mixing local media into the channel. |
| Pre Call Test | PreCallTest.kt |
Last-mile probe and audio/video echo tests before joining a channel. |
| Media Recorder | MediaRecorder.kt |
Recording local or remote media streams. |
| Media Player | MediaPlayer.kt |
Playing media through Agora media player APIs. |
| Screen Sharing | ScreenSharing.kt |
Capturing and publishing screen audio/video. |
| Video Process Extension | VideoProcessExtension.kt |
Beauty, low-light enhancement, denoising, color enhancement, and virtual background controls. |
| Rhythm Player | RhythmPlayer.kt |
Rhythm/audio playback behavior through Agora APIs. |
| Local Video Transcoding | LocalVideoTranscoding.kt |
Combining camera and media player sources into a transcoded local video stream. |
| Send Data Stream | SendDataStream.kt |
Sending custom data messages through an RTC data stream. |
| Host Across Channel | HostAcrossChannel.kt |
Relaying media across channels. |
| Spatial Sound | SpatialSound.kt |
Spatial audio positioning and 3D audio effect controls. |
| Sample | Source | Demonstrates |
|---|---|---|
| 1:1 Chat | ChatLab.kt |
Agora Chat SDK direct messages, GIF image messages with previews, local conversation history, delivery/read callbacks. |
| Group Chat | ChatLab.kt |
Create or join a Chat group and send text or GIF image messages. |
| Typing Indicator | ChatLab.kt |
WhatsApp-like typing signals using lightweight Chat command messages. |
| Presence | ChatLab.kt |
Subscribe to user presence and show online state. |
| Message Reactions | ChatLab.kt |
Native Chat SDK reactions on message IDs. |
Detailed GIF flow: Chat GIF Messages
Use two emulators or devices:
- Device A: set
User ID = a1,Target User ID = a2. - Device B: set
User ID = a2,Target User ID = a1. - If the users do not exist yet and client registration is enabled, use Register demo user on each device with password auth. If registration is disabled, run
npm run chat:test-tokensand log in with the printed Chat user tokens. - Log in on both devices.
- Send text and GIF messages both ways to verify previews, history, delivery/read callbacks, typing, presence, and reactions.
For production, create Chat users and issue Chat user tokens from your backend. Do not use client-side demo registration in a production app.
The app includes demo assets under app/src/main/assets/:
agora-logo.pngbg_blue.pngmusic_1.m4aoutput.rawsample.yuv
These files are used by media, custom source, and rendering examples.
- Install the app on two devices.
- Configure both builds with the same
AGORA_APP_ID. - Open the same sample on both devices.
- Enter the same channel name.
- Join from both devices.
For token-based examples, ensure both devices use valid tokens for the same App ID, channel name, and UID rules.