Class MatrixCall

Typed Event Emitter class which can act as a Base Model for all our model and communication events. This makes it much easier for us to distinguish between events, as we now need to properly type this, so that our events are not stringly-based and prone to silly typos.

Type parameters:

  • Events - List of all events emitted by this TypedEventEmitter. Normally an enum type.
  • Arguments - A ListenerMap type providing mappings from event names to listener types.
  • SuperclassArguments - TODO: not really sure. Alternative listener mappings, I think? But only honoured for .emit?

Hierarchy (view full)

Constructors

Properties

Accessors

Methods

addBufferedIceCandidates addIceCandidates addListener answer answerWithCallFeeds callHasEnded checkForErrorListener chooseOpponent collectCallStats createAnswer createDataChannel createOffer createPeerConnection deleteAllFeeds deleteFeed deleteFeedByStream discardDuplicateCandidates emit emitPromised getCurrentCallStats getFeedByStreamId getFeeds getLocalFeeds getLocalOfferFailed getLocalSDPStreamMetadata getOpponentDeviceId getOpponentMember getOpponentSessionId getRemoteAssertedIdentity getRemoteFeeds getRidOfRTXCodecs getUserMediaFailed gotCallFeedsForAnswer gotCallFeedsForInvite gotLocalIceCandidate gotLocalOffer hangup initOpponentCrypto initStats initWithHangup initWithInvite isLocalOnHold isLocalVideoMuted isMicrophoneMuted isRemoteOnHold isScreensharing listenerCount listeners mungeSdp noIncomingFeeds off on onAnswerReceived onAnsweredElsewhere onAssertedIdentityReceived onDataChannel onHangupReceived onIceConnectionStateChanged onIceGatheringStateChange onNegotiateReceived onNegotiationNeeded onRejectReceived onRemoteIceCandidatesReceived onSDPStreamMetadataChangedReceived onSelectAnswerReceived onSignallingStateChanged onTrack once opponentCanBeTransferred opponentSupportsDTMF opponentSupportsSDPStreamMetadata partyIdMatches placeCall placeCallFailed placeCallWithCallFeeds placeVideoCall placeVoiceCall prependListener prependOnceListener pushLocalFeed pushNewLocalFeed pushRemoteFeed pushRemoteFeedWithoutMetadata queueCandidate queueGotCallFeedsForAnswer queueGotLocalOffer rawListeners reject removeAllListeners removeListener removeLocalFeed replacedBy sendAnswer sendCandidateQueue sendDtmfDigit sendMetadataUpdate sendVoipEvent setLocalVideoMuted setMicrophoneMuted setRemoteOnHold setScreensharingEnabled setScreensharingEnabledWithoutMetadataSupport shouldAnswerWithMediaType stopAllMedia terminate transfer transferToCall updateLocalUsermediaStream updateMuteStatus updateRemoteSDPStreamMetadata upgradeCall wrappedGotLocalOffer

Constructors

Properties

_state: CallState = CallState.Fledgling
callId: string
callLengthInterval?: number
callStartTime?: number
callStatsAtEnd?: any[]
candidateSendQueue: RTCIceCandidate[] = []
candidateSendTries: number = 0
candidatesEnded: boolean = false
client: MatrixClient
direction?: CallDirection
feeds: CallFeed[] = []
forceTURN?: boolean
groupCallId?: string
hangupParty?: CallParty
hangupReason?: string
iceDisconnectedTimeout?: number
iceReconnectionTimeOut?: number
ignoreOffer: boolean = false
inviteOrAnswerSent: boolean = false
inviteTimeout?: number
invitee?: string
isOnlyDataChannelAllowed: boolean
isPtt: boolean = false
isSettingRemoteAnswerPending: boolean = false
makingOffer: boolean = false
opponentCaps?: CallCapabilities
opponentDeviceId?: string
opponentDeviceInfo?: DeviceInfo
opponentMember?: RoomMember
opponentPartyId: undefined | null | string
opponentSessionId?: string
opponentVersion?: string | number
ourPartyId: string
remoteAssertedIdentity?: AssertedIdentity
remoteCandidateBuffer: Map<string, RTCIceCandidate[]> = ...
remoteOnHold: boolean = false
remoteSDPStreamMetadata?: SDPStreamMetadata
removeTrackListeners: Map<MediaStream, (() => void)> = ...

Type declaration

    • (): void
    • Returns void

responsePromiseChain?: Promise<void>
roomId: string
stats: undefined | GroupCallStats
stopVideoTrackTimer?: number
successor?: MatrixCall
toDeviceSeq: number = 0
transceivers: Map<string, RTCRtpTransceiver> = ...
turnServers: TurnServer[]
waitForLocalAVStream: boolean = false

Accessors

Methods

  • Create a datachannel using this call's peer connection.

    Parameters

    • label: string

      A human readable label for this datachannel

    • options: undefined | RTCDataChannelInit

      An object providing configuration options for the data channel.

    Returns RTCDataChannel

  • This method removes all video/rtx codecs from screensharing video transceivers. This is necessary since they can cause problems. Without this the following steps should produce an error: Chromium calls Firefox Firefox answers Firefox starts screen-sharing Chromium starts screen-sharing Call crashes for Chromium with: [96685:23:0518/162603.933321:ERROR:webrtc_video_engine.cc(3296)] RTX codec (PT=97) mapped to PT=96 which is not in the codec list. [96685:23:0518/162603.933377:ERROR:webrtc_video_engine.cc(1171)] GetChangedRecvParameters called without any video codecs. [96685:23:0518/162603.933430:ERROR:sdp_offer_answer.cc(4302)] Failed to set local video description recv parameters for m-section with mid='2'. (INVALID_PARAMETER)

    Returns void

  • Parameters

    • callFeeds: CallFeed[]
    • requestScreenshareFeed: boolean = false

    Returns void

  • Hangup a call.

    Parameters

    • reason: CallErrorCode

      The reason why the call is being hung up.

    • suppressEvent: boolean

      True to suppress emitting an event.

    Returns void

  • Configure this call from a hangup or reject event. Used by MatrixClient.

    Parameters

    Returns void

  • Indicates whether we are 'on hold' to the remote party (ie. if true, they cannot hear us).

    Returns boolean

    true if the other party has put us on hold

  • Check if local video is muted.

    If there are multiple video tracks, all of the tracks need to be muted for this to return true. This means if there are no video tracks, this will return true.

    Returns boolean

    True if the local preview video is muted, else false (including if the call is not set up yet).

  • Check if the microphone is muted.

    If there are multiple audio tracks, all of the tracks need to be muted for this to return true. This means if there are no audio tracks, this will return true.

    Returns boolean

    True if the mic is muted, else false (including if the call is not set up yet).

  • Returns boolean

    true if we have put the party on the other side of the call on hold (that is, we are signalling to them that we are not listening)

  • If there is a screensharing stream returns true, otherwise returns false

    Returns boolean

    is screensharing

  • Returns true if there are no incoming feeds, otherwise returns false

    Returns boolean

    no incoming feeds

  • Adds the listener function to the end of the listeners array for the event named event.

    No checks are made to see if the listener has already been added. Multiple calls passing the same combination of event and listener will result in the listener being added, and called, multiple times.

    By default, event listeners are invoked in the order they are added. The TypedEventEmitter#prependListener method can be used as an alternative to add the event listener to the beginning of the listeners array.

    Type Parameters

    Parameters

    Returns this

    a reference to the EventEmitter, so that calls can be chained.

  • Returns true if this.remoteSDPStreamMetadata is defined, otherwise returns false

    Returns boolean

    can screenshare

  • Place a call to this room.

    Parameters

    • audio: boolean
    • video: boolean

    Returns Promise<void>

    Throws

    if you have not specified a listener for 'error' events.

    Throws

    if have passed audio=false.

  • Place a call to this room with call feed.

    Parameters

    • callFeeds: CallFeed[]

      to use

    • requestScreenshareFeed: boolean = false

    Returns Promise<void>

    Throws

    if you have not specified a listener for 'error' events.

    Throws

    if have passed audio=false.

  • Place a video call to this room.

    Returns Promise<void>

    Throws

    If you have not specified a listener for 'error' events.

  • Place a voice call to this room.

    Returns Promise<void>

    Throws

    If you have not specified a listener for 'error' events.

  • Adds the listener function to the beginning of the listeners array for the event named event.

    No checks are made to see if the listener has already been added. Multiple calls passing the same combination of event and listener will result in the listener being added, and called, multiple times.

    Type Parameters

    Parameters

    Returns this

    a reference to the EventEmitter, so that calls can be chained.

  • Pushes supplied feed to the call

    Parameters

    • callFeed: CallFeed

      to push

    • addToPeerConnection: boolean = true

      whether to add the tracks to the peer connection

    Returns void

  • This method is used ONLY if the other client doesn't support sending SDPStreamMetadata

    Parameters

    Returns void

  • Queue a candidate to be sent

    Parameters

    • content: null | RTCIceCandidate

      The candidate to queue up, or null if candidates have finished being generated and end-of-candidates should be signalled

    Returns void

  • Reject a call This used to be done by calling hangup, but is a separate method and protocol event as of MSC2746.

    Returns void

  • Removes all listeners, or those of the specified event.

    It is bad practice to remove listeners added elsewhere in the code, particularly when the EventEmitter instance was created by some other component or module (e.g. sockets or file streams).

    Parameters

    Returns this

    a reference to the EventEmitter, so that calls can be chained.

  • Removes local call feed from the call and its tracks from the peer connection

    Parameters

    Returns void

  • Replace this call with a new call, e.g. for glare resolution. Used by MatrixClient.

    Parameters

    Returns void

  • Sends a DTMF digit to the other party

    Parameters

    • digit: string

      The digit (nb. string - '#' and '*' are dtmf too)

    Returns void

  • Set whether our outbound video should be muted or not.

    Parameters

    • muted: boolean

      True to mute the outbound video.

    Returns Promise<boolean>

    the new mute state

  • Set whether the microphone should be muted or not.

    Parameters

    • muted: boolean

      True to mute the mic.

    Returns Promise<boolean>

    the new mute state

  • Starts/stops screensharing

    Parameters

    • enabled: boolean

      the desired screensharing state

    • Optional opts: IScreensharingOpts

      screen sharing options

    Returns Promise<boolean>

    new screensharing state

  • Starts/stops screensharing Should be used ONLY if the opponent doesn't support SDPStreamMetadata

    Parameters

    • enabled: boolean

      the desired screensharing state

    • Optional opts: IScreensharingOpts

      screen sharing options

    Returns Promise<boolean>

    new screensharing state

  • Parameters

    • wantedValue: undefined | boolean
    • valueOfTheOtherSide: boolean
    • type: "audio" | "video"

    Returns boolean

  • Replaces/adds the tracks from the passed stream to the localUsermediaStream

    Parameters

    • stream: MediaStream

      to use a replacement for the local usermedia stream

    • forceAudio: boolean = false
    • forceVideo: boolean = false

    Returns Promise<void>

  • Adds an audio and/or video track - upgrades the call

    Parameters

    • audio: boolean

      should add an audio track

    • video: boolean

      should add an video track

    Returns Promise<void>

Generated using TypeDoc