mirror of
https://github.com/FlipsideCrypto/DefinitelyTyped.git
synced 2026-02-06 10:56:53 +00:00
Add definition for trtc-js-sdk (#43979)
* Add definition for trtc-js-sdk * style(trtc-js-sdk): use prettier rewrite * [trtc-js-sdk]: support off all events * style(trtc-js-sdk): remove unneed comment * chore(trtc-js-sdk): enable esModuleInterop in tsconfig * fix(trtc-js-sdk): fix dts lint export just namespace
This commit is contained in:
parent
5eb4f5ca46
commit
cf013cff00
760
types/trtc-js-sdk/index.d.ts
vendored
Normal file
760
types/trtc-js-sdk/index.d.ts
vendored
Normal file
@ -0,0 +1,760 @@
|
||||
// Type definitions for trtc-js-sdk 4.3
|
||||
// Project: https://github.com/tencentyun/TRTCSDK#readme
|
||||
// Definitions by: yokots <https://github.com/yokots>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
export as namespace TRTC;
|
||||
|
||||
// utils types
|
||||
export type Nullable<T> = T | null;
|
||||
export type Callback<T = any> = (event: T) => void;
|
||||
export type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
|
||||
|
||||
/** 提供日志设置方法,包括设置日志输出等级、打开或关闭日志上传。 */
|
||||
export namespace Logger {
|
||||
const LogLevel: LogLevel;
|
||||
/** 日志输出等级 */
|
||||
interface LogLevel {
|
||||
/** 输出所有日志 */
|
||||
TRACE: 0;
|
||||
/** 输出 DEBUG、INFO、WARN、ERROR 等级日志 */
|
||||
DEBUG: 1;
|
||||
/** 输出 INFO、WARN、ERROR 等级日志 */
|
||||
INFO: 2;
|
||||
/** 输出 WARN、ERROR 等级日志 */
|
||||
WARN: 3;
|
||||
/** 输出 ERROR 等级日志 */
|
||||
ERROR: 4;
|
||||
/**
|
||||
* 不输出任何日志
|
||||
* **注意: 关闭日之后我们将无法帮助您定位线上问题,建议至少保留 WARN 日志等级!**
|
||||
*/
|
||||
NONE: 5;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置日志输出等级
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 输出INFO以上日志等级
|
||||
* TRTC.Logger.setLogLevel(TRTC.Logger.LogLevel.INFO);
|
||||
* ```
|
||||
*/
|
||||
function setLogLevel(level: 0 | 1 | 2 | 3 | 4 | 5 | 6): void;
|
||||
|
||||
/** 打开日志上传 */
|
||||
function enableUploadLog(): void;
|
||||
|
||||
/** 关闭日志上传 */
|
||||
function disableUploadLog(): void;
|
||||
}
|
||||
|
||||
/** TRTC Web SDK 版本号 */
|
||||
export const VERSION: string;
|
||||
|
||||
/** 检测浏览器是否兼容 TRTC Web SDK */
|
||||
export function checkSystemRequirements(): Promise<boolean>;
|
||||
|
||||
/** 检测浏览器是否支持屏幕分享 */
|
||||
export function isScreenShareSupported(): boolean;
|
||||
|
||||
/**
|
||||
* 返回媒体输入输出设备列表
|
||||
*
|
||||
* 出于安全的考虑,在用户未授权摄像头或麦克风访问权限前,label 及 deviceId 字段可能都是空的。因此建议在用户授权访问后 再调用该接口获取设备详情,比如在 initialize() 后再调用此接口获取设备详情。
|
||||
*/
|
||||
export function getDevices(): Promise<MediaDeviceInfo[]>;
|
||||
|
||||
/** 返回摄像头设备列表 */
|
||||
export function getCameras(): Promise<MediaDeviceInfo[]>;
|
||||
|
||||
/** 返回麦克风设备列表 */
|
||||
export function getMicrophones(): Promise<MediaDeviceInfo[]>;
|
||||
|
||||
/** 返回扬声器设备列表 */
|
||||
export function getSpeakers(): Promise<MediaDeviceInfo[]>;
|
||||
|
||||
/**
|
||||
* 创建一个实时音视频通话的客户端对象,在每次会话中仅需要调用一次。
|
||||
*
|
||||
* 通常一个客户端对象跟一个用户 ID(userId) 绑定,同一个页面中可以有多个不同的客户端对象, 每个客户端对象跟不同的用户ID绑定,比如,你可以使用一个客户端对象负责推送本地音视频流和接收 远端流,同时使用另外一个客户端对象负责推送屏幕分享流,但是不接收远端流。
|
||||
*/
|
||||
export function createClient(config: ClientConfig): Client;
|
||||
|
||||
/**
|
||||
* 创建一个本地流 Stream 对象,本地流 Stream 对象通过 `publish()` 方法发布本地音视频流。
|
||||
*
|
||||
* **注意:** *一个音视频流 Stream 中最多只能包含一个音频 track 和一个视频*track。
|
||||
*
|
||||
* 本地音视频流可以:
|
||||
* - 从摄像头和麦克风采集获得,适用于一般的音视频通话。
|
||||
* - 从屏幕分享源采集获得,适用于进行屏幕分享。
|
||||
* - 从开发者通过 audioSource/videoSource 指定的 MediaStreamTrack 获得, 使用这种方式业务层可先对音视频进行前处理,比如,对音频进行混音,或者对视频进行美颜处理,亦或者通过这种方式向远端用户推送一个正在播放的音视频文件。
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 从麦克风和摄像头采集本地音视频流
|
||||
* const localStream = TRTC.createStream({ audio: true, video: true });
|
||||
* localStream.initialize().catch(error => {
|
||||
* console.error('failed initialize localStream ' + error);
|
||||
* }).then(() => {
|
||||
* console.log('initialize localStream success');
|
||||
* // 本地流初始化成功,可通过Client.publish(localStream)发布本地音视频流
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 从屏幕分享源采集,仅采集屏幕分享视频流
|
||||
* const localStream = TRTC.createStream({ audio: false, screen: true });
|
||||
*
|
||||
* // 采集麦克风及屏幕分享视频流
|
||||
* // const localStream = TRTC.createStream({ audio: true, screen: true });
|
||||
*
|
||||
* localStream.initialize().catch(error => {
|
||||
* console.error('failed initialize localStream ' + error);
|
||||
* }).then(() => {
|
||||
* console.log('initialize localStream success');
|
||||
* // 本地流初始化成功,可通过Client.publish(localStream)发布本地音视频流
|
||||
* });
|
||||
* ```
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 从外部App指定的音视频源创建本地音视频流
|
||||
* navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(stream => {
|
||||
* const audioTrack = stream.getAudioTracks()[0];
|
||||
* const videoTrack = stream.getVideoTracks()[0];
|
||||
*
|
||||
* // 对audioTrack和videoTrack处理之后,
|
||||
*
|
||||
* const localStream = TRTC.createStream({ audioSource: audioTrack, videoSource: videoTrack });
|
||||
* localStream.initialize().catch(error => {
|
||||
* console.error('failed initialize localStream ' + error);
|
||||
* }).then(() => {
|
||||
* console.log('initialize localStream success');
|
||||
* // 本地流初始化成功,可通过Client.publish(localStream)发布本地音视频流
|
||||
* });
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
export function createStream(config: StreamConfig): LocalStream;
|
||||
|
||||
export interface RtcError extends Error {
|
||||
/** 获取错误码, 详细错误码列表参见 [ErrorCode](https://trtc-1252463788.file.myqcloud.com/web/docs/module-ErrorCode.html) */
|
||||
getCode(): string;
|
||||
}
|
||||
|
||||
/** 音视频通话客户端对象 */
|
||||
export interface Client {
|
||||
/**
|
||||
* 设置代理服务器。该方法适用于企业自己部署代理服务器,如 ngnix+coturn 方案。
|
||||
*
|
||||
* **注意** 该方法需要在 join() 之前调用。
|
||||
*/
|
||||
setProxyServer(url: string): void;
|
||||
|
||||
/**
|
||||
* 设置 TURN 服务器,该方法配合 setProxyServer() 使用,适用于企业自己部署代理服务器和 TURN 中转。
|
||||
*
|
||||
* **注意** 该方法需要在 join() 之前调用。
|
||||
*/
|
||||
setTurnServer(config: TurnServerConfig): void;
|
||||
|
||||
/**
|
||||
* 加入一个音视频通话房间。
|
||||
*
|
||||
* 进房代表开始一个音视频通话会话,这时候 SDK 会监听远端用户进房退房情况,若有远端用户进房并且发布流,本地会收到 'stream-added' 事件。
|
||||
*
|
||||
* 进房后用户可以通过 publish() 发布本地流,本地流发布成功后远端用户就会收到相应 'stream-added' 事件通知从而完成一个双向的音视频通话连接。
|
||||
*/
|
||||
join(options: JoinOptions): Promise<void>;
|
||||
|
||||
/** 退出当前音视频通话房间,结束一次音视频通话会话。 */
|
||||
leave(): Promise<void>;
|
||||
|
||||
/**
|
||||
* 发布本地音视频流。
|
||||
* - 该方法需要在 join() 进房后调用,一次音视频会话中只能发布一个本地流。若想发布另外一个本地流,可先通过 unpublish() 取消发布当前本地流后再发布新的本地流。
|
||||
* - 在发布本地流后,可通过 removeTrack()、addTrack()、 replaceTrack() 来更新本地流中的某个音频或视频流。
|
||||
* - 发布本地流后远端会收到 ‘stream-added’ 事件通知。
|
||||
*/
|
||||
publish(stream: LocalStream): Promise<void>;
|
||||
|
||||
/** 取消发布本地流。 取消发布本地流后远端会收到 'stream-removed' 事件通知。 */
|
||||
unpublish(stream: LocalStream): Promise<void>;
|
||||
|
||||
/**
|
||||
* 订阅远端流
|
||||
* @param stream 远端流,通过监听 'stream-added' 事件获得。
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 监听远端流订阅成功事件
|
||||
* client.on('stream-subscribed', event => {
|
||||
* const remoteStream = event.stream;
|
||||
* // 远端流订阅成功,播放远端音视频流
|
||||
* remoteStream.play('remote_stream');
|
||||
* });
|
||||
* // 监听远端流增加事件
|
||||
* client.on('stream-added', event => {
|
||||
* const remoteStream = event.stream;
|
||||
* // 订阅远端音频和视频流
|
||||
* client.subscribe(remoteStream, { audio: true, video: true });
|
||||
*
|
||||
* // 仅订阅音频数据
|
||||
* // client.subscribe(remoteStream, { audio: true, video: false });
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
subscribe(stream: RemoteStream, options?: { audio?: boolean; video?: boolean }): void;
|
||||
|
||||
/**
|
||||
* 取消订阅远端流
|
||||
* @param stream 远端流,通过监听 'stream-added' 事件获得。
|
||||
*/
|
||||
unsubscribe(stream: RemoteStream): void;
|
||||
|
||||
/** 切换用户角色 */
|
||||
switchRole(role: Role): Promise<void>;
|
||||
|
||||
/** 监听客户端对象事件 */
|
||||
on<K extends keyof ClientEventMap>(event: K, handler: Callback<ClientEventMap[K]>): void;
|
||||
|
||||
/** 取消事件绑定 */
|
||||
off<K extends keyof ClientEventMap>(event: K, handler: Callback<ClientEventMap[K]>): void;
|
||||
|
||||
/** 取消所有事件绑定 */
|
||||
off(event: '*'): void;
|
||||
|
||||
/** 获取当前房间内远端用户音视频 mute 状态列表。 */
|
||||
getRemoteMutedState(): RemoteMutedState[];
|
||||
|
||||
/**
|
||||
* 设置是否默认接收远端流。该方法可在 join() 调用前使用,若在进房后调用,会接收不到后续进房的远端用户音视频流。
|
||||
* @param muted 是否默认不接收远端流: true true 默认不接收任何远端流。false 默认接收所有远端流。(默认)
|
||||
*/
|
||||
setDefaultMuteRemoteStreams(muted: boolean): void;
|
||||
|
||||
/** 获取当前网络传输状况统计数据, 该方法需要在 `publish()` 后调用 */
|
||||
getTransportStats(): Promise<TransportStats>;
|
||||
|
||||
/** 获取当前已发布本地流的音频统计数据 */
|
||||
getLocalAudioStats(): Promise<LocalAudioStatsMap>;
|
||||
|
||||
/** 获取当前已发布本地流的视频统计数据 */
|
||||
getLocalVideoStats(): Promise<LocalVideoStatsMap>;
|
||||
|
||||
/** 获取当前所有远端流的音频统计数据 */
|
||||
getRemoteAudioStats(): Promise<RemoteAudioStatsMap>;
|
||||
|
||||
/** 获取当前所有远端流的视频统计数据 */
|
||||
getRemoteVideoStats(): Promise<RemoteVideoStatsMap>;
|
||||
}
|
||||
|
||||
/** 客户端配置项 */
|
||||
export interface ClientConfig {
|
||||
/** 应用的 sdkAppId */
|
||||
sdkAppId: number;
|
||||
/** 用户ID */
|
||||
userId: string;
|
||||
/** 用户签名 */
|
||||
userSig: string;
|
||||
/**
|
||||
* 应用场景,目前支持以下两种场景:
|
||||
* - `videoCall` 实时通话模式
|
||||
* - `live` 互动直播模式
|
||||
*/
|
||||
mode: 'videoCall' | 'live';
|
||||
/** 绑定腾讯云直播 CDN 流 ID,设置之后,您就可以在腾讯云直播 CDN 上通过标准直播方案(FLV|HLS)播放该用户的音视频流。 */
|
||||
streamId?: string;
|
||||
/** 设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。 */
|
||||
userDefineRecordId?: string;
|
||||
/** 自动录制时业务自定义ID(32位整型),将在录制完成后通过直播录制回调接口通知业务方 */
|
||||
recordId?: number;
|
||||
/**
|
||||
* 纯音频推流模式,需要旁路直播和录制时需要带上此参数:
|
||||
* - 1 表示本次是纯音频推流,不需要录制 MP3 文件
|
||||
* - 2 表示本次是纯音频推流,录制文件为 MP3
|
||||
*/
|
||||
pureAudioPushMode?: 1 | 2;
|
||||
}
|
||||
|
||||
/** 客户端事件 */
|
||||
export interface ClientEventMap {
|
||||
/** 远端流添加事件,当远端用户发布流后会收到该通知。 */
|
||||
'stream-added': RemoteStreamInfo;
|
||||
/** 远端流移除事件,当远端用户取消发布流后会收到该通知。 */
|
||||
'stream-removed': RemoteStreamInfo;
|
||||
/** 远端流更新事件,当远端用户添加、移除或更换音视频轨道后会收到该通知。 */
|
||||
'stream-updated': RemoteStreamInfo;
|
||||
/** 远端流订阅成功事件,调用 subscribe() 成功后会触发该事件。 */
|
||||
'stream-subscribed': RemoteStreamInfo;
|
||||
/** 信令通道连接状态变化事件 */
|
||||
'connection-state-changed': {
|
||||
prevState: ConnectionState;
|
||||
curState: ConnectionState;
|
||||
};
|
||||
/** 远端用户进房通知,只有主动推流的远端用户进房才会收到该通知。 */
|
||||
'peer-join': RemoteUserInfo;
|
||||
/** 远端用户退房通知,只有主动推流的远端用户退房才会收到该通知。 */
|
||||
'peer-leave': RemoteUserInfo;
|
||||
/** 远端用户禁用音频通知。 */
|
||||
'mute-audio': RemoteUserInfo;
|
||||
/** 远端用户禁用视频通知。 */
|
||||
'mute-video': RemoteUserInfo;
|
||||
/** 远端用户启用音频通知。 */
|
||||
'unmute-audio': RemoteUserInfo;
|
||||
/** 远端用户启用视频通知。 */
|
||||
'unmute-video': RemoteUserInfo;
|
||||
/** 用户被踢出房间通知,被踢原因有 */
|
||||
'client-banned': RtcError;
|
||||
/** 客户端错误事件 */
|
||||
error: RtcError;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stream 音视频流,一个 Stream 中最多只能同时包含一个音频 track 和一个视频 track。
|
||||
*
|
||||
* Stream 类是本地流 LocalStream 和远端流 RemoteStream 的基类,它包含本地流和远端流通用的方法。
|
||||
*/
|
||||
export interface Stream {
|
||||
/**
|
||||
* 播放该音视频流
|
||||
* @param elementId HTML <div> 标签ID,该方法内部自动创建的音视频标签将被添加到该容器中。
|
||||
* @param options 播放选项
|
||||
*/
|
||||
play(elementId: HTMLDivElement['id'] | HTMLDivElement, options?: PlayOptions): Promise<void>;
|
||||
|
||||
/** 停止播放音视频流,该方法还会将由 `play()` 创建的音视频标签从 HTML 页面中删除。 */
|
||||
stop(): void;
|
||||
|
||||
/**
|
||||
* 恢复播放音视频
|
||||
* **注意** 在某些版本浏览器上移动传入 `play()` 的 div 容器可能会导致音视频播放器进入 `PAUSED` 状态,此时 需要调用该接口继续进行播放。
|
||||
* @example
|
||||
* ```javascript
|
||||
* stream.on('player-state-changed', event => {
|
||||
* if (event.state === 'PAUSED') {
|
||||
* // resume audio/video playback
|
||||
* stream.resume();
|
||||
* }
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
resume(): void;
|
||||
|
||||
/** 关闭音视频流,对于本地流,该方法会关闭摄像头并释放摄像头和麦克风访问权限。 */
|
||||
close(): void;
|
||||
|
||||
/**
|
||||
* 禁用音频轨道
|
||||
* - 对于本地流,调用该方法会停止发送音频,远端会触发 `Client.on('mute-audio')` 事件。
|
||||
* - 对于远端流,调用该方法会停止播放音频,但是仍然接收音频数据。
|
||||
* @returns `true` 禁用音频轨道成功; `false` 禁用音频轨道失败,因为没有音频轨道。
|
||||
*/
|
||||
muteAudio(): boolean;
|
||||
|
||||
/**
|
||||
* 禁用视频轨道
|
||||
* - 对于本地流,调用该方法会停止发送视频,远端会触发 `Client.on('mute-video')` 事件。如果视频是从摄像头采集,此时摄像头灯仍然是亮着的。若想完全禁用视频轨道(即关闭摄像头),可以使用 `removeTrack()` 删除视频轨道然后调用 `MediaStreamTrack.stop()` 关闭视频轨道(关闭摄像头)。
|
||||
* - 对于远端流,调用该方法会停止播放视频,但是仍然接收视频数据
|
||||
* @returns `true` 禁用视频轨道成功; `false` 禁用视频轨道失败,因为没有视频轨道。
|
||||
*/
|
||||
muteVideo(): boolean;
|
||||
|
||||
/**
|
||||
* 启用音频轨道
|
||||
* - 对于本地流,调用该方法会触发远端 `Client.on('unmute-audio')` 事件。
|
||||
* - 音频轨道默认是开启的,若你调用 `muteAudio()` 后可用该方法重新启用音频。
|
||||
* @returns `true` 启用音频轨道成功; `false` 启用音频轨道失败,因为没有音频轨道。
|
||||
*/
|
||||
unmuteAudio(): boolean;
|
||||
|
||||
/**
|
||||
* 启用视频轨道
|
||||
* - 对于本地流,调用该方法会触发远端 `Client.on('unmute-video')` 事件。
|
||||
* - 视频轨道默认是开启的,若你调用 `muteVideo()` 后可用该方法重新启用视频。
|
||||
* @returns `true` 启用视频轨道成功; `false` 启用视频轨道失败,因为没有视频轨道。
|
||||
*/
|
||||
unmuteVideo(): boolean;
|
||||
|
||||
/** 获取 Stream 唯一标识ID */
|
||||
getId(): string;
|
||||
|
||||
/** 获取该流所属的用户ID */
|
||||
getUserId(): string;
|
||||
|
||||
/**
|
||||
* 设置声音输出设备
|
||||
* @param deviceId 设备标识,通过 `getSpeakers()` 获取
|
||||
*/
|
||||
setAudioOutput(deviceId: string): Promise<void>;
|
||||
|
||||
/**
|
||||
* 设置音量大小,主要用于调节远端流的音量大小。
|
||||
* @param volume 音量大小,取值在 `0.0 (静音) 到 1.0 (最大音量)` 之间。
|
||||
*/
|
||||
setAudioVolume(volume: number): void;
|
||||
|
||||
/**
|
||||
* 获取当前音量大小,只有当本地流或远端流中有音频数据才有效。
|
||||
* @returns 音量大小,返回值在`(0.0, 1.0)`之间,通常认为值大于`0.1`为用户正在说话。
|
||||
*/
|
||||
getAudioLevel(): number;
|
||||
|
||||
/** 是否包含音频轨道 */
|
||||
hasAudio(): boolean;
|
||||
|
||||
/** 是否包含视频轨道 */
|
||||
hasVideo(): boolean;
|
||||
|
||||
/** 获取音频轨道 */
|
||||
getAudioTrack(): Nullable<MediaStreamTrack>;
|
||||
|
||||
/** 获取视频轨道 */
|
||||
getVideoTrack(): Nullable<MediaStreamTrack>;
|
||||
|
||||
/**
|
||||
* 获取当前视频帧
|
||||
* **注意** 该方法需要在 play() 后调用,并且 Stream 中有视频流才有效
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 截取当前视频帧
|
||||
* const frame = stream.getVideoFrame();
|
||||
* if (frame) {
|
||||
* const img = document.createElement('img');
|
||||
* img.src = frame;
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
getVideoFrame(): Nullable<string>;
|
||||
|
||||
/** 监听Stream事件 */
|
||||
on<K extends keyof StreamEventMap>(event: K, handler: Callback<StreamEventMap[K]>): void;
|
||||
}
|
||||
|
||||
export interface LocalStream extends Stream {
|
||||
/** 初始化本地音视频流对象, 初始化失败的错误信息请参考 [getUserMedia异常](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia#%E8%AF%AD%E6%B3%95)。 */
|
||||
initialize(): Promise<void>;
|
||||
|
||||
/**
|
||||
* 设置音频 Profile,该方法需要在调用 `initialize()` 之前调用。
|
||||
* @param profile 音频 Profile, 默认 `standard`
|
||||
* - `standard` 采样率:48000,声道:单声道,码率:40kbps
|
||||
* - `high` 采样率:48000,声道:单声道,码率:128kbps
|
||||
*/
|
||||
setAudioProfile(profile: 'standard' | 'high'): void;
|
||||
|
||||
/**
|
||||
* 设置视频 Profile,该方法需要在调用 `initialize()` 之前调用。
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 使用预定义Profile设置
|
||||
* localStream.setVideoProfile('480p');
|
||||
* localStream.initialize().then(() => {
|
||||
* // local stream was initialized successfully.
|
||||
* });
|
||||
*
|
||||
* // 使用自定义视频Profile设置
|
||||
* localStream.setVideoProfile({
|
||||
* width: 360, // 视频宽度
|
||||
* height: 360, // 视频高度
|
||||
* frameRate: 10, // 帧率
|
||||
* bitrate: 400 // 比特率 kbps
|
||||
* });
|
||||
* localStream.initialize().then(() => {
|
||||
* // local stream was initialized successfully.
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
setVideoProfile(profile: VideoProfileString | Profile): void;
|
||||
|
||||
/** 设置屏幕分享 Profile,该方法需要在调用 `initialize()` 之前调用。 */
|
||||
setScreenProfile(profile: ScreenProfileString | Profile): void;
|
||||
|
||||
/**
|
||||
* 设置视频内容提示,主要用于提升在不同场景下的视频编码质量。该方法需要在调用 `initialize()` 成功之后调用。
|
||||
* @param hint 内容提示,参考 [MediaStreamTrack.contentHint](https://www.w3.org/TR/mst-content-hint/)
|
||||
* - `motion`:本地流视频内容为从摄像头采集的内容、电影或者视频游戏等。
|
||||
* - `detail`:本地视频内容为 ppt、带有文本内容、绘画或艺术线条的网页。一般屏幕分享默认使用这个提示。
|
||||
* - `text`:本地视频内容主要是含有文本的 ppt 或网页等。
|
||||
*/
|
||||
setVideoContentHint(hint: 'motion' | 'detail' | 'text'): void;
|
||||
|
||||
/**
|
||||
* 切换本地流的媒体输入设备,该方法仅适用于从摄像头和麦克风采集音视频的本地流。
|
||||
*
|
||||
* 若该本地流已经被发布,该方法会自动更新发往远端的音视频流,此时,远端会收到 `Client.on('stream-updated')` 事件通知。
|
||||
* @param type 媒体类型
|
||||
* - `audio` 音频
|
||||
* - `video` 视频
|
||||
* @param deviceId 设备标识
|
||||
* - 摄像头设备标识通过 getCameras() 获取。在移动设备上,可以通过设置 deviceId 为 'user' 和 'environment' 来切换前置和后置摄像头。
|
||||
* - 麦克风设备标识通过 getMicrophones() 获取。
|
||||
*/
|
||||
switchDevice(type: 'audio' | 'video', deviceId: string): Promise<void>;
|
||||
|
||||
/**
|
||||
* 添加音频或视频轨道
|
||||
*
|
||||
* 调用该方法将音频或视频轨道添加到本地流,若该本地流已经被发布,则会自动更新发往远端的音视频流,此时远端会收到 `Client.on('stream-updated')` 事件通知。
|
||||
*
|
||||
* 新的音视频轨道可以通过 `createStream()` | `getAudioTrack()` | `getVideoTrack()` 获取,
|
||||
* 或者直接通过 [getUserMedia()](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia)、
|
||||
* [captureStream()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/captureStream) 获取。
|
||||
*
|
||||
* **注意**
|
||||
* - 一个 Stream 对象中最多只能同时包含一路音频轨道和一路视频轨道。如果你想要更换同类型的轨道,请使用 `replaceTrack()`。
|
||||
* - 在增加视频轨道时,要求视频分辨率跟 `setVideoProfile()` 设置保持一致,否则会抛出异常。
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* const localStream = TRTC.createStream({ userId, audio: true, video: false });
|
||||
* localStream.initialize().then(() => {
|
||||
* // 分布本地流(只有从麦克风采集的音频流)
|
||||
* client.publish(localStream);
|
||||
* });
|
||||
*
|
||||
* // ...
|
||||
*
|
||||
* // 开启视频通话
|
||||
* const videoStream = TRTC.createStream({ userId, audio: false, video: true });
|
||||
* videoStream.initialize().then(() => {
|
||||
* const videoTrack = videoStream.getVideoTrack();
|
||||
* // 将从摄像头采集的视频轨道插入当前已发布的本地流对象LocalStream
|
||||
* localStream.addTrack(videoTrack).then(() => {
|
||||
* // 视频通话开启成功,远端流将会收到‘stream-updated’通知
|
||||
* });
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
addTrack(track: MediaStreamTrack): Promise<void>;
|
||||
|
||||
/**
|
||||
* 移除视频轨道
|
||||
*
|
||||
* 调用该方法会移除本地流中的视频轨道,若本地流已经被发布,则会自动更新发往远端的视频流,此时远端会收到 `Client.on('stream-updated')` 事件通知。
|
||||
*
|
||||
* **注意**
|
||||
* - 一个已经发布的Stream对象中至少要有一个媒体轨道,如果你想完全删除本地流中的音视频轨道,请直接通过 `unpublish()` 取消发布, 然后再通过 `close()` 关闭本地流。
|
||||
* - 目前尚不支持移除音频轨道,若想禁用音频,可通过调用 `muteAudio()` 实现。
|
||||
*
|
||||
* @example
|
||||
* ```javascript
|
||||
* // 关闭视频通话示例,对应addTrack接口的开启视频通话示例
|
||||
* const videoTrack = localStream.getVideoTrack();
|
||||
* if (videoTrack) {
|
||||
* localStream.removeTrack(videoTrack).then(() => {
|
||||
* // 关闭视频通话成功,停止videoTrack并释放摄像头资源
|
||||
* videoTrack.stop();
|
||||
* });
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
removeTrack(track: MediaStreamTrack): Promise<void>;
|
||||
|
||||
/**
|
||||
* 更换音频或视频轨道
|
||||
*
|
||||
* 调用该方法更换本地流中的同类型轨道,若本地流已经被发布,该方法会自动更新发往远端的音视频流,此时远端会收到 `Client.on('stream-updated')` 事件通知。
|
||||
*
|
||||
* 新的音视频轨道可以通过 `createStream()` | `getAudioTrack()` | `getVideoTrack()` 获取,
|
||||
* 或者直接通过 [getUserMedia()](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMedia)、
|
||||
* [captureStream()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/captureStream) 获取。
|
||||
*
|
||||
* **注意**
|
||||
* - 如果需要更换媒体输入设备,推荐使用 `switchDevice()`。
|
||||
* - 在更换视频轨道时,要求视频分辨率跟 `setVideoProfile()` 设置保持一致,否则会抛出异常。
|
||||
* - 支持 Chrome 65+、Safari 浏览器。
|
||||
*/
|
||||
replaceTrack(track: MediaStreamTrack): Promise<void>;
|
||||
}
|
||||
|
||||
export interface RemoteStream extends Stream {
|
||||
/**
|
||||
* 获取远端流类型,主要用于判断一个远端流是主音视频流还是辅路视频流,辅路视频流通常是一个屏幕分享流。
|
||||
* @returns 远端流类型
|
||||
* - `main` 主音视频流
|
||||
* - `auxiliary` 辅助视频流,通常是一个屏幕分享流
|
||||
*/
|
||||
getType(): 'main' | 'auxiliary';
|
||||
}
|
||||
|
||||
export interface StreamConfig {
|
||||
/** 是否从麦克风采集音频 */
|
||||
audio: boolean;
|
||||
/** 是否从摄像头采集视频 */
|
||||
video: boolean;
|
||||
/** 音频源 */
|
||||
audioSource?: MediaStreamTrack;
|
||||
/** 视频源 */
|
||||
videoSource?: MediaStreamTrack;
|
||||
/** 麦克风设备 deviceId,通过 getMicrophones() 获取 */
|
||||
microphoneId?: string;
|
||||
/** 摄像头设备 deviceId,通过 getCameras() 获取 */
|
||||
cameraId?: string;
|
||||
/**
|
||||
* 在移动设备上,可通过该参数选择使用前置或后置摄像头:
|
||||
* - `user`:前置摄像头
|
||||
* - `environment`:后置摄像头
|
||||
*
|
||||
* **注意** 请勿同时使用 cameraId 和 facingMode 参数。
|
||||
*/
|
||||
facingMode?: 'user' | 'environment';
|
||||
/** 是否采集屏幕分享流 */
|
||||
screen?: boolean;
|
||||
/** 视频显示是否为镜像,默认为 true。建议在使用前置摄像头时开启,使用后置摄像头时关闭。镜像设置不适用于屏幕分享。 */
|
||||
mirror?: boolean;
|
||||
}
|
||||
|
||||
export interface StreamEventMap {
|
||||
/** Audio/Video Player 状态变化事件 App 可根据状态变化来更新 UI,比如,通过监听 video player 状态变化来关闭或打开遮板。 */
|
||||
'player-state-changed': {
|
||||
type: string;
|
||||
state: 'PLAYING' | 'PAUSED' | 'STOPPED';
|
||||
};
|
||||
/** 本地屏幕分享停止事件通知,仅对本地屏幕分享流有效。 */
|
||||
'screen-sharing-stopped': undefined;
|
||||
}
|
||||
|
||||
export interface TurnServerConfig extends Omit<RTCIceServer, 'urls'> {
|
||||
/** TURN 服务器 url */
|
||||
url: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户角色,仅在 `live` 模式下有意义,目前支持两种角色:
|
||||
* - `anchor` 主播
|
||||
* - `audience` 观众
|
||||
*
|
||||
* **注意** 互动直播 live 模式下的观众角色没有发布本地流的权限,只有收看远端流的权限。如果观众想要连麦跟主播互动, 请先通过 switchRole() 切换角色到主播 anchor 后再发布本地流。
|
||||
*/
|
||||
export type Role = 'anchor' | 'audience';
|
||||
|
||||
export interface JoinOptions {
|
||||
/** 房间号 */
|
||||
roomId: number;
|
||||
/** 用户角色 */
|
||||
role?: Role;
|
||||
/**
|
||||
* @deprecated 进房钥匙,若需要权限控制请携带该参数,因某些局限性目前已不建议使用该参数。
|
||||
*/
|
||||
privateMapKey?: string;
|
||||
}
|
||||
|
||||
export interface RemoteMutedState {
|
||||
/** 远端用户ID */
|
||||
userId: string;
|
||||
/** 是否有视频 */
|
||||
hasAudio: boolean;
|
||||
/** 是否有音频 */
|
||||
hasVideo: boolean;
|
||||
/** 是否静音 */
|
||||
audioMuted: boolean;
|
||||
/** 是否关闭摄像头 */
|
||||
videoMuted: boolean;
|
||||
}
|
||||
|
||||
export interface TransportStats {
|
||||
/** SDK 到腾讯视频云的 RTT (Round-Trip Time),单位 ms */
|
||||
rtt: number;
|
||||
}
|
||||
|
||||
export interface VideoStats {
|
||||
/** 视频宽度 */
|
||||
framesWidth: number;
|
||||
/** 视频高度 */
|
||||
framesHeight: number;
|
||||
}
|
||||
|
||||
export interface SentMediaStats {
|
||||
/** 已发送字节数 */
|
||||
bytesSent: number;
|
||||
/** 已发送包数 */
|
||||
packetsSent: number;
|
||||
}
|
||||
|
||||
/** 本地流音频统计数据 */
|
||||
export type LocalAudioStats = SentMediaStats;
|
||||
|
||||
/** 本地流视频统计数据 */
|
||||
export interface LocalVideoStats extends SentMediaStats, VideoStats {
|
||||
/** 已编码帧数 */
|
||||
framesEncoded: number;
|
||||
/** 已发送帧数 */
|
||||
framesSent: number;
|
||||
}
|
||||
|
||||
export interface ReceivedMediaStats {
|
||||
/** 已接收字节数 */
|
||||
bytesReceived: number;
|
||||
/** 已接收包数 */
|
||||
packetsReceived: number;
|
||||
/** 丢包数 */
|
||||
packetsLost: number;
|
||||
}
|
||||
|
||||
/** 远端流音频统计数据 */
|
||||
export type RemoteAudioStats = ReceivedMediaStats;
|
||||
|
||||
/** 远端流视频统计数据 */
|
||||
export interface RemoteVideoStats extends ReceivedMediaStats, VideoStats {
|
||||
/** 已解码帧数 */
|
||||
framesDecoded: number;
|
||||
}
|
||||
|
||||
export interface LocalAudioStatsMap {
|
||||
[userId: string]: LocalAudioStats;
|
||||
}
|
||||
|
||||
export interface LocalVideoStatsMap {
|
||||
[userId: string]: LocalVideoStats;
|
||||
}
|
||||
|
||||
export interface RemoteAudioStatsMap {
|
||||
[userId: string]: RemoteAudioStats;
|
||||
}
|
||||
|
||||
export interface RemoteVideoStatsMap {
|
||||
[userId: string]: RemoteVideoStats;
|
||||
}
|
||||
|
||||
export interface RemoteStreamInfo {
|
||||
stream: RemoteStream;
|
||||
}
|
||||
|
||||
export interface RemoteUserInfo {
|
||||
userId: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 信令链接状态
|
||||
* - `DISCONNECTED`: 连接断开
|
||||
* - `CONNECTING`: 正在连接中
|
||||
* - `RECONNECTING`: 自动重连中
|
||||
* - `CONNECTED`: 已连接
|
||||
*/
|
||||
export type ConnectionState = 'DISCONNECTED' | 'CONNECTING' | 'RECONNECTING' | 'CONNECTED';
|
||||
|
||||
/** 播放选项 */
|
||||
export interface PlayOptions {
|
||||
/** 视频画面显示模式,参考 [CSS object-fit 属性](https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit) */
|
||||
objectFit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
|
||||
/** 是否需要 mute 声音,对于本地流通常需要 mute 声音以防止播放从麦克风采集回来的声音。 */
|
||||
muted: boolean;
|
||||
}
|
||||
|
||||
export interface Profile {
|
||||
/** 视频宽度 */
|
||||
width: number;
|
||||
/** 视频高度 */
|
||||
height: number;
|
||||
/** 帧率 */
|
||||
frameRate: number;
|
||||
/** 比特率 kbs */
|
||||
bitrate: number;
|
||||
}
|
||||
|
||||
export type VideoProfileString = '120p' | '180p' | '240p' | '360p' | '480p' | '720p' | '1080p' | '1440p' | '4K';
|
||||
|
||||
export type ScreenProfileString = '480p' | '480p_2' | '720p' | '720p_2' | '1080p' | '1080p_2';
|
||||
29
types/trtc-js-sdk/trtc-js-sdk-tests.ts
Normal file
29
types/trtc-js-sdk/trtc-js-sdk-tests.ts
Normal file
@ -0,0 +1,29 @@
|
||||
TRTC.Logger.setLogLevel(TRTC.Logger.LogLevel.INFO);
|
||||
|
||||
TRTC.getDevices().then(devices => {
|
||||
devices.forEach(device => {
|
||||
console.log(device.deviceId, device.kind);
|
||||
});
|
||||
});
|
||||
|
||||
const client = TRTC.createClient({
|
||||
sdkAppId: 123,
|
||||
userId: '123',
|
||||
userSig: 'userSig',
|
||||
mode: 'live',
|
||||
});
|
||||
|
||||
const stream = TRTC.createStream({
|
||||
audio: true,
|
||||
video: true,
|
||||
});
|
||||
|
||||
stream.initialize().then(() => {
|
||||
client.publish(stream);
|
||||
});
|
||||
|
||||
client.on('stream-subscribed', ({ stream }) => {
|
||||
stream.play('element-id');
|
||||
});
|
||||
|
||||
client.off('*');
|
||||
25
types/trtc-js-sdk/tsconfig.json
Normal file
25
types/trtc-js-sdk/tsconfig.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"lib": [
|
||||
"dom",
|
||||
"es6"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strictFunctionTypes": true,
|
||||
"strictNullChecks": true,
|
||||
"baseUrl": "../",
|
||||
"typeRoots": [
|
||||
"../"
|
||||
],
|
||||
"types": [],
|
||||
"noEmit": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"esModuleInterop": true
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts",
|
||||
"trtc-js-sdk-tests.ts"
|
||||
]
|
||||
}
|
||||
1
types/trtc-js-sdk/tslint.json
Normal file
1
types/trtc-js-sdk/tslint.json
Normal file
@ -0,0 +1 @@
|
||||
{ "extends": "dtslint/dt.json" }
|
||||
Loading…
Reference in New Issue
Block a user