Package-level declarations
Functions
Link copied to clipboard
fun LivestreamPlayer(modifier: Modifier = Modifier, call: Call, enablePausing: Boolean = true, onPausedPlayer: (isPaused: Boolean) -> Unit? = {}, backstageContent: @Composable BoxScope.(Call) -> Unit = {
LivestreamBackStage()
}, videoRendererConfig: VideoRendererConfig = videoRenderConfig(), livestreamFlow: Flow<ParticipantState.Video?> = call.state.participants.flatMapLatest { participants: List<ParticipantState> ->
// For each participant, create a small Flow that watches videoEnabled.
val participantVideoFlows = participants.map { participant ->
participant.videoEnabled.map { enabled -> participant to enabled }
}
// Combine these Flows: whenever a participant’s videoEnabled changes,
// we re-calculate which participants have video.
combine(participantVideoFlows) { participantEnabledPairs ->
participantEnabledPairs
.filter { (_, isEnabled) -> isEnabled }
.map { (participant, _) -> participant }
}
}.flatMapLatest { participantWithVideo ->
participantWithVideo.firstOrNull()?.video ?: flow { emit(null) }
}, rendererContent: @Composable BoxScope.(Call) -> Unit = {
LivestreamRenderer(
call = call,
enablePausing = enablePausing,
onPausedPlayer = onPausedPlayer,
configuration = videoRendererConfig,
livestreamFlow = livestreamFlow,
)
}, overlayContent: @Composable BoxScope.(Call) -> Unit = {
LivestreamPlayerOverlay(call = call)
})
Represents livestreaming content based on the call state provided from the call.