@seastart/srtc-wx-sdk
Version:
srtc wechat miniprogram sdk
763 lines (759 loc) • 18.9 kB
TypeScript
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,
};