# Overview

Stream SDK aims to make it as easy as possible to build your own video calling, audio rooms, and live streams.
We support a low-level client, guides on building your own UI, and several pre-built UI components.
If you quickly want to add calling to your app, you can do that in just an hour with these UI components.

### Rendering a Single Video

You can render a single video with the very basic renderer like the code below:

```kotlin
val video by participant.video.collectAsState()
VideoRenderer(
    call = call,
    video = video,
)
```

The [VideoRenderer](/video/docs/android/ui-components/video-renderer/) is the primary low-level component that is widely used in Stream SDK and renders purely a single video without any other UI components.

<admonition type="note">

For getting the `participant`, check out the **Participant State** section on the [Call & Participant State](/video/docs/android/guides/call-and-participant-state/) page.

</admonition>

You will see the basic live video rendering:

![Compose Video Renderer](@video/android/_assets/compose_single_video.png)

### Participant Video

If you want to render a participant's video together with:

- A label/name for the participant
- Network quality indicator
- Mute/unmute indicator
- Fallback for when video is muted
- Speaking indicator
- Reactions

Use this component:

```kotlin
ParticipantVideo(
    call = call,
    participant = participant,
    style = RegularVideoRendererStyle(),
)
```

You will see the result below:

![Compose Video Participant](@video/android/_assets/compose_single_participant.png)

### Video Call UI

We also support the full UI component called [CallContent](/video/docs/android/ui-components/call/call-content/), which consists of:

- **AppBar**: Additional information or actions
- **Video Grids**: Main content area that shows all call participants in a type of grid
- **Controls**: Several actions to control a joined call

The following example renders a full video calling interface:

```kotlin
VideoTheme {
    CallContent(
        modifier = modifier,
        call = call,
        onBackPressed = onBackPressed,
        onCallAction = onCallAction,
    )
}
```

You will see the result below:

![Compose CallContainer](@video/android/_assets/compose_call_container.png)

### Ringing (incoming/outgoing calls)

You can implement incoming/outgoing screens, respectively, depending on the call state, with the [RingingCallContent](/video/docs/android/ui-components/call/ringing-call/) composable:

```kotlin
VideoTheme {
    RingingCallContent(
        call = call,
        isVideoType = true,
        onAcceptedContent = {
            // do something when a call is accepted
        },
        onRejectedContent = {
            // do something when a call is rejected
        }
    )
}
```

You will see the result below:

| One to one (Incoming)                                                    | Group (Incoming)                                                 | One to one (Outgoing)                                                    | Group (Outgoing)                                                 |
| ------------------------------------------------------------------------ | ---------------------------------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------- |
| ![OneToOneIncoming](@video/android/_assets/incoming_call_one_to_one.png) | ![GroupIncoming](@video/android/_assets/incoming_call_group.png) | ![OneToOneOutgoing](@video/android/_assets/outgoing_call_one_to_one.png) | ![GroupOutgoing](@video/android/_assets/outgoing_call_group.png) |

### UI Component Customization

Stream SDK provides highly customizable UI components and you can adjust each style or implement your own UI for each part of the components. This list describes what you can do with Stream SDK's UI components:

- Theming the entire UI components with [VideoTheme](/video/docs/android/ui-components/video-theme/).
- Swapping each part of UI components with your own variations.
- You can also build your UI components from scratch with our low-level UI components, such as [VideoRenderer](/video/docs/android/ui-components/video-renderer/).


---

This page was last updated at 2026-07-16T09:38:31.606Z.

For the most recent version of this documentation, visit [https://getstream.io/video/docs/android/ui-components/overview/](https://getstream.io/video/docs/android/ui-components/overview/).