import "webrtc-adapter/out/adapter_no_edge_no_global.js"; import EventEmitter from "wolfy87-eventemitter"; import { SignalingWS } from "./models/ws"; import { Stream } from "./models/stream"; import { Merger } from "./models/merger"; import { User } from "./models/user"; import { SignalingTrackInfo, MergeJob, TrackMergeOptions, TrackBaseInfo, QNRTCConfig, Profile, TrackProfiles } from "./types"; import { Track } from "./models/stream/track"; import { QNMediaRecorder } from "./models/recorder"; import { PCTrack } from "./models/stream/pctrack"; import { ConnectionTransport } from "./models/Connection/transport"; export declare enum RoomState { Idle = 0, Connecting = 1, Connected = 2, Reconnecting = 3 } export declare abstract class QNRTCCore extends EventEmitter { userId?: string; userData?: string; appId?: string; roomName?: string; config: QNRTCConfig; profile?: Profile; profiles: Map; protected _trackInfo: SignalingTrackInfo[]; recorder: QNMediaRecorder; /** * 所有订阅的 PCTrack,需要注意的是这些 PCTrack 可能有 2 种状态 * 1. Connecting 表示正在进行连接过程 * 2. Conncted 表示连接已经建立(subscribe 已经 resolve) */ protected subscribeTracks: PCTrack[]; protected _users: Map; readonly users: User[]; protected connectionTransport?: ConnectionTransport; /** * 房间内所有 Track 的信息列表,包括未订阅的,用 TrackBaseInfo 表示 */ readonly trackInfoList: TrackBaseInfo[]; roomState: RoomState; private _roomState; private roomToken?; private accessToken?; protected sessionMode: "stream" | "track"; protected signaling?: SignalingWS; protected merger?: Merger; protected mergeJobMerger: { [jobId: string]: Merger; }; protected defaultMergeJobTracks: string[]; protected mergeJobTracks: { [jobId: string]: string[]; }; constructor(config?: QNRTCConfig); protected _setReconnectTimes(reconnectTimes: number): void; protected _getReconnectTimes(): number; setRequestTimeout(timeout: number): void; protected _setProfile(trackId: string, profile: Profile): void; joinRoomWithToken(roomToken: string, userData?: string): Promise; private joinRoomWithAccess; abstract publish(arg: Stream | Track[]): Promise; protected _publish: (tracks: Track[], isReconnect?: boolean | undefined) => Promise; abstract unpublish(trackIds?: string[]): void | Promise; protected _unpublish(trackIds: string[]): Promise; createMergeJob(id: string, option: MergeJob): Promise; setDefaultMergeStream(width: number, height: number, jobId?: string): void; protected _stopMerge(jobId?: string): void; protected _addMergeTracks(mergeOpts: TrackMergeOptions[], jobId?: string): Promise; protected _removeMergeTracks(trackIds: string[], jobId?: string): Promise; abstract subscribe(arg: string | string[]): Promise; protected _subscribe: (trackIds: string[], isReconnect?: boolean | undefined, strictMode?: boolean, trackProfiles?: TrackProfiles | undefined) => Promise; abstract unsubscribe(arg: string | string[]): void | Promise; /** * @param isReconnect 代表这次 unsub 是否是为了重新订阅,如果是 pcTrack 不需要释放 */ protected _unsubscribe(trackIds: string[], isReconnect?: boolean): Promise; protected _muteRemoteAudio(isMute: boolean): void; protected _muteTracks(tracks: { trackId: string; muted: boolean; }[]): void; kickoutUser(userId: string): Promise; /** * 向房间中指定目标发送自定义消息 * @param message string 自定义消息内容 * @param userIds Array 目标用户名列表,如果为空,则在全房间广播 * @param messageId string 消息ID */ sendCustomMessage(message: string, userIds?: string[], messageId?: string): void; /** * @description 使用图片 track 替换 video track,如果 source 为空,表示切换回来 * @param trackId 要替换的 trackId * @param source 图片来源 */ pushCameraTrackWithImage(trackId: string, source?: string | ArrayBuffer | File): Promise; /** * leaveRoom 将不会本地的发布流,如果想清除本地的发布流 * 或者手动调用 Track 对象的 release 方法 */ leaveRoom(): void; protected _releasePublishTracks(): void; private control; private handlePlayerOut; private handlePlayerIn; private handleAddTracks; private handleRemoveTracks; private handleMute; private handleCustomMessages; private handleQosMessages; /** * 根据各个实现的需要过滤信令中的 tracks */ protected abstract filterSignalTracks(d: any): void; private handleDisconnect; private handleRemoteUserReconnecting; private handleRemoteUserReconnected; /** 更新 AccessToken */ private updateAccessToken; private handleAuth; private createConnectionTransport; private cleanTrackIdsFromMergeJobs; private CreateMergerSessionController; private getAllMerger; protected abstract releaseSession(): void; private releaseRoom; }