UNPKG

@seastart/srtc-wx-sdk

Version:

srtc wechat miniprogram sdk

763 lines (759 loc) 18.9 kB
import EventEmitter from 'events'; declare abstract class BaseSRTC { /** * 获取sdk编译信息 */ abstract buildInfo(): BuildInfo; /** * 获取运行环境信息 * @returns */ abstract getEnvInfo(): any; /** * 频道事件通知回调 */ onNotifyChannelEvent?: ((event: ChannelEvent) => void) | null; /** * 频道外im事件通知回调 */ onNotifyImEvent?: ((event: ImEvent) => void) | null; constructor(initParams: SdkInitParams); /** * 加入频道的version信息 */ protected get joinVersion(): string; /** * 加入频道 * @param token 加入频道token */ join(token: string): Promise<BaseChannelInfo>; /** * 离开频道 */ leave(): Promise<void>; /** * 获取频道信息 * @returns */ getChannelInfo(): BaseChannelInfo | null; /** * 获取某用户信息 * @returns */ getUserInfo(uid: string): BaseUserInfo; /** * 获取频道内用户信息列表 * @returns */ getUsersInfo(map: true): Record<string, BaseUserInfo>; getUsersInfo(map: false): BaseUserInfo[]; /** * 订阅远端频道混音流 * @param filterUids 过滤音频的用户id */ subscribeRemoteAudioMixTrack(filterUids?: string[]): Promise<BaseTrack>; /** * 订阅远端用户音频流 * @param uid 用户id * @param id 流轨道id */ subscribeRemoteAudioTrack(uid: string, id: string): Promise<BaseTrack>; /** * 订阅远端视频合成流 */ subscribeRemoteVideoMcuTrack(): Promise<BaseTrack>; /** * 订阅远端用户视频流 * @param uid 用户id * @param id 流轨道id */ subscribeRemoteVideoTrack(uid: string, id: string): Promise<BaseTrack>; /** * 取消订阅远端流 */ unsubscribeRemoteTrack(track: BaseTrack): Promise<void>; /** * 获取远端用户音视频流实例,一般用于订阅流后您没有持有返回的流实例,可以用此方法获取对应实例 * @param uid 用户id * @param id 流轨道id,与desc二选一 * @param desc 流描述,与id二选一 */ getRemoteTrack(uid: string, id?: string, desc?: string): BaseTrack; /** * 启用频道外消息 * @param token 启用频道外消息token * @returns im会话sid */ enableIm(token: string): Promise<string>; /** * 关闭频道外消息 */ disableIm(): Promise<void>; } declare abstract class BaseTrack extends EventEmitter { constructor(info: BaseTrackInfo, uid: string); /** * 轨道id */ get id(): string; /** * 轨道类型 */ get kind(): TrackKind; /** * 轨道描述 */ get desc(): string; /** * 获取流轨道信息 * @returns */ getInfo(): BaseTrackInfo; /** * 轨道所属用户 * @returns */ getUid(): string; toString(): string; } declare class CommonChannelEventType { /** 频道自定义props更新,对应data为ChannelInfo */ static readonly CHANNEL_UPDATE = "channel_update"; /** 首次加入频道成功,对应data为ChannelInfo */ static readonly JOIN_SUCCEED = "join_succeed"; /** 自己信息被改变,对应data为UserInfo */ static readonly ME_UPDATE = "me_update"; /** 开始断线自动重连,无data */ static readonly RECONNECTING = "reconnecting"; /** 重连成功,断线重连成功后会触发 */ static readonly RECONNECTED = "reconnected"; /** 自己被强制离开频道,对应data为DisconnectEventData */ static readonly DISCONNECTED = "disconnected"; /** 其他用户加入频道,对应data为UserInfo */ static readonly USER_JOIN = "user_join"; /** 其他用户信息改变,对应data为UserInfo */ static readonly USER_UPDATE = "user_update"; /** 其他用户离开频道,对应data为UserLeaveEventData */ static readonly USER_LEAVE = "user_leave"; /** 其他用户发布流轨道,对应data为{ user: UserInfo, track: TrackInfo } */ static readonly USER_TRACK_ADD = "user_track_add"; /** 其他用户更新流轨道,对应data为{ user: UserInfo, track: TrackInfo } */ static readonly USER_TRACK_UPDATE = "user_track_update"; /** 其他用户删除流轨道,对应data为{ user: UserInfo, track: TrackInfo } */ static readonly USER_TRACK_REMOVE = "user_track_remove"; /** 频道内自定义消息,对应data为CustomMsgData */ static readonly CUSTOM_MSG = "custom_msg"; /** 流轨道没有数据,对应data为BaseTrack */ static readonly TRACK_MUTED = "track_muted"; /** 流轨道恢复数据,对应data为BaseTrack */ static readonly TRACK_UNMUTED = "track_unmuted"; /** 流轨道停止,对应data为BaseTrack */ static readonly TRACK_ENDED = "track_ended"; } /** 频道外事件类型 */ declare class CommonImEventType { /** 首次连接im成功,无data */ static readonly ENABLE_SUCCEED = "enable_succeed"; /** im开始断线自动重连,无data */ static readonly RECONNECTING = "reconnecting"; /** im重连成功,断线重连成功后会触发 */ static readonly RECONNECTED = "reconnected"; /** 自己被强制断开im,对应data为ImDisconnectEventData */ static readonly DISCONNECTED = "disconnected"; /** im消息,对应data为ImMsgData */ static readonly IM_MSG = "im_msg"; } declare class Logger { constructor(dp?: string, dclt?: string); setTarget(target: LogTarget): void; setLevel(level: LogLevel): void; debug(...args: any[]): void; info(...args: any[]): void; warn(...args: any[]): void; error(...args: any[]): void; } declare class RemoteVideoMcuTrack extends RemoteTrack { constructor(info: BaseTrackInfo); } declare class SdkError { /** 错误码 */ code: number; /** 错误详情 */ msg: string; /** 获取前缀错误码 */ protected prefixCode(): string; constructor(msg: string, code?: number); /** * 从err转化为sdkError * @param err 原始error * @returns */ static fromError(err: Error): SdkError; toString(): string; toJSON(): { code: number; msg: string; }; } declare enum Codec { /** 未知编码类型 */ Unknown = 0, /** h264编码 */ H264 = 27, /** h265编码 */ H265 = 36, /** AAC编码 */ AAC = 15, /** OPUS编码 */ OPUS = 1398100047 } declare function dateFormat(format: string, date?: Date): string; declare function dct(t: string): any; declare function genNonce(len?: number): string; declare function getHostnameFromUrl(url: string): string; declare function isObject(value: any): boolean; declare function isString(value: any): boolean; declare function isWxxcx(): boolean; declare function propAssign<T>(target: T, income: T, assigner?: Record<keyof T, (value: any, old: any) => void>): PropChangeItem<keyof T>[]; declare function retry<T>(f: () => Promise<T>, opt: { /** 首次执行失败后的最大重试次数,默认10次,<=0代表不限制次数 */ maxRetries?: number; /** 第一次重试间隔(ms),默认500ms,之后会以 initialDelay * 2^n 进行重试 */ initialDelay?: number; /** 每次重试前的回调,e为上次失败catch到的错误,返回false则代表放弃重试,会返回canceled */ onRetry?: (attempt: number, e?: any) => boolean | void; }): retryCallback<T>; declare function sleep(ms: number): Promise<void>; /** 频道事件通知 */ export declare class ChannelEvent { /** 事件类型 */ type: CommonChannelEventType; /** 事件携带的数据 */ data?: any; constructor(type: CommonChannelEventType, data?: any); } /** 扩展的频道事件 */ export declare class ChannelEventType extends CommonChannelEventType { /** 上行弱网,无data */ static readonly UP_WEAKNET = "up_weaknet"; /** 上行弱网恢复,无data */ static readonly UP_WEAKNET_RECOVER = "up_weaknet_recover"; /** 推流失败,对应data为失败描述string */ static readonly UP_PUSH_FAIL = "up_push_fail"; /** 下行弱网,对应data为{track: BaseTrack} */ static readonly DOWN_WEAKNET = "down_weaknet"; /** 下行弱网恢复,对应data为{track: BaseTrack} */ static readonly DOWN_WEAKNET_RECOVER = "down_weaknet_recover"; /** 拉流播放失败,对应data为{track: BaseTrack, detail: string} */ static readonly DOWN_PLAY_FAIL = "down_play_fail"; } /** 频道外事件通知 */ export declare class ImEvent { /** 事件类型 */ type: CommonImEventType; /** 事件携带的数据 */ data?: any; constructor(type: CommonImEventType, data?: any); } /** 小程序本地流轨道 */ export declare class LocalTrack extends BaseTrack { /** 推流地址 */ rtmp_push?: string; } /** * 远端混音流 */ export declare class RemoteAudioMixTrack extends RemoteTrack { constructor(info: BaseTrackInfo, filterUids?: string[]); getFilterUids(): string[]; } /** 小程序远端流轨道 */ export declare class RemoteTrack extends BaseTrack { /** 播放地址 */ rtmp_play?: string; /** live-player播放器的style */ player_style: string; constructor(info: BaseTrackInfo, uid: string); /** * 更新播放器transform style */ freshPlayerStyle(containerSelector: string): Promise<void>; } export declare class SRTC extends BaseSRTC { buildInfo(): BuildInfo; /** * 获取小程序运行环境信息 * @returns */ getEnvInfo(): EnvWxInfo; constructor(initParams: SdkInitParams); /** * livepusher配置 */ getPusherOptions(): PusherOptions; /** * 更新推流配置 * @param opt */ changePusherOptions(opt: Partial<PusherOptions>): Promise<PusherOptions>; /** * 订阅远端频道混音流 */ subscribeRemoteAudioMixTrack(filterUids?: string[]): Promise<RemoteAudioMixTrack>; /** * 订阅远端用户音频流 * @param uid 用户id * @param id 流轨道id */ subscribeRemoteAudioTrack(uid: string, id: string): Promise<RemoteTrack>; /** * 订阅远端视频合成流 */ subscribeRemoteVideoMcuTrack(): Promise<RemoteVideoMcuTrack>; /** * 订阅远端用户视频流 * @param uid 用户id * @param id 流轨道id */ subscribeRemoteVideoTrack(uid: string, id: string): Promise<RemoteTrack>; /** * 取消订阅远端流 */ unsubscribeRemoteTrack(track: RemoteTrack): Promise<void>; getRemoteTrack(uid: string, id?: string, desc?: string): RemoteTrack; /** * 上报live-pusher的volumenotify * 你需要在live-pusher组件bindaudiovolumenotify * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html */ updatePusherVolume(detail: any): void; /** * 上报live-pusher的error * 你需要在live-pusher组件binderror * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html */ updatePusherError(detail: any): void; /** * 上报live-pusher的netstatus * 你需要在live-pusher组件bindnetstatus * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html */ updatePusherNetStatus(detail: any): void; /** * 上报live-pusher的statechange事件 * 你需要在live-pusher组件bindstatechange * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html */ updatePusherStateChange(detail: any): void; /** * 上报live-player的volumenotify * 你需要在live-player音频组件bindaudiovolumenotify * @param uid 流轨道的所有者 * @param trackId 流轨道id * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html */ updatePlayerVolume(uid: string, trackId: string, detail: any): void; /** * 上报live-player的netstatus * 你需要在live-player组件bindnetstatus * @param uid 流轨道的所有者 * @param trackId 流轨道id * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html */ updatePlayerNetStatus(uid: string, trackId: string, detail: any): void; /** * 上报live-player的statechange事件 * 你需要在live-player组件bindstatechange * @param uid 流的所有者 * @param trackId 流轨道id * @param detail 小程序的event.detail * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html */ updatePlayerStateChange(uid: string, trackId: string, detail: any): void; } /** * 终端类型枚举 */ export declare enum DeviceType { /** * 未知设备 */ Unknown = 0, /** * Windows */ Windows = 1, /** * Android */ Android = 2, /** * iOS */ IOS = 3, /** * Linux */ Linux = 4, /** * MacOS */ MacOS = 5, /** * webrtc */ WebRTC = 6, /** * 小程序 */ XCX = 7 } /** * 用户离开频道的原因 */ export declare enum DisconnectReason { /** 错误 */ Error = -1, /** 主动离开 */ Self = 1, /** 被踢离开 */ Kicked = 2, /** 被顶号 */ Replace = 3, /** 心跳超时离开 */ Timeout = 4, /** 频道销毁离开 */ Destroy = 5 } /** * 用户断开im的原因 */ export declare enum ImDisconnectReason { /** 错误 */ Error = -1, /** 主动离开 */ Self = 1, /** 被踢离开 */ Kicked = 2, /** 心跳超时离开 */ Timeout = 4 } /** * 日志打印等级 */ export declare enum LogLevel { DEBUG = "debug", INFO = "info", WARN = "warn", ERROR = "error" } /** * 日志打印目标 */ export declare enum LogTarget { /** 控制台打印 */ CONSOLE = "console", /** 微信实时日志 */ WXREALTIME = "wxrealtime", /** 不打任何日志 */ NONE = "none" } /** * 流轨道类型 */ export declare enum TrackKind { Video = "video", Audio = "audio" } export declare namespace __INNER__ { const BaseSRTC_I: typeof BaseSRTC; const CommonChannelEventType_I: typeof CommonChannelEventType; const isWxxcx_I: typeof isWxxcx; const Logger_I: typeof Logger; const SdkError_I: typeof SdkError; const propAssign_I: typeof propAssign; const isObject_I: typeof isObject; const isString_I: typeof isString; const sleep_I: typeof sleep; const retry_I: typeof retry; const dateFormat_I: typeof dateFormat; const genNonce_I: typeof genNonce; const getHostnameFromUrl_I: typeof getHostnameFromUrl; const dct_I: typeof dct; function hmac_I(msg: string, key: string): string; } /** * sdk编译信息 */ export interface BuildInfo { /** 编译时间s */ timestamp: number; /** sdk版本号 */ version: string; } /** * 自定义消息 */ export interface CustomMsgData { /** 消息命令 */ action: string; /** 消息体 */ content: any; /** 发送者会话id */ sid: string; /** 发送者ID */ uid: string; /** 频道名(如果非频道内自定义消息,为空) */ channel: string; /** 是否私发 */ private: boolean; } /** * 强制离开事件data */ export interface DisconnectEventData { /** 离开原因 */ reason: DisconnectReason; /** 错误 */ error?: any; } /** * 微信小程序环境详情 */ export interface EnvWxInfo { base: WechatMiniprogram.AppBaseInfo; window: WechatMiniprogram.WindowInfo; device: WechatMiniprogram.DeviceInfo; } /** * im强制断开事件data */ export interface ImDisconnectEventData { /** 断开原因 */ reason: ImDisconnectReason; /** 错误 */ error?: any; } /** * im频道外消息 */ export interface ImMsgData { /** 消息命令 */ action: string; /** 消息体 */ content: any; /** 发送者im会话id */ sid: string; /** 发送者ID */ uid: string; /** 发送者昵称 */ name: string; } /** * 属性更改项 */ export interface PropChangeItem<T> { /** 属性名 */ prop: T; /** 更改后的值 */ value: any; /** 更改前的值 */ old: any; } /** * 小程序推流器配置 * @see https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html */ export interface PusherOptions { /** * 推流地址 */ url: string; /** * 是否开启摄像头 */ enableCamera: boolean; /** * 视频描述 */ videoDesc?: string; /** * 视频自定义属性 */ videoProps?: Record<string, any>; /** * 前置或后置摄像头 */ devicePosition: "front" | "back"; /** * 推流画面是否镜像 */ remoteMirror: boolean; /** * 本地预览画面是否镜像 */ localMirror: "auto" | "enable" | "disable"; /** * 视频推流宽度 */ width: number; /** * 视频推流高度 */ height: number; /** * 帧率 */ fps: number; /** * 美颜。取值范围 0-9,0表示关闭 */ beautyLevel: number; /** * 美白。取值范围 0-9,0表示关闭 */ whitenessLevel: number; /** * 是否开启麦克风 */ enableMic: boolean; /** * 音频描述 */ audioDesc?: string; /** * 音频自定义属性 */ audioProps?: Record<string, any>; /** * 是否开启音频自动增益 */ enableAgc: boolean; /** * 是否开启音频噪声抑制 */ enableAns: boolean; /** * 最小码率 kbps */ minBitrate: number; /** * 最大码率 kbps */ maxBitrate: number; } /** * sdk构造参数 */ export interface SdkInitParams { /** 日志等级 */ logLevel?: LogLevel; /** 日志目标 */ logTarget?: LogTarget; } /** * 用户离开事件data */ export interface UserLeaveEventData { /** 用户id */ uid: string; /** 离开原因 */ reason: DisconnectReason; } /** * 重试执行器函数:直接调用开始执行,.cancel()取消重试,函数失败会返回maxretry或canceled */ export type retryCallback<T> = (() => Promise<T>) & { cancel: () => void; }; /** * 频道信息 */ interface BaseChannelInfo { /** 应用id */ app_id: string; /** 频道名 */ channel: string; /** 频道扩展属性 */ props?: Record<string, any>; /** 频道创建时间 */ created_at: number; /** 频道更新时间 */ updated_at: number; } /** * 流轨道信息 */ interface BaseTrackInfo { /** 轨道id,在stream里唯一,在全局不一定唯一 */ id: string; /** 自定义描述,如摄像头大流、摄像头小流、共享桌面流等 */ desc: string; /** 轨道类型 */ kind: TrackKind; /** 编码类型 */ codec: Codec; /** 视频宽 */ width: number; /** 视频高 */ height: number; /** 视频帧率 */ fps: number; /** 视频角度 */ angle: number; /** 码率 */ bitrate: number; /** 音频采样率 */ sampleRate: number; /** 流扩展属性 */ props?: Record<string, any>; } /** * 用户信息 */ interface BaseUserInfo { /** 应用id */ app_id: string; /** 用户id */ uid: string; /** 会中昵称 */ name: string; /** 设备类型 */ device_type: DeviceType; /** 设备ID */ device_id: string; /** 客户端RTCsdk版本号 */ version: string; /** 用户扩展属性 */ props?: Record<string, any>; /** 网络 */ net: string; /** 服务分组 */ sg: string; /** 更新时间 */ updated_at: number; /** 频道名 */ channel: string; /** 会话id */ sid: string; /** 是否观众,类似研讨会观众,只收流 */ is_audience: boolean; /** 进入时间 */ join_at: number; /** 退出时间 */ leave_at: number; /** 流轨道 */ stream_tracks?: BaseTrackInfo[]; } export { BaseChannelInfo as ChannelInfo, BaseTrackInfo as TrackInfo, BaseUserInfo as UserInfo, CommonImEventType as ImEventType, };