import ReadOnlySubject from '../../rx/ReadOnlySubject'; import Dimension from '../../video/Dimension'; import EndPoint, { IStream } from '../discovery/EndPoint'; import { IOnRealTimeSubscribeRequestCallback } from './IOnRealTimeSubscribeRequestCallback'; import { IOnRealTimeSubscribeResponseCallback } from './IOnRealTimeSubscribeResponseCallback'; import IPeerConnection from '../../rtc/IPeerConnection'; import { IChannel } from './IChannel'; import ChannelState from './ChannelState'; import { IRtcMonitorStatistic } from '../../rtc/RtcConnectionMonitor'; import { EncodedEdgeToken } from '../../edgeAuth/EncodedEdgeToken'; import { BitsPerSecond, Millisecond } from '../../units/Units'; import { IEncodedStreamSink } from '../transformation/EncodedStreamSink'; import { IStreamTrackTransform } from '../transformation/StreamTrackTransform'; import { DecodedFrameTimingInformation, RenderedFrameTimingInformation } from '../frameTiming/FrameTimingInformation'; export type ChannelOptions = { targetLag?: Millisecond; videoStreamTransformCallback?: IStreamTrackTransform; audioStreamTransformCallback?: IStreamTrackTransform; encodedVideoStreamSink?: IEncodedStreamSink; encodedAudioStreamSink?: IEncodedStreamSink; onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback; onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback; }; export default class Channel implements IChannel { private readonly _logger; private readonly _tokenContext; private readonly _channelContext; private readonly _peerConnectionContext; private readonly _streamTransformContext; private readonly _stateContext; private readonly _frameTimingInformationContext; private readonly _exponentialBackoff; private readonly _channelStartTime; private readonly _readOnlyPeerConnection; private readonly _readOnlyState; private readonly _readOnlyExists; private readonly _readOnlyAutoMuted; private readonly _readOnlyAutoPaused; private readonly _readOnlyTokenExpiring; private readonly _readOnlyAuthorized; private readonly _readOnlyOnline; private readonly _readOnlyLoading; private readonly _readOnlyPlaying; private readonly _readOnlyStandby; private readonly _readOnlyStopped; private readonly _readOnlyTargetLag; private readonly _readOnlyLag; private readonly _readOnlyBitrateLimit; private readonly _readOnlyResolution; private readonly _readOnlyFailureCount; private readonly _readOnlyEndPoint; private readonly _readOnlyStream; private readonly _readOnlyRtcStatistics; private readonly _readOnlyMediaStream; private readonly _readOnlyIsFrameTimingInformationEnabled; private readonly _readOnlyDecodedFrameTimingInformation; private readonly _readOnlyRenderedFrameTimingInformation; private _metricsService; private _streamSubscriber; private readonly _sessionTelemetry; private readonly _videoMetaDataChangedHandler; constructor(videoElement: HTMLVideoElement, token: EncodedEdgeToken, options?: ChannelOptions); get videoElement(): HTMLVideoElement | null; set videoElement(videoElement: HTMLVideoElement); private handleVideoMetaDataChanged; get token(): EncodedEdgeToken; set token(token: EncodedEdgeToken); get peerConnection(): ReadOnlySubject; get state(): ReadOnlySubject; get exists(): ReadOnlySubject; get autoMuted(): ReadOnlySubject; get autoPaused(): ReadOnlySubject; get tokenExpiring(): ReadOnlySubject; get authorized(): ReadOnlySubject; get online(): ReadOnlySubject; get loading(): ReadOnlySubject; get playing(): ReadOnlySubject; get standby(): ReadOnlySubject; get stopped(): ReadOnlySubject; get targetLag(): ReadOnlySubject; get lag(): ReadOnlySubject; get bitrateLimit(): BitsPerSecond; get resolution(): ReadOnlySubject; get failureCount(): ReadOnlySubject; get endPoint(): ReadOnlySubject; get stream(): ReadOnlySubject; get streamId(): string; get rtcStatistics(): ReadOnlySubject; get mediaStream(): ReadOnlySubject; get isFrameTimingInformationEnabled(): ReadOnlySubject; get decodedFrameTimingInformation(): ReadOnlySubject; get renderedFrameTimingInformation(): ReadOnlySubject; setBitrateLimit(bitrateLimit: BitsPerSecond): void; clearBitrateLimit(): void; updateTargetLag(lag: Millisecond): void; stop(reason: string): Promise; private processStop; resume(): Promise; mute(): void; unmute(): void; dispose(): Promise; getUri(token: EncodedEdgeToken): URL; start(): Promise; private isRetryableState; private isSubscriberHealthy; private restartOnForeground; private processStart; private restartAfterStop; play(): Promise; private getRetryInterval; private handleStreamFailure; private cleanUpResources; private configureFrameTimingInformation; private playMediaStreamInVideoElement; }