UNPKG

agora-rtc-sdk-ng

Version:
672 lines (655 loc) 26.1 kB
import { RetryConfiguration, TurnServerConfigWithMode, CloudProxyServerMode, EventEmitter, PromiseMutex, SDKStore, SDK_CODEC, SDK_AUDIO_CODEC, AgoraPCStats, UID, Candidate, Setup, CandidateStats, FingerPrint, ConnectionDisconnectedReason, WebSocketQuitReason } from '@agora-js/shared'; import { AgoraRTCPlayer, VideoPlayer, LocalTrack, LocalDataChannel, RemoteDataChannel, LocalVideoTrackStats, AgoraRTCStats, LocalVideoTrack } from '@agora-js/media'; import { ServerAddress, RTPCapabilitiesBeforeMerge, RTPCapabilitiesWithDirection } from '@agora-js/protocol'; interface SignalSpec { clientId: string; retryConfig: RetryConfiguration; forceWaitGatewayResponse: boolean; } declare enum SignalConnectionState { CONNECTING = "connecting", CONNECTED = "connected", RECONNECTING = "reconnecting", CLOSED = "closed" } declare enum SignalRequestType { PING = "ping", PING_BACK = "ping_back", JOIN = "join_v3", REJOIN = "rejoin_v3", LEAVE = "leave", SET_CLIENT_ROLE = "set_client_role", PUBLISH = "publish", PUBLISH_DATASTREAM = "publish_datastream", UNPUBLISH = "unpublish", UNPUBLISH_DATASTREAM = "unpublish_datastream", SUBSCRIBE = "subscribe", PRE_SUBSCRIBE = "pre_subscribe", SUBSCRIBE_DATASTREAM = "subscribe_datastream", SUBSCRIBE_STREAMS = "subscribe_streams", UNSUBSCRIBE = "unsubscribe", UNSUBSCRIBE_DATASTREAM = "unsubscribe_datastream", UNSUBSCRIBE_STREAMS = "unsubscribe_streams", SUBSCRIBE_CHANGE = "subscribe_change", TRAFFIC_STATS = "traffic_stats", RENEW_TOKEN = "renew_token", SET_DUAL_STREAM_MODE = "set_dual_stream_mode", SWITCH_VIDEO_STREAM = "switch_video_stream", DEFAULT_VIDEO_STREAM = "default_video_stream", SET_FALLBACK_OPTION = "set_fallback_option", CONFIGURE = "configure", GATEWAY_INFO = "gateway_info", CONTROL = "control", SEND_METADATA = "send_metadata", DATA_STREAM = "data_stream", PICK_SVC_LAYER = "pick_svc_layer", RESTART_ICE = "restart_ice", CONNECT_PC = "connect_pc", SET_VIDEO_PROFILE = "set_video_profile", SET_PARAMETER = "set_parameter", SET_RTM2_FLAG = "set_rtm2_flag", DOWNGRADE_CODEC = "downgrade_codec" } declare enum SignalUploadType { WRTC_STATS = "wrtc_stats", WS_INFLATE_DATA_LENGTH = "ws_inflate_data_length", DENOISER_STATS = "denoiser_stats", EXTENSION_USAGE_STATS = "extension_usage_stats" } declare enum SignalNotifyType { ON_USER_ONLINE = "on_user_online", ON_USER_OFFLINE = "on_user_offline", ON_STREAM_FALLBACK_UPDATE = "on_stream_fallback_update", ON_PUBLISH_STREAM = "on_publish_stream", ON_UPLINK_STATS = "on_uplink_stats", ON_P2P_LOST = "on_p2p_lost", ON_REMOVE_STREAM = "on_remove_stream", ON_ADD_AUDIO_STREAM = "on_add_audio_stream", ON_ADD_VIDEO_STREAM = "on_add_video_stream", ON_TOKEN_PRIVILEGE_WILL_EXPIRE = "on_token_privilege_will_expire", ON_TOKEN_PRIVILEGE_DID_EXPIRE = "on_token_privilege_did_expire", ON_USER_BANNED = "on_user_banned", ON_USER_LICENSE_BANNED = "on_user_license_banned", ON_NOTIFICATION = "on_notification", ON_CRYPT_ERROR = "on_crypt_error", MUTE_AUDIO = "mute_audio", MUTE_VIDEO = "mute_video", UNMUTE_AUDIO = "unmute_audio", UNMUTE_VIDEO = "unmute_video", ON_P2P_OK = "on_p2p_ok", RECEIVE_METADATA = "receive_metadata", ON_DATA_STREAM = "on_data_stream", ON_RTP_CAPABILITY_CHANGE = "on_rtp_capability_change", ON_REMOTE_DATASTREAM_UPDATE = "on_remote_datastream_update", ON_REMOTE_FULL_DATASTREAM_INFO = "on_remote_full_datastream_info", ENABLE_LOCAL_VIDEO = "enable_local_video", DISABLE_LOCAL_VIDEO = "disable_local_video", ENABLE_LOCAL_AUDIO = "enable_local_audio", DISABLE_LOCAL_AUDIO = "disable_local_audio", ON_PUBLISHED_USER_LIST = "on_published_user_list", ENABLE_MULTI_STREAM = "enable_multi_stream", ON_USER_LIST = "on_user_list" } interface PeerConnectionSpec { iceServers?: RTCIceServer[]; turnServer?: TurnServerConfigWithMode; enableEncodedTransform?: boolean; isPreallocation?: boolean; cloudProxyServer?: CloudProxyServerMode; } interface AnyObject { [k: string]: any; [j: number]: any; } interface RemoteConfig { tcc?: boolean; remb?: boolean; twcc?: boolean; } type Transmission = WebSocket | RTCDataChannel; declare abstract class AgoraTransmissionMediumManager<T extends Transmission> extends EventEmitter { get url(): string | null; connectionID: number; currentURLIndex: number; reconnectReason?: TransmitterQuitReason; get reconnectMode(): "retry" | "tryNext" | "recover"; set reconnectMode(newMode: "retry" | "tryNext" | "recover"); get state(): TransmitterConnectionState; set state(newState: TransmitterConnectionState); protected _reconnectMode: "retry" | "tryNext" | "recover"; protected abstract _initMutex: PromiseMutex; protected readonly _name: string; protected _state: TransmitterConnectionState; protected abstract _reconnectInterrupter?: () => void; protected abstract _url?: string; protected _retryConfig: RetryConfiguration; protected _reconnectCount: number; protected _forceCloseTimeout: number; protected _onlineReconnectListener?: Promise<void>; protected _closeEstablishingTransmitter?: (() => void) | undefined; protected _store?: SDKStore; protected _joinChannelServiceRecordIndex?: number; protected abstract _transmitter?: T; protected _useCompress: boolean; protected _inflateLength: number; protected _deflateLength: number; constructor(name: string, _retryConfig: RetryConfiguration, useCompress: boolean, store?: SDKStore); protected resetReconnectCount(reason: "retry" | "tryNext" | "recover" | string): void; abstract getConnection(): any; abstract init(addresses: ServerAddress[], forceCloseTimeout: number): Promise<void>; close(failed?: boolean, lazyClose?: boolean): void; reconnect(reconnectMode?: "tryNext" | "retry" | "recover", reason?: TransmitterQuitReason): void; abstract sendMessage(...args: unknown[]): void; getInflateData(): { inflateLength: number; deflateLength: number; }; protected setInflateData(data: TransmissionCompressedInfo): void; protected clearInflateData(): void; protected abstract createTransmitterConnection(address: unknown, isRetry?: boolean): Promise<void>; protected abstract reconnectWithAction(action: "tryNext" | "retry" | "recover" | string, needWaitTime: boolean): Promise<boolean>; } declare enum TransmitterQuitReason { NETWORK_ERROR = "NETWORK_ERROR", SERVER_ERROR = "SERVER_ERROR", MULTI_IP = "MULTI_IP", TIMEOUT = "TIMEOUT", OFFLINE = "OFFLINE", LEAVE = "LEAVE", P2P_FAILED = "P2P_FAILED", FALLBACK = "FALLBACK" } type TransmitterConnectionState = "connected" | "connecting" | "reconnecting" | "closed" | "failed"; interface TransmissionCompressedInfo { origin: AnyObject; originLength: number; shortKeyAndValue: AnyObject; msgpackSer: Uint8Array; compressed: Uint8Array; compressedLength: number; time: number; } interface TransmissonInfo { transmitter: Transmission; close: () => void; } declare abstract class P2PConnectionBaseImpl extends EventEmitter { onICEConnectionStateChange?: (ICEConnectionState: RTCIceConnectionState) => void; onConnectionStateChange?: (connectionState: RTCPeerConnectionState) => void; onDTLSTransportStateChange?: (state: RTCDtlsTransportState) => void; onDTLSTransportError?: (error: any) => void; onICETransportStateChange?: (state: RTCIceTransportState) => void; onFirstAudioReceived?: (ssrcId: number) => void; onFirstVideoReceived?: (ssrcId: number) => void; onFirstAudioDecoded?: (ssrcId: number) => void; onFirstVideoDecoded?: (ssrcId: number, width: number, height: number) => void; onFirstVideoRender?: (ssrcId: number) => void; onFirstVideoBufferReady?: (ssrcId: number) => void; onFirstVideoDecodedTimeout?: (ssrcId: number) => void; onSelectedLocalCandidateChanged?: (cur: CandidateStats, prev: CandidateStats) => void; onSelectedRemoteCandidateChanged?: (cur: CandidateStats, prev: CandidateStats) => void; onICECandidateError?: (errMsg: string) => void; getLocalVideoStats?: () => LocalVideoTrackStats & AgoraRTCStats; constructor(spec: PeerConnectionSpec, store: SDKStore); abstract get currentLocalDescription(): RTCSessionDescription | null; abstract get currentRemoteDescription(): RTCSessionDescription | null; abstract get peerConnectionState(): RTCPeerConnectionState; abstract get iceConnectionState(): RTCIceConnectionState; abstract get localCodecs(): SDK_CODEC[]; } declare abstract class P2PConnectionImpl extends P2PConnectionBaseImpl { abstract establishPromise: Promise<EstablishParams>; constructor(spec: PeerConnectionSpec, store: SDKStore); abstract establish(): Promise<EstablishParams>; abstract connect(connectParams: ConnectionParams): Promise<void | TransmissonInfo>; abstract updateRemoteConnect(connectParams: ConnectionParams): Promise<void>; abstract updateRemoteRTPCapabilities(mids: string[], codecs: SDK_CODEC[]): Promise<void>; abstract getPreMedia(ssrcId: number): { mid: string; track: MediaStreamTrack; transceiver: RTCRtpTransceiver; player: AgoraRTCPlayer | VideoPlayer | undefined; } | undefined; abstract send(tracks: LocalTrack[], codec: SDK_CODEC, audioCodec: SDK_AUDIO_CODEC): AsyncGenerator<SSRCMessage[], { localSSRC: SSRCMessage; id: string; }[], (RemoteConfig | undefined)[]>; abstract stopSending(mids: string[]): Promise<void>; abstract receive(kind: Kind, ssrcMsg: SSRCMessage, mslabel: string, remoteConfig: RemoteConfig | undefined): Promise<{ track: MediaStreamTrack; id: string; transceiver?: RTCRtpTransceiver; }>; abstract batchReceive(list: { kind: Kind; ssrcMsg: SSRCMessage; mslabel: string; }[]): Promise<{ track: MediaStreamTrack; id: string; transceiver?: RTCRtpTransceiver; }[]>; abstract stopReceiving(mids: string[]): Promise<void>; abstract muteRemote(mid: string): Promise<void>; abstract unmuteRemote(mid: string): Promise<void>; abstract muteLocal(mids: string[]): Promise<void>; abstract unmuteLocal(ids: string[]): Promise<void>; abstract restartICE(type?: ICERestartType): AsyncGenerator<ICEParameters, void, { remoteIceParameters: ICEParameters; }>; abstract close(): void; abstract getStats(): AgoraPCStats; abstract getRemoteVideoIsReady(ssrcId: number): boolean; abstract updateEncoderConfig(mid: string, track: LocalTrack): Promise<void>; abstract updateSendParameters(mid: string, track: LocalTrack): Promise<void>; abstract setStatsRemoteVideoIsReady(ssrcId: number, isReady: boolean): void; abstract replaceTrack(track: LocalTrack, id: string): Promise<void>; abstract getRemoteSSRC(mid: string): Promise<number | undefined>; abstract createDataChannels(uid: UID, dataChannels: LocalDataChannel[] | RemoteDataChannel[]): Promise<void>; abstract stopDataChannels(uid: UID): Promise<void>; abstract setConfiguration(spec: PeerConnectionSpec): void; } interface ICEParameters { iceUfrag: string; icePwd: string; } interface DtlsParameters { fingerprints: FingerPrint[]; } declare enum Kind { VIDEO = "video", AUDIO = "audio" } declare enum ICERestartType { UDP_RELAY = "udp_relay", UDP_TCP_RELAY = "udp_tcp_relay", TCP_RELAY = "tcp_relay", RELAY = "relay" } type EstablishParams = { iceParameters: ICEParameters; dtlsParameters: DtlsParameters; rtpCapabilities: RTPCapabilitiesBeforeMerge; offerSDP?: string; }; type ConnectionParams = { iceParameters: ICEParameters; dtlsParameters: DtlsParameters; candidates: Candidate[]; rtpCapabilities: RTPCapabilitiesWithDirection; setup: Setup; cname: string; preallocation?: boolean; preSSRCs?: PreSSRCMessage[]; }; type SSRCMessage = { ssrcId: number; rtx?: number; }[]; type PreSSRCMessage = { kind: Kind; ssrcMsg: SSRCMessage; mslabel: string; }; declare class DataChannelConnection extends P2PConnectionImpl { name: string; private readonly store; private readonly peerConnection; private cname?; protected mutex: PromiseMutex; dataChannel: RTCDataChannel; get currentLocalDescription(): RTCSessionDescription | null; get currentRemoteDescription(): RTCSessionDescription | null; get peerConnectionState(): RTCPeerConnectionState; get iceConnectionState(): RTCIceConnectionState; get localCodecs(): SDK_CODEC[]; private _p2pConnection; establishPromise: Promise<EstablishParams>; private _nvMedia?; constructor(spec: any, store: SDKStore); getPreMedia(ssrcId: number): { mid: string; track: MediaStreamTrack; transceiver: RTCRtpTransceiver; player: AgoraRTCPlayer | VideoPlayer | undefined; firstVideoRender?: number; } | undefined; isPreSub(): boolean; establish(): Promise<EstablishParams>; getP2PConnectionParams(): Promise<EstablishParams>; updateRtpSenderEncodings(track: LocalVideoTrack): Promise<void>; connect(connectParams: ConnectionParams): Promise<TransmissonInfo>; checkDtlsParameters(fingerprints: FingerPrint[]): boolean; checkIceParameters(iceParameters: ICEParameters): boolean; updateRemoteRTPCapabilities(mids: string[], codecs: SDK_CODEC[]): Promise<void>; send(tracks: LocalTrack[], codec: SDK_CODEC, audioCodec: SDK_AUDIO_CODEC): AsyncGenerator<SSRCMessage[], { localSSRC: SSRCMessage; id: string; }[], (RemoteConfig | undefined)[]>; stopSending(mids: string[], nolock?: boolean): Promise<void>; createDataChannels(uid: UID, dataChannels: LocalDataChannel[] | RemoteDataChannel[]): Promise<void>; stopDataChannels(uid: UID): Promise<void>; receive(kind: Kind, ssrcMsg: SSRCMessage, mslabel: string, remoteConfig?: RemoteConfig): Promise<{ track: MediaStreamTrack; id: string; transceiver?: RTCRtpTransceiver; }>; batchReceive(receiveList: { kind: Kind; ssrcMsg: SSRCMessage; mslabel: string; }[]): Promise<{ track: MediaStreamTrack; id: string; }[]>; stopReceiving(mids: string[]): Promise<void>; muteRemote(mid: string): Promise<void>; unmuteRemote(mid: string): Promise<void>; muteLocal(mids: string[]): Promise<void>; unmuteLocal(ids: string[]): Promise<void>; restartICE(type?: ICERestartType): AsyncGenerator<ICEParameters, void, { remoteIceParameters: ICEParameters; }>; close(): void; getStats(): AgoraPCStats; getRemoteVideoIsReady(ssrcId: number): boolean; updateRemoteConnect(connectParams: ConnectionParams): Promise<void>; updateEncoderConfig(mid: string, track: LocalTrack): Promise<void>; updateSendParameters(mid: string, track: LocalTrack): Promise<void>; setStatsRemoteVideoIsReady(ssrcId: number, isReady: boolean): void; replaceTrack(track: LocalTrack, mid: string): Promise<void>; getRemoteSSRC(mid: string): Promise<number | undefined>; private logSDPExchange; private static resolvePCConfiguration; private static turnServerConfigToIceServers; private bindPCEvents; private closeSignal; private unbindConnectionEvents; setConfiguration(spec: PeerConnectionSpec): void; } type StatsCounter = StatsCounter6s | StatsCounter3s | StatsCounter1s | StatsCounter60s; declare enum StatsCounter60s { Video_Send_Type = 190 } declare enum StatsCounter6s { Video_Send_Qp_Sum = 2143, Video_Send_Freeze = 2082, Video_Send_Codec = 2240, Video_Send_Power_Efficient_Encoder = 2241, Video_Recv_Qp_Sum = 2144, Video_Recv_Freeze = 2084, Video_Recv_Codec = 2242, Video_Recv_Power_Efficient_Decoder = 2243, Video_Render_Freeze_Time = 2109, Video_Render_Freeze_Time_Render = 2147, Video_Render_Freeze_Time_Render2 = 2223, Audio_Recv_Freeze = 2083 } declare enum StatsCounter3s { Video_Send_Retransmit = 2062, Video_Send_Target_Encoded = 2064, Video_Send_Actual_Encoded = 2060, Video_Send_Transmit = 2066, Video_Send_Bandwidth = 2061, Video_Capture_Height = 2033, Video_Capture_Width = 2035, Video_Capture_Frame_Rate = 2034, Video_Send_Low_Height = 2073, Video_Send_Low_Frame_Rate = 2075, Video_Send_Low_Width = 2077, Video_Send_Low_Bitrate = 2069, Video_Send_Low_Package_Lost = 2070, Video_Send_Low_Package_Rate = 2071, Video_Send_Frame_Rate = 2002, Video_Send_Width = 2003, Video_Send_Height = 2004, Video_Send_Disabled = 2095, Video_Send_Adaptation = 2032, Video_Send_Player_Status = 2128, Video_Send_Nacks = 2009, Video_Send_Plis = 2010, Video_Send_Firs = 2011, Video_Send_Avg_Encode = 2007, Video_Send_Huge_Frame_Sent = 2174, Video_Send_Bytes_Retransmit = 2173, Video_Send_Packages_Retransmit = 2172, Video_Send_Key_Frames_Encoded = 2207, Video_Send_Bitrate = 2012, Video_Send_Package_Rate = 2031, Video_Send_Package_Lost = 2005, Audio_Capture_PCM_Level = 2104, Audio_Send_Level = 2038, Audio_Send_Bitrate = 2039, Audio_Send_Package_Rate = 2040, Audio_Send_AEC_Return_Loss = 2041, Audio_Send_AEC_Return_Loss_Enhancement = 2042, Audio_Send_Freeze = 2081, Audio_Send_Disabled = 2096, Audio_Send_Bytes_Retransmit = 2179, Audio_Send_Packages_Retransmit = 2180, Video_Recv_Height = 2019, Video_Recv_Width = 2018, Video_Recv_Frame_Rate_Output = 2155, Video_Recv_Jitter_Buffer = 2023, Video_Recv_Current_Delay = 2024, Video_Recv_Nacks = 2026, Video_Recv_Plis = 2027, Video_Recv_Firs = 2028, Video_Recv_Disabled = 2101, Video_Recv_Player_Status = 2129, Video_Recv_I_Frame_Delay = 2149, Video_Render_Frame_Rate_Render = 2022, Video_Render_Freeze_Duration = 2156, Audio_Render_Level = 2043, Audio_Render_Freeze_Time_80ms = 2226, Audio_Render_Freeze_Time_200ms = 2227, Audio_Render_Freeze_Samples_80ms = 2228, Audio_Render_Freeze_Samples_200ms = 2229, Audio_Recv_PCM_Level = 2105, Audio_Recv_Disabled = 2102, Audio_Recv_Jitter_Buffer = 2054, Audio_Recv_Current_Delay = 2047, Audio_Recv_Player_Status = 2130, Audio_Recv_Bitrate = 2044, Audio_Recv_Concealed_Samples = 2148, Audio_Recv_Total_Samples_Received = 2224 } declare enum StatsCounter1s { Video_Render_Frame_Rate_Decode = 2021, Video_Recv_Frame_Rate = 2020, Video_Recv_Frame_Dropped = 2181, Video_Recv_Bytes_Retransmit = 2175, Video_Recv_Packages_Retransmit = 2176, Video_Recv_Packages_Discarded = 2198, Video_Recv_Avg_Decode = 2200, Video_Recv_Avg_Processing_Delay = 2202, Video_Recv_Avg_Assembly_Time = 2203, Video_Recv_Avg_Inter_Frame_Delay = 2204, Video_Recv_Key_Frames_Decoded = 2206, Video_Recv_Package_Lost = 2014, Video_Recv_Bitrate = 2029, Video_Recv_Package_Rate = 2078, Audio_Recv_Jitter = 2055, Audio_Recv_Bytes_Retransmit = 2178, Audio_Recv_Packages_Retransmit = 2177, Audio_Recv_Packages_Discarded = 2199, Audio_Recv_Avg_Processing_Delay = 2201, Audio_Recv_Package_Rate = 2046, Audio_Recv_Package_Lost = 2045, Audio_Recv_AV_Sync_TIME = 2237 } interface UploadOutboundStats { high?: Partial<Record<StatsCounter, number>>; low?: Partial<Record<StatsCounter, number>>; audio?: Partial<Record<StatsCounter, number>>; } interface UploadInboundStats { peer: UID; video?: Partial<Record<StatsCounter, number>>; audio?: Partial<Record<StatsCounter, number>>; } declare enum TransportStatsCounter { RTT = 2006, CONN_TYPE = 801, STATS_UPDATE_INTERVAL = 2205 } declare enum BaseTransportCounter { RTC_PEER_CONNECTION_STATE = 2219, PAGE_VISIBILITY = 2233 } declare enum TransportBandwidthCounter { Transport_Send_Bitrate = 2234, Transport_Recv_Bitrate = 2235 } interface UploadMixedStats { peer?: UID; video?: Record<StatsCounter, number>; audio?: Record<StatsCounter, number>; addition?: (Record<TransportStatsCounter, number | undefined> & Partial<Record<BaseTransportCounter | TransportBandwidthCounter, number>>) | Partial<Record<BaseTransportCounter, number>>; } interface UploadStatsInfo { inbound?: UploadInboundStats[]; outbound?: UploadOutboundStats[]; misc?: UploadMixedStats[]; } declare enum PacketType { Default = 0, Ack = 1 } interface MessagePacket { version: number; type: PacketType.Default; packetNumber: number; sendTs: number; payload: string | Uint8Array; } interface AckPacket { version: number; type: PacketType.Ack; maxAckPacketNumber: number; shift: number; ackSendTs: number; } declare class Transmitter { private version; private readonly initialRTO; private readonly maxBatchAckCount; private readonly maxRTO; private readonly initialRTT; private readonly ID; private rtt; private packetNumber; private rtoRatioMap; private timeoutMap; private unorderedPacketQueue; private batchAckPacketQueue; private lastOrderedPacketNumber; private batchAckTimer?; private readonly sendImpl; private readonly receiveImpl; constructor(sendImpl: (buffer: ArrayBuffer) => void, receiveImpl: (payload: string | ArrayBuffer) => void, options?: { initialRTO?: number; initialRTT?: number; maxBatchAckCount?: number; maxRTO?: number; }); packetize(payload: string | Uint8Array, packetNumber: number): Omit<MessagePacket, "sendTs">; serialize(packet: MessagePacket | AckPacket): ArrayBuffer; deserialize(buffer: ArrayBuffer): MessagePacket | AckPacket; sendMessage(payload: string | Uint8Array): void; onData(data: ArrayBuffer): void; close(): void; private resendMessage; private calculateRTO; private updateRTT; private ack; private batchAck; private sendPacket; private clearRTO; } declare class AgoraDatachannelManager extends AgoraTransmissionMediumManager<RTCDataChannel> { protected _initMutex: PromiseMutex; protected _reconnectInterrupter?: (() => void) | undefined; protected _url?: string; protected _transmitter?: RTCDataChannel; private _addresses?; private _reliableTransmission?; private _textEncoder; private _textDecoder; constructor(name: string, _retryConfig: RetryConfiguration, useCompress?: boolean, store?: SDKStore); getConnection(): Transmitter | undefined; init(addresses: ServerAddress[], forceCloseTimeout?: number): Promise<void>; sendMessage(message: any, immediately?: boolean, isUint8ArrayMessage?: boolean): Promise<void>; unbindDcCloseEventListener(): void; private sendMessageWithJSON; private sendMessageWithUint8Array; protected createTransmitterConnection(address: ServerAddress): Promise<void>; protected reconnectWithAction(action: "retry" | "tryNext" | "recover", needWaitTime?: boolean): Promise<boolean>; } declare class DataChannelSignal extends EventEmitter { __name__: string; get connectionState(): SignalConnectionState; set connectionState(state: SignalConnectionState); get currentURLIndex(): number; private _disconnectedReason?; private _websocketReconnectReason?; private _connectionState; private reconnectToken?; get url(): string | null; get rtt(): number; websocket: AgoraDatachannelManager; openConnectionTime?: number; private clientId; private lastMsgTime; private uploadCache; private uploadCacheInterval?; private rttRolling; private pingpongTimer?; private inflateDataTimer?; private pingpongTimeoutCount; private ortc?; private joinResponse?; private multiIpOption?; private initError?; private spec; private store; private isJoining; private pendingNotifications; private processPendingNotifications; private handleUserBanned; constructor(spec: SignalSpec, store: SDKStore); request(type: SignalRequestType, payload?: any, noNeedToReSend?: boolean, noNeedResponse?: boolean): Promise<any>; waitMessage<T = any>(type: SignalNotifyType, filter?: (message: T) => boolean): Promise<T>; uploadWRTCStats(stats: UploadStatsInfo): void; upload(type: SignalUploadType, payload?: any): void; send(type: SignalRequestType, payload?: any): Promise<void>; init(urls: ServerAddress[]): Promise<any>; close(reason?: ConnectionDisconnectedReason): void; private join; private rejoin; reconnect(reconnectMode?: "retry" | "tryNext" | "recover", reason?: WebSocketQuitReason | TransmitterQuitReason): void; downgradeCodec(codec: string): Promise<boolean>; private handleNotification; private handlePingPong; private handleInflateData; private handleWebsocketEvents; private onWebsocketMessage; } type TRteServiceName = "ChannelMediaRelay" | "LiveStreaming" | "ImageModeration" | "ContentInspect" | "DataStream" | "P2PChannel" | "PlanBConnection" | "InterceptFrame" | "DataChannelConnection" | "DataChannelSignal"; interface IRteService<T = any, R = any> { name: TRteServiceName; create: (...args: any[]) => T; createSubmodule?: (...args: any[]) => R; } interface IDataChannelConnectionOptions { spec: PeerConnectionSpec; store: SDKStore; } interface IDataChannelSignalOptions { spec: SignalSpec; store: SDKStore; } declare const DataChannelConnectionService: IRteService<DataChannelConnection>; declare const DataChannelSignalService: IRteService<DataChannelSignal>; export { DataChannelConnectionService, DataChannelSignalService }; export type { IDataChannelConnectionOptions, IDataChannelSignalOptions };