import AudioVideoControllerState from '../audiovideocontroller/AudioVideoControllerState'; import BrowserBehavior from '../browserbehavior/BrowserBehavior'; import EncodedTransformWorkerManager from '../encodedtransformmanager/EncodedTransformWorkerManager'; import Logger from '../logger/Logger'; import RedundantAudioRecoveryMetricsObserver from '../redundantaudiorecoverymetricsobserver/RedundantAudioRecoveryMetricsObserver'; import VideoStreamIdSet from '../videostreamidset/VideoStreamIdSet'; import VideoStreamIndex from '../videostreamindex/VideoStreamIndex'; import TransceiverController from './TransceiverController'; export default class DefaultTransceiverController implements TransceiverController { protected logger: Logger; protected browserBehavior: BrowserBehavior; protected meetingSessionContext?: AudioVideoControllerState; protected encodedTransformWorkerManager?: EncodedTransformWorkerManager; protected _localCameraTransceiver: RTCRtpTransceiver | null; protected _localAudioTransceiver: RTCRtpTransceiver | null; protected videoSubscriptions: number[]; protected defaultMediaStream: MediaStream | null; protected peer: RTCPeerConnection | null; protected streamIdToTransceiver: Map; protected groupIdToTransceiver: Map; constructor(logger: Logger, browserBehavior: BrowserBehavior, meetingSessionContext?: AudioVideoControllerState, encodedTransformWorkerManager?: EncodedTransformWorkerManager); setEncodingParameters(encodingParamMap: Map): Promise; localAudioTransceiver(): RTCRtpTransceiver; localVideoTransceiver(): RTCRtpTransceiver; setVideoSendingBitrateKbps(bitrateKbps: number): Promise; setPeer(peer: RTCPeerConnection): void; reset(): void; private handleTrack; useTransceivers(): boolean; hasVideoInput(): boolean; trackIsVideoInput(track: MediaStreamTrack): boolean; setupLocalTransceivers(): void; /** * Returns true if the peer connection supports the header extension negotiation * API (`getHeaderExtensionsToNegotiate` / `setHeaderExtensionsToNegotiate`), * which allows configuring RTP header extensions without SDP munging. */ static canUseHeaderExtensionApi(peer: RTCPeerConnection): boolean; protected configureLocalCameraHeaderExtensions(): void; replaceAudioTrack(track: MediaStreamTrack): Promise; setAudioInput(track: MediaStreamTrack | null): Promise; setVideoInput(track: MediaStreamTrack | null): Promise; updateVideoTransceivers(videoStreamIndex: VideoStreamIndex, videosToReceive: VideoStreamIdSet): number[]; private updateTransceivers; private updateTransceiverWithStop; private updateTransceiverWithoutStop; getMidForStreamId(streamId: number): string | undefined; setStreamIdForMid(mid: string, newStreamId: number): void; getMidForGroupId(groupId: number): string | undefined; protected transceiverIsVideo(transceiver: RTCRtpTransceiver): boolean; private debugDumpTransceivers; private setTransceiverInput; /** * @deprecated This method is deprecated and should not be used. * Access the encodedTransformWorkerManager directly via the meeting session context instead. */ setAudioPayloadTypes(_payloadTypeMap: Map): void; /** * @deprecated This method is deprecated and should not be used. * Access the encodedTransformWorkerManager directly via the meeting session context instead. */ addRedundantAudioRecoveryMetricsObserver(_observer: RedundantAudioRecoveryMetricsObserver): void; /** * @deprecated This method is deprecated and should not be used. * Access the encodedTransformWorkerManager directly via the meeting session context instead. */ removeRedundantAudioRecoveryMetricsObserver(_observer: RedundantAudioRecoveryMetricsObserver): void; }