CallContent

Highest-level UI component for building complete call screens with:

  • Full call UI - Top view, participants grid, control buttons
  • Media controls - Camera, microphone, speakerphone state management
  • Screen sharing - Built-in rendering
  • Participant info - Network quality, name, mute state, reactions
  • Video rendering - Participant video streams
  • Layout options - Grid or spotlight modes

Displays participant list/grid with avatars, names, video (if publishing), and connection quality.

Call Content Grid

Call Content Grid 3 Participants

Call Content Spotlight

General usage

Show CallContent UI:

import {
  Call,
  CallContent,
  StreamCall,
} from "@stream-io/video-react-native-sdk";

const VideoCallUI = () => {
  let call: Call;
  // your logic to create a new call or get an existing call

  return (
    <StreamCall call={call}>
      <CallContent />
    </StreamCall>
  );
};

Please ensure the CallContent component isn’t remounted during a call to avoid occasional audio loss. We’re aware of this issue and working on a solution.

Props

layout

This switches the list between the grid and the spotlight mode.

TypeDefault Value
grid | spotlightgrid

When a screen is shared, the layout automatically changes to spotlight mode.

landscape

Applies the landscape mode styles to the component, if true.

Type
boolean | undefined

onHangupCallHandler

Handler to be called when the call is left using the hangup call button in call controls.

Type
() => void | undefined

supportedReactions

Supported reactions for the call. Default reactions:

  • 🀣 Rolling on the floor laughing
  • πŸ‘ like
  • πŸ‘Ž Dislike
  • πŸŽ‰ fireworks
  • πŸ™Œ Raised hands
  • βœ‹ Raised hand
Type
StreamReactionType & { icon: string }[]

CallControls

Prop to customize the CallControls component.

TypeDefault Value
ComponentType| undefinedCallControls

ParticipantLabel

Component to customize the Label of the participant.

TypeDefault Value
ComponentType| undefinedParticipantLabel

ParticipantReaction

Component to customize the participant reaction display.

TypeDefault Value
ComponentType| undefinedParticipantReaction

ParticipantVideoFallback

Component to customize the video fallback of the participant, when the video is disabled.

TypeDefault Value
ComponentType| undefinedParticipantVideoFallback

ParticipantNetworkQualityIndicator

Component to customize the network quality indicator of the participant.

TypeDefault Value
ComponentType| undefinedParticipantNetworkQualityIndicator

VideoRenderer

Component to customize the participant video. Also displays the ParticipantVideoFallback.

The VideoRenderer accepts a mirror?: boolean prop to force mirroring on or off. When provided, it takes precedence over the default mirroring logic.

TypeDefault Value
ComponentType| undefinedVideoRenderer

Props

PropTypeDefault ValueDescription
participantStreamVideoParticipantThe participant whose video or screenshare should be rendered.
trackTypevideoTrack | screenShareTrackvideoTrackThe track to render.
isVisiblebooleantrueWhen false, the video stream is not shown even if it is available.
objectFit'contain' | 'cover' | undefinedundefinedHow the video fits within its container. When omitted, a default is computed from the track dimensions.
videoZOrdernumber0The z-order to apply to the underlying RTC view.
mirrorboolean | undefinedundefinedForces mirroring on or off. When omitted, the default mirroring logic is used.
ParticipantVideoFallbackComponentType | null | undefinedParticipantVideoFallbackComponent to render when video is unavailable. Use null to disable the fallback.

ParticipantView

Prop to customize the ParticipantView component entirely.

TypeDefault Value
ComponentType| undefinedParticipantView

FloatingParticipantView

Prop to customize the FloatingParticipantView component.

TypeDefault Value
ComponentType| undefinedFloatingParticipantView

Props

PropTypeDefault ValueDescription
participantStreamVideoParticipant | undefinedThe participant to render in the floating view.
alignmenttop-left | top-right | bottom-left | bottom-righttop-rightDetermines where the floating participant video will be placed initially.
onPressHandler() => void | undefinedHandler invoked when the floating participant view is pressed.
participantViewStyleViewStyleStyle override for the participant view container.
draggableContainerStyleViewStyleStyle override for the draggable container.
videoZOrdernumber1The z-order for the video view.
objectFit'contain' | 'cover' | undefinedundefinedHow the video fits within its container.
mirrorboolean | undefinedundefinedForces mirroring on or off. When omitted, the default mirroring logic is used.
supportedReactionsStreamReactionType & { icon: string }[]Reactions to enable for the floating participant view.
ParticipantViewComponentType | undefinedParticipantViewCustom participant view component.
ParticipantLabelComponentType | undefinedParticipantLabelCustom label component.
ParticipantReactionComponentType | undefinedParticipantReactionCustom reaction component.
ParticipantVideoFallbackComponentType | null | undefinedParticipantVideoFallbackFallback when video is unavailable. Use null to disable.
ParticipantNetworkQualityIndicatorComponentType | undefinedParticipantNetworkQualityIndicatorCustom network quality indicator.
VideoRendererComponentType | undefinedVideoRendererCustom video renderer component.

CallParticipantsList

Prop to customize the CallParticipantsList component.

TypeDefault Value
ComponentType| undefinedCallParticipantsList

ScreenShareOverlay

Component to customize the screen share overlay, when the screen is shared by a user.

TypeDefault Value
ComponentType| undefinedScreenShareOverlay

initialInCallManagerAudioMode

This prop is deprecated and will be removed in a future version. Please use callManager.start() with the appropriate audio configuration instead. See the Camera & Microphone guide for the recommended approach.

Property to set the audio mode for the react-native-incall-manager library. If media type is video, audio is routed by default to speaker, otherwise it is routed to earpiece. Changing the mode on the fly is not supported. Manually invoke InCallManager.start({ media }) to achieve this.

TypeDefault Value
video| audiovideo

Customization

Customize via UI Cookbook recipes. See ParticipantView customization guide.