import { Mutex } from '@livekit/mutex'; import type { LoggerOptions } from '../types'; import { Track } from './Track'; import type { VideoCodec } from './options'; import type { TrackProcessor } from './processor/types'; import { LocalTrackRecorder } from './record'; import type { ReplaceTrackOptions } from './types'; export default abstract class LocalTrack extends Track { protected _sender?: RTCRtpSender; private autoStopPreConnectBuffer; /** @internal */ get sender(): RTCRtpSender | undefined; /** @internal */ set sender(sender: RTCRtpSender | undefined); /** @internal */ codec?: VideoCodec; get constraints(): MediaTrackConstraints; get hasPreConnectBuffer(): boolean; protected _constraints: MediaTrackConstraints; protected reacquireTrack: boolean; protected providedByUser: boolean; protected muteLock: Mutex; protected pauseUpstreamLock: Mutex; protected processorElement?: HTMLMediaElement; protected processor?: TrackProcessor; protected audioContext?: AudioContext; protected manuallyStopped: boolean; protected localTrackRecorder: LocalTrackRecorder | undefined; protected trackChangeLock: Mutex; protected pendingDeviceChange: boolean; /** * * @param mediaTrack * @param kind * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK */ protected constructor(mediaTrack: MediaStreamTrack, kind: TrackKind, constraints?: MediaTrackConstraints, userProvidedTrack?: boolean, loggerOptions?: LoggerOptions); get id(): string; get dimensions(): Track.Dimensions | undefined; private _isUpstreamPaused; get isUpstreamPaused(): boolean; get isUserProvided(): boolean; get mediaStreamTrack(): MediaStreamTrack; get isLocal(): boolean; /** * @internal * returns mediaStreamTrack settings of the capturing mediastreamtrack source - ignoring processors */ getSourceTrackSettings(): MediaTrackSettings; private setMediaStreamTrack; waitForDimensions(timeout?: number): Promise; setDeviceId(deviceId: ConstrainDOMString): Promise; abstract restartTrack(constraints?: unknown): Promise; /** * @returns DeviceID of the device that is currently being used for this track */ getDeviceId(normalize?: boolean): Promise; mute(): Promise; unmute(): Promise; replaceTrack(track: MediaStreamTrack, options?: ReplaceTrackOptions): Promise; replaceTrack(track: MediaStreamTrack, userProvidedTrack?: boolean): Promise; protected restart(constraints?: MediaTrackConstraints, isUnmuting?: boolean): Promise; protected setTrackMuted(muted: boolean): void; protected get needsReAcquisition(): boolean; protected handleAppVisibilityChanged(): Promise; private handleTrackMuteEvent; private debouncedTrackMuteHandler; private handleTrackUnmuteEvent; private handleEnded; stop(): void; /** * pauses publishing to the server without disabling the local MediaStreamTrack * this is used to display a user's own video locally while pausing publishing to * the server. * this API is unsupported on Safari < 12 due to a bug **/ pauseUpstream(): Promise; resumeUpstream(): Promise; /** * Gets the RTCStatsReport for the LocalTrack's underlying RTCRtpSender * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport * * @returns Promise | undefined */ getRTCStatsReport(): Promise; /** * Sets a processor on this track. * See https://github.com/livekit/track-processors-js for example usage * * @param processor * @param showProcessedStreamLocally * @returns */ setProcessor(processor: TrackProcessor, showProcessedStreamLocally?: boolean): Promise; getProcessor(): TrackProcessor | undefined; /** * Stops the track processor * See https://github.com/livekit/track-processors-js for example usage * */ stopProcessor(keepElement?: boolean): Promise; /** * @internal * This method assumes the caller has acquired a trackChangeLock already. * The public facing method for stopping the processor is `stopProcessor` and it wraps this method in the trackChangeLock. */ protected internalStopProcessor(keepElement?: boolean): Promise; /** @internal */ startPreConnectBuffer(timeslice?: number): void; /** @internal */ stopPreConnectBuffer(): void; /** @internal */ getPreConnectBuffer(): ReadableStream | undefined; getPreConnectBufferMimeType(): string | undefined; protected abstract monitorSender(): void; } //# sourceMappingURL=LocalTrack.d.ts.map