> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# WebRTCCall

> Concrete WebRTC call implementation.

`WebRTCCall` represents an active call between the local user and one or
more remote participants. Instances are never constructed directly by
applications — they are returned by
[`SignalWire.dial`](/docs/browser-sdk/v4/reference/signalwire#dial) for outbound
calls, or surfaced through the inbound-call flow once the user has
[`register`](/docs/browser-sdk/v4/reference/signalwire#register)ed.

The class owns every aspect of an in-progress call: signaling
(`RTCPeerConnection`, Verto messages), local and remote media streams,
participant roster, layout, recording/streaming state, and network-quality
telemetry. State is exposed in two complementary forms — a snapshot getter
(e.g. [`locked`](/docs/browser-sdk/v4/reference/webrtc-call/locked\$#locked))
for one-shot reads and an observable (e.g.
[`locked$`](/docs/browser-sdk/v4/reference/webrtc-call/locked\$)) for reactive
UI binding. Event streams that have no snapshot equivalent end in `$` only
(e.g. [`memberJoined$`](/docs/browser-sdk/v4/reference/webrtc-call/member-joined\$),
[`signalingEvent$`](/docs/browser-sdk/v4/reference/webrtc-call/signaling-event\$)).

The available control methods depend on the capabilities granted by the server
at join time — inspect [`capabilities$`](#capabilities-1) before exposing a
control in your UI. Calling [`hangup`](#hangup) ends the call locally and
transitions [`status$`](#status-1) to `disconnected`; the instance is then safe
to release.

## **Extends**

* `Destroyable`

## **Implements**

* `CallManager`

## **Constructors**

### Constructor

```ts
new WebRTCCall(clientSession, options, initialization, address?): WebRTCCall
```

#### Parameters

**`clientSession`** `ClientSession` — required

Active client session created by `SignalWire`. Provides the signaling
transport and authentication context for the call.

---

**`options`** `CallOptions` — required

Media and behavior options for this call (audio/video constraints,
recovery, etc.). See [`CallOptions`](/docs/browser-sdk/v4/reference/interfaces/call-options).

---

**`initialization`** `CallInitialization` — required

Initialization payload supplied by the SDK when constructing the call.
Carries direction, remote address, and any inbound-call metadata.

---

**`address`** `Address`

Optional pre-resolved `Address` for the destination. When omitted, the
address is derived from the dial string or inbound signaling.

---

#### Returns

`WebRTCCall`

## **Properties**

**`id`** `string` — required

Unique identifier for this call.

---

**`to`** `string`

Destination URI this call was placed to.

---

## **Accessors**

#### [address\$](/docs/browser-sdk/v4/reference/webrtc-call/address\$)

Observable of the address associated with this call.

#### [answered\$](/docs/browser-sdk/v4/reference/webrtc-call/answered\$)

Observable that emits `true` when answered, `false` when rejected.

#### [answerMediaOptions](/docs/browser-sdk/v4/reference/webrtc-call/answer-media-options)

Media options provided when answering. Used internally by the VertoManager.

#### [bandwidthConstrained\$](/docs/browser-sdk/v4/reference/webrtc-call/bandwidth-constrained\$)

Observable indicating whether the call is bandwidth-constrained.

#### [callEvent\$](/docs/browser-sdk/v4/reference/webrtc-call/call-event\$)

Observable of all call-related event payloads (join, leave, member updates, layout changes, etc.).

#### [callStates\$](/docs/browser-sdk/v4/reference/webrtc-call/call-states\$)

Observable of call state-change events.

#### [callUpdated\$](/docs/browser-sdk/v4/reference/webrtc-call/call-updated\$)

Observable of call-updated events.

#### [capabilities\$](/docs/browser-sdk/v4/reference/webrtc-call/capabilities\$)

Observable of the call's capability flags.

#### [destroyed\$](/docs/browser-sdk/v4/reference/webrtc-call/destroyed\$)

Observable that emits when the instance is destroyed

#### [direction](/docs/browser-sdk/v4/reference/webrtc-call/direction)

Whether this call is `'inbound'` or `'outbound'`.

#### [errors\$](/docs/browser-sdk/v4/reference/webrtc-call/errors\$)

Observable stream of errors from media, signaling, and peer connection layers.

#### [from](/docs/browser-sdk/v4/reference/webrtc-call/from)

Address URI of the caller.

#### [fromName](/docs/browser-sdk/v4/reference/webrtc-call/from-name)

Display name of the caller.

#### [isNetworkHealthy\$](/docs/browser-sdk/v4/reference/webrtc-call/is-network-healthy\$)

Simple boolean health indicator derived from stats monitor.

#### [layout\$](/docs/browser-sdk/v4/reference/webrtc-call/layout\$)

Observable of the current layout name.

#### [layoutEvent\$](/docs/browser-sdk/v4/reference/webrtc-call/layout-event\$)

Observable of layout-changed event payloads.

#### [layoutLayers\$](/docs/browser-sdk/v4/reference/webrtc-call/layout-layers\$)

Observable of layout layer positions for all participants.

#### [layouts\$](/docs/browser-sdk/v4/reference/webrtc-call/layouts\$)

Observable of available layout names.

#### [layoutUpdates\$](/docs/browser-sdk/v4/reference/webrtc-call/layout-updates\$)

Observable of layout-changed events.

#### [localAudioLevel\$](/docs/browser-sdk/v4/reference/webrtc-call/local-audio-level\$)

Observable of the RMS audio level of the local microphone, 0..1. Emits at \~30fps while a mic track is active. Engages the local audio pipeline on first subscription.

#### [localMicrophoneGain\$](/docs/browser-sdk/v4/reference/webrtc-call/local-microphone-gain\$)

Observable of the current local microphone gain (0..200, where 100 = unity).

#### [localSpeaking\$](/docs/browser-sdk/v4/reference/webrtc-call/local-speaking\$)

Observable that is `true` while the local participant is speaking (RMS level above the VAD threshold, with hold time to avoid flicker).

#### [localStream\$](/docs/browser-sdk/v4/reference/webrtc-call/local-stream\$)

Observable of the local media stream (camera/microphone).

#### [locked\$](/docs/browser-sdk/v4/reference/webrtc-call/locked\$)

Observable indicating whether the call room is locked.

#### [mediaDirections\$](/docs/browser-sdk/v4/reference/webrtc-call/media-directions\$)

Observable of the current audio/video send/receive directions.

#### [mediaParamsUpdated\$](/docs/browser-sdk/v4/reference/webrtc-call/media-params-updated\$)

Observable that emits when server-pushed media params are applied.

#### [memberJoined\$](/docs/browser-sdk/v4/reference/webrtc-call/member-joined\$)

Observable of member-joined events, emitted when a remote participant joins the call.

#### [memberLeft\$](/docs/browser-sdk/v4/reference/webrtc-call/member-left\$)

Observable of member-left events, emitted when a participant leaves the call.

#### [memberTalking\$](/docs/browser-sdk/v4/reference/webrtc-call/member-talking\$)

Observable of member-talking events (speech start/stop).

#### [memberUpdated\$](/docs/browser-sdk/v4/reference/webrtc-call/member-updated\$)

Observable of member-updated events (mute, volume, etc.).

#### [meta\$](/docs/browser-sdk/v4/reference/webrtc-call/meta\$)

Observable of custom metadata associated with the call.

#### [networkIssues\$](/docs/browser-sdk/v4/reference/webrtc-call/network-issues\$)

Observable of current network health issues (empty array = healthy).

#### [networkMetrics\$](/docs/browser-sdk/v4/reference/webrtc-call/network-metrics\$)

Rolling history of raw network metrics (RTT, jitter, packet loss, bitrate).

#### [nodeId\$](/docs/browser-sdk/v4/reference/webrtc-call/node-id\$)

Observable of the server node ID handling this call.

#### [participants\$](/docs/browser-sdk/v4/reference/webrtc-call/participants\$)

Observable of the participants list, emits on join/leave/update.

#### [participantsId\$](/docs/browser-sdk/v4/reference/webrtc-call/participants-id\$)

Observable of the current participant ID list for the call.

#### [qualityLevel\$](/docs/browser-sdk/v4/reference/webrtc-call/quality-level\$)

Observable of simplified quality level (excellent/good/fair/poor/critical).

#### [qualityScore\$](/docs/browser-sdk/v4/reference/webrtc-call/quality-score\$)

Observable of MOS quality score (1-5) computed from stats metrics.

#### [raiseHandPriority\$](/docs/browser-sdk/v4/reference/webrtc-call/raise-hand-priority\$)

Observable indicating whether raise-hand priority is active.

#### [recording\$](/docs/browser-sdk/v4/reference/webrtc-call/recording\$)

Observable indicating whether the call is being recorded.

#### [recoveryEvent\$](/docs/browser-sdk/v4/reference/webrtc-call/recovery-event\$)

Observable of recovery events (keyframe requested, ICE restart, etc.).

#### [recoveryState\$](/docs/browser-sdk/v4/reference/webrtc-call/recovery-state\$)

Observable of the recovery pipeline state machine.

#### [remoteAudioLevel\$](/docs/browser-sdk/v4/reference/webrtc-call/remote-audio-level\$)

Observable of the aggregate remote audio level, 0..1 RMS.

#### [remoteStream\$](/docs/browser-sdk/v4/reference/webrtc-call/remote-stream\$)

Observable of the remote media stream from the far end.

#### [rtcPeerConnection](/docs/browser-sdk/v4/reference/webrtc-call/rtc-peer-connection)

Underlying `RTCPeerConnection`, for advanced use cases.

#### [self\$](/docs/browser-sdk/v4/reference/webrtc-call/self\$)

Observable of the local (self) participant.

#### [selfId\$](/docs/browser-sdk/v4/reference/webrtc-call/self-id\$)

Observable of the local participant's member ID.

#### [signalingEvent\$](/docs/browser-sdk/v4/reference/webrtc-call/signaling-event\$)

Observable of raw signaling events as plain objects.

#### [status\$](/docs/browser-sdk/v4/reference/webrtc-call/status\$)

Observable of the current call status (e.g. `'ringing'`, `'connected'`).

#### [streaming\$](/docs/browser-sdk/v4/reference/webrtc-call/streaming\$)

Observable indicating whether the call is being streamed.

#### [toName](/docs/browser-sdk/v4/reference/webrtc-call/to-name)

Display name of the callee.

#### [userVariables\$](/docs/browser-sdk/v4/reference/webrtc-call/user-variables\$)

Observable of custom user variables associated with the call.

#### [webrtcMessages\$](/docs/browser-sdk/v4/reference/webrtc-call/webrtc-messages\$)

Observable of raw WebRTC message payloads received on this call.

## **Methods**

#### [answer](/docs/browser-sdk/v4/reference/webrtc-call/answer)

Accepts an inbound call, optionally overriding media options for the answer.

#### [destroy](/docs/browser-sdk/v4/reference/webrtc-call/destroy)

Destroys the call, releasing all resources and subscriptions.

#### [disablePushToTalk](/docs/browser-sdk/v4/reference/webrtc-call/disable-push-to-talk)

Disable push-to-talk; mic gain returns to the configured value.

#### [enablePushToTalk](/docs/browser-sdk/v4/reference/webrtc-call/enable-push-to-talk)

Enable push-to-talk: while setPushToTalkActive has been called with `false`, the microphone gain is forced to 0; calling setPushToTalkActive with `true` restores the configured gain.

#### [execute](/docs/browser-sdk/v4/reference/webrtc-call/execute)

Executes a raw JSON-RPC request on the client session.

#### [executeMethod](/docs/browser-sdk/v4/reference/webrtc-call/execute-method)

Executes a Verto RPC method targeting a specific participant.

#### [hangup](/docs/browser-sdk/v4/reference/webrtc-call/hangup)

Hangs up the call and releases all resources.

#### [notifyModifyFailed](/docs/browser-sdk/v4/reference/webrtc-call/notify-modify-failed)

Notify the recovery manager that a verto.modify signaling exchange failed.

#### [reject](/docs/browser-sdk/v4/reference/webrtc-call/reject)

Rejects an inbound call, preventing media negotiation.

#### [requestIceRestart](/docs/browser-sdk/v4/reference/webrtc-call/request-ice-restart)

Force an ICE restart / re-INVITE.

#### [requestKeyframe](/docs/browser-sdk/v4/reference/webrtc-call/request-keyframe)

Request a video keyframe via RTCP PLI/FIR.

#### [sendDigits](/docs/browser-sdk/v4/reference/webrtc-call/send-digits)

Sends DTMF digits on the call.

#### [setAutoGainControl](/docs/browser-sdk/v4/reference/webrtc-call/set-auto-gain-control)

Toggle browser automatic gain control on the local mic at runtime.

#### [setEchoCancellation](/docs/browser-sdk/v4/reference/webrtc-call/set-echo-cancellation)

Toggle echo cancellation on the local mic at runtime.

#### [setLayout](/docs/browser-sdk/v4/reference/webrtc-call/set-layout)

Sets the call layout and participant positions.

#### [setLocalMicrophoneGain](/docs/browser-sdk/v4/reference/webrtc-call/set-local-microphone-gain)

Set the local microphone gain as a percentage applied before transmission.

#### [setMeta](/docs/browser-sdk/v4/reference/webrtc-call/set-meta)

Replaces the call's custom metadata.

#### [setNoiseSuppression](/docs/browser-sdk/v4/reference/webrtc-call/set-noise-suppression)

Toggle browser noise suppression on the local mic at runtime.

#### [setPushToTalkActive](/docs/browser-sdk/v4/reference/webrtc-call/set-push-to-talk-active)

While push-to-talk is enabled, sets the talk state. `true` = transmitting, `false` = silent. No-op if push-to-talk has not been enabled.

#### [startRecording](/docs/browser-sdk/v4/reference/webrtc-call/start-recording)

Not yet implemented. Status tracked via [`recording$`](/docs/browser-sdk/v4/reference/webrtc-call/recording\$).

#### [startStreaming](/docs/browser-sdk/v4/reference/webrtc-call/start-streaming)

Not yet implemented. Status tracked via [`streaming$`](/docs/browser-sdk/v4/reference/webrtc-call/streaming\$).

#### [subscribe](/docs/browser-sdk/v4/reference/webrtc-call/subscribe)

Subscribe to a custom signaling event type on this call.

#### [toggleHold](/docs/browser-sdk/v4/reference/webrtc-call/toggle-hold)

Toggles the hold state of the call (pauses/resumes local media transmission).

#### [toggleIncomingAudio](/docs/browser-sdk/v4/reference/webrtc-call/toggle-incoming-audio)

Toggles whether incoming audio is received.

#### [toggleIncomingVideo](/docs/browser-sdk/v4/reference/webrtc-call/toggle-incoming-video)

Toggles whether incoming video is received.

#### [toggleLock](/docs/browser-sdk/v4/reference/webrtc-call/toggle-lock)

Toggles the call lock state, preventing or allowing new participants from joining.

#### [transfer](/docs/browser-sdk/v4/reference/webrtc-call/transfer)

Transfers the call to another destination.

#### [updateMeta](/docs/browser-sdk/v4/reference/webrtc-call/update-meta)

Merges values into the call's custom metadata (unlike setMeta which replaces).