Skip to main content
DailyTrackState describes the current condition of one media track — camera, microphone, screen share, or custom — from the local participant’s point of view. It appears as a value in DailyParticipant.tracks.
interface DailyTrackState {
  subscribed: boolean | 'staged';
  state: 'blocked' | 'off' | 'sendable' | 'loading' | 'interrupted' | 'playable';
  off?: {
    byUser?: boolean;
    byRemoteRequest?: boolean;
    byBandwidth?: boolean;
    byCanSendPermission?: boolean;
    byCanReceivePermission?: boolean;
    byServerLimit?: boolean;
  };
  blocked?: {
    byDeviceMissing?: boolean;
    byDeviceInUse?: boolean;
    byPermissions?: boolean;
  };
  track?: MediaStreamTrack;
  persistentTrack?: MediaStreamTrack;
}

Properties

subscribed
true | false | 'staged'
Whether the local participant is subscribed to this track. Only meaningful for remote participants — local tracks are always implicitly subscribed.
  • true — subscribed and receiving
  • false — not subscribed
  • 'staged' — SDP negotiated but no bytes are flowing; track can transition to playable faster when set to true
Set via updateParticipant() with setSubscribedTracks.
state
string
The complete, mutually exclusive state of the track from the local participant’s point of view.
ValueMeaning
'blocked'Track cannot be sent. Check blocked for the cause.
'off'Track is intentionally not being sent. Check off for the cause.
'sendable'Track is available to send but the local participant hasn’t subscribed to it yet.
'loading'Track is subscribed and the stream is being established.
'playable'Track is live and ready to render.
'interrupted'Track was playable but has transiently stalled (network fluctuation, iOS background). May return to playable.
off
object
Present when state is 'off'. Indicates why the track is off. All sub-fields are optional booleans.
blocked
object
Present when state is 'blocked'. Indicates why the track cannot be sent. All sub-fields are optional booleans.
track
MediaStreamTrack | undefined
The underlying MediaStreamTrack. Only present when state === 'playable'. Only available in call object mode.Prefer persistentTrack for attaching to media elements.
persistentTrack
MediaStreamTrack | undefined
The underlying MediaStreamTrack. Present whenever a track exists, regardless of state. Only available in call object mode.Recommended over track as a proactive defense against black frames during call disruptions and browser limitations. Use track only when you need a guarantee that media is currently flowing.

See also