Class WebRTCEndpoint<EndpointMetadata, TrackMetadata>

Main class that is responsible for connecting to the RTC Engine, sending and receiving media.

Type Parameters

  • EndpointMetadata = any
  • TrackMetadata = any

Hierarchy

Constructors

Properties

bandwidthEstimation: bigint = ...
commandResolutionNotifier: null | Deferred<void, unknown> = null
commandsQueue: Command<TrackMetadata>[] = []
connection?: RTCPeerConnection
disabledTrackEncodings: Map<string, TrackEncoding[]> = ...
endpointMetadataParser: MetadataParser<EndpointMetadata>
idToEndpoint: Map<string, EndpointWithTrackContext<EndpointMetadata, TrackMetadata>> = ...
localEndpoint: EndpointWithTrackContext<EndpointMetadata, TrackMetadata> = ...
localTrackIdToTrack: Map<string, TrackContextImpl<EndpointMetadata, TrackMetadata>> = ...
midToTrackId: Map<string, string> = ...
ongoingRenegotiation: boolean = false

Indicates if an ongoing renegotiation is active. During renegotiation, both parties are expected to actively exchange events: renegotiateTracks, offerData, sdpOffer, sdpAnswer.

ongoingTrackReplacement: boolean = false
rtcConfig: RTCConfiguration = ...
trackIdToSender: Map<string, {
    localTrackId: null | string;
    remoteTrackId: string;
    sender: null | RTCRtpSender;
}> = ...

Type declaration

  • localTrackId: null | string
  • remoteTrackId: string
  • sender: null | RTCRtpSender
trackIdToTrack: Map<string, TrackContextImpl<EndpointMetadata, TrackMetadata>> = ...
trackMetadataParser: MetadataParser<TrackMetadata>

Methods

  • Adds track that will be sent to the RTC Engine.

    Parameters

    Returns Promise<string>

    Returns id of added track

    Example

    let localStream: MediaStream = new MediaStream();
    try {
    localAudioStream = await navigator.mediaDevices.getUserMedia(
    AUDIO_CONSTRAINTS
    );
    localAudioStream
    .getTracks()
    .forEach((track) => localStream.addTrack(track));
    } catch (error) {
    console.error("Couldn't get microphone permission:", error);
    }

    try {
    localVideoStream = await navigator.mediaDevices.getUserMedia(
    VIDEO_CONSTRAINTS
    );
    localVideoStream
    .getTracks()
    .forEach((track) => localStream.addTrack(track));
    } catch (error) {
    console.error("Couldn't get camera permission:", error);
    }

    localStream
    .getTracks()
    .forEach((track) => webrtc.addTrack(track, localStream));
  • Disables track encoding so that it will be no longer sent to the server.

    Parameters

    • trackId: string

      id of track

    • encoding: TrackEncoding

      encoding that will be disabled

    Returns void

    Example

    const trackId = webrtc.addTrack(track, stream, {}, {enabled: true, activeEncodings: ["l", "m", "h"]});
    webrtc.disableTrackEncoding(trackId, "l");
  • Disconnects from the room. This function should be called when user disconnects from the room in a clean way e.g. by clicking a dedicated, custom button disconnect. As a result there will be generated one more media event that should be sent to the RTC Engine. Thanks to it each other endpoint will be notified that endpoint was removed in WebRTCEndpointEvents.endpointRemoved,

    Returns void

  • Enables track encoding so that it will be sent to the server.

    Parameters

    • trackId: string

      id of track

    • encoding: TrackEncoding

      encoding that will be enabled

    Returns void

    Example

    const trackId = webrtc.addTrack(track, stream, {}, {enabled: true, activeEncodings: ["l", "m", "h"]});
    webrtc.disableTrackEncoding(trackId, "l");
    // wait some time
    webrtc.enableTrackEncoding(trackId, "l");
  • Returns (string | symbol)[]

  • Returns number

  • Type Parameters

    Parameters

    • event: E

    Returns number

  • Feeds media event received from RTC Engine to WebRTCEndpoint. This function should be called whenever some media event from RTC Engine was received and can result in WebRTCEndpoint generating some other media events.

    Parameters

    • mediaEvent: string

      String data received over custom signalling layer.

    Returns void

    Example

    This example assumes phoenix channels as signalling layer. As phoenix channels require objects, RTC Engine encapsulates binary data into map with one field that is converted to object with one field on the TS side.

    webrtcChannel.on("mediaEvent", (event) => webrtc.receiveMediaEvent(event.data));
    
  • Type Parameters

    Parameters

    • Optional event: E

    Returns this

  • Removes a track from connection that was sent to the RTC Engine.

    Parameters

    • trackId: string

      Id of audio or video track to remove.

    Returns Promise<void>

    Example

    // setup camera
    let localStream: MediaStream = new MediaStream();
    try {
    localVideoStream = await navigator.mediaDevices.getUserMedia(
    VIDEO_CONSTRAINTS
    );
    localVideoStream
    .getTracks()
    .forEach((track) => localStream.addTrack(track));
    } catch (error) {
    console.error("Couldn't get camera permission:", error);
    }

    let trackId
    localStream
    .getTracks()
    .forEach((track) => trackId = webrtc.addTrack(track, localStream));

    // remove track
    webrtc.removeTrack(trackId)
  • Replaces a track that is being sent to the RTC Engine.

    Parameters

    • trackId: string

      Audio or video track.

    • newTrack: null | MediaStreamTrack
    • Optional newTrackMetadata: any

      Optional track metadata to apply to the new track. If no track metadata is passed, the old track metadata is retained.

    Returns Promise<void>

    success

    Example

    // setup camera
    let localStream: MediaStream = new MediaStream();
    try {
    localVideoStream = await navigator.mediaDevices.getUserMedia(
    VIDEO_CONSTRAINTS
    );
    localVideoStream
    .getTracks()
    .forEach((track) => localStream.addTrack(track));
    } catch (error) {
    console.error("Couldn't get camera permission:", error);
    }
    let oldTrackId;
    localStream
    .getTracks()
    .forEach((track) => trackId = webrtc.addTrack(track, localStream));

    // change camera
    const oldTrack = localStream.getVideoTracks()[0];
    let videoDeviceId = "abcd-1234";
    navigator.mediaDevices.getUserMedia({
    video: {
    ...(VIDEO_CONSTRAINTS as {}),
    deviceId: {
    exact: videoDeviceId,
    },
    }
    })
    .then((stream) => {
    let videoTrack = stream.getVideoTracks()[0];
    webrtc.replaceTrack(oldTrackId, videoTrack);
    })
    .catch((error) => {
    console.error('Error switching camera', error);
    })
  • Updates maximum bandwidth for the given simulcast encoding of the given track.

    Parameters

    • trackId: string

      id of the track

    • rid: string

      rid of the encoding

    • bandwidth: number

      desired max bandwidth used by the encoding (in kbps)

    Returns Promise<boolean>

  • Parameters

    • maxListeners: number

    Returns this

  • Sets track variant that server should send to the client library.

    The variant will be sent whenever it is available. If chosen variant is temporarily unavailable, some other variant will be sent until the chosen variant becomes active again.

    Parameters

    • trackId: string

      id of track

    • variant: TrackEncoding

      variant to receive

    Returns void

    Example

    webrtc.setTargetTrackEncoding(incomingTrackCtx.trackId, "l")
    
  • Updates maximum bandwidth for the track identified by trackId. This value directly translates to quality of the stream and, in case of video, to the amount of RTP packets being sent. In case trackId points at the simulcast track bandwidth is split between all of the variant streams proportionally to their resolution.

    Parameters

    • trackId: string
    • bandwidth: number

      in kbps

    Returns Promise<boolean>

    success

  • Updates the metadata for the current endpoint.

    Parameters

    • metadata: any

      Data about this endpoint that other endpoints will receive upon being added.

      If the metadata is different from what is already tracked in the room, the optional event endpointUpdated will be emitted for other endpoint in the room.

    Returns void

  • Updates the metadata for a specific track.

    Parameters

    • trackId: string

      trackId (generated in addTrack) of audio or video track.

    • trackMetadata: any

      Data about this track that other endpoint will receive upon being added.

      If the metadata is different from what is already tracked in the room, the optional event trackUpdated will be emitted for other endpoints in the room.

    Returns void