TTT Websdk for web
三体云 tttwebsdk 提供面向 web 应用的 API,基于三体RTN,为 Web 端提供质量可靠的实时音视频通信。
方法
TTTRtcWeb 是 TTTWEBSDK 的入口类,提供所有可供 App 调用的方法。
根据方法实现的功能,我们把所有方法分为以下几类。
TTTRtcWeb方法
方法 | 功能 |
---|---|
isSystemSupported | 检查系统是否支持webrtc -- TTTRtcWeb static 方法 |
listDevices | 枚举系统设备 -- TTTRtcWeb static 方法 |
setLogLevel | 设置SDK的log等级 -- TTTRtcWeb static 方法 |
setServerUrl | 设置服务器地址 -- TTTRtcWeb static 方法 |
getVersion | 获取SDK版本信息 -- TTTRtcWeb static 方法 |
createClient | 创建音视频对象 |
createStream | 创建音视频流对象 |
Client方法
方法 | 功能 |
---|---|
init | 初始化客户端对象 |
join | 加入 3TRTC 频道 |
leave | 离开 TTTRTC 频道 |
publish | 发布本地音视频流(含摄像头流、屏幕流、外部视频流) |
unpublish | 取消发布本地音视频流(含摄像头流、屏幕流、外部视频流) |
publishScreen | 向 CDN 推屏幕流 |
unpublishScreen | 取消向 CDN 推屏幕流 |
subscribe | 订阅远程音视频流(含摄像头流、屏幕流、外部视频流) |
unsubscribe | 取消订阅远程音视频流(含摄像头流、屏幕流、外部视频流) |
pauseMic | 暂停音频推流 |
resumeMic | 恢复音频推流 |
pauseWebcam | 暂停视频推流 |
resumeWebcam | 恢复视频推流 |
pauseScreen | 暂停向 CDN 推屏幕流 |
resumeScreen | 恢复向 CDN 推屏幕流 |
setLiveMixerLayout | 设置混流的布局 |
kickOut | 主播踢人 |
leave | 离开房间 |
close | 关闭Client |
remoteAudioStats | 获取音频接收统计 |
remoteVideoStats | 获取视频接收统计 |
localAudioStats | 获取音频发送统计 |
localVideoStats | 获取视频发送统计 |
getStats | 获取网络状态 |
setRtmpUrl | 切换 rtmp 推流地址 |
setVideoMixerBGIUrl | 设置视频合屏的背景图 |
setUserRole | 切换用户角色 |
renewToken | 更新token |
Stream 方法
方法 | 功能 |
---|---|
setAudioProfile | 设置音频 Profile |
init | 初始化音视频对象 |
getId | 获取音视频流 ID |
getAudioLevel | 获取音量 |
hasVideo | 检查时候本地流是否有视频 |
hasAudio | 检查时候本地流是否有视频 |
enableVideo | 启用视频轨道 |
disableVideo | 禁用视频轨道 |
enableAudio | 启用音频轨道 |
disableAudio | 禁用音频轨道 |
setVideoProfile | 设置视频属性 |
getVideoProfile | 获取视频属性 |
play | 播放音视频流 |
close | 关闭音视频流 |
setAudioVolume | 设置音频播放音量 |
setInputVolume | 设置mic音量 |
switchDevice | 切换设备 |
Client 事件
Client事件
回调 | 事件 |
---|---|
connection-state-change | 连接状态改变 |
peer-join | 通道内有用户加入 |
peer-leave | 通道内有用户离开 |
disconnected | 与服务端的连接已断开 |
kickout | 被踢出房间 |
rtmp-success | rtpm推流设置成功 |
rtmp-failure | rtpm推流设置失败 |
onTokenPrivilegeWillExpire | token将过期 |
audio-added | 有远端音频流加入,可以订阅该流 |
video-added | 有远端视频流加入,可以订阅该流 |
stream-subscribed | 流订阅成功 |
stream-unsubscribed | 流取消订阅成功 |
stream-published | 本用户音视频流已发布 |
stream-unpublished | 音频流已取消发布 |
screen-published | 屏幕流已发布 |
screen-unpublished | 屏幕流已取消发布 |
audio-mute | 用户音频静音 |
audio-unmute | 用户音频静音恢复 |
video-mute | 用户视频静默 |
video-unmute | 用户视频静默恢复 |
Stream 事件
Stream事件
volume-change | 用户音量变化 |
speaking | 用户正在发言 |
stopped-speaking | 用户停止发言 |
screen-close | 屏幕流已关闭 |
TTTRtcWeb方法
Boolean | static isSystemSupported( ) |
undefined | static listDevices(onSuccess, onFailure) |
string | static getVersion() |
undefined | static setLogLevel(logLevel) |
undefined | static setServerUrl(url) |
object | createClient(spec) |
object | createStream(spec) |
Client方法
undefined | init(appId, uid, onSuccess, onFailure) |
undefined | join(token, channelId, onSuccess, onFailure) |
undefined | leave(onSuccess, onFailure) |
undefined | publish(stream, onSuccess, onFailure) |
undefined | unpublish(stream, onSuccess, onFailure, closeDev) |
undefined | publishScreen(stream, onSuccess, onFailure) |
undefined | unpublishScreen(stream, onSuccess, onFailure) |
undefined | subscribe(stream, onSuccess, onFailure) |
undefined | unsubscribe(stream, onSuccess, onFailure) |
undefined | pauseMic(stream, onSuccess, onFailure) |
undefined | resumeMic(stream, onSuccess, onFailure) |
undefined | pauseWebcam(stream, closeDev, onSuccess, onFailure) |
undefined | resumeWebcam(stream, onSuccess, onFailure) |
undefined | pauseScreen() |
undefined | resumeScreen() |
undefined | setLiveMixerLayout(liveMixerLayout, onSuccess, onFailure) |
undefined | kickOut(uid, onSuccess, onFailure) |
undefined | close() |
Object | remoteAudioStats() |
Object | remoteVideoStats() |
Object | localAudioStats() |
Object | localVideoStats() |
Object | getStats() |
undefined | setRtmpUrl(opts, onSuccess, onFailure) |
undefined | setVideoMixerBGIUrl(url, onSuccess, onFailure) |
undefined | setUserRole(role, onSuccess, onFailure) |
undefined | renewToken(token, onSuccess, onFailure) |
Stream方法
undefined | setAudioProfile(profile) |
undefined | init(onSuccess, onFailure) |
string | getId() |
int | getAudioLevel() |
Boolean | hasVideo() |
Boolean | hasAudio() |
undefined | enableVideo() |
undefined | disableVideo() |
undefined | enableAudio() |
undefined | disableAudio() |
undefined | setVideoProfile(videoProfile, onSuccess, onFailure) |
Object | getVideoProfile() |
undefined | play(elementID) |
undefined | close() |
undefined | setAudioVolume(volume) |
undefined | setInputVolume(volume) |
undefined | switchDevice(type, deviceId, onSuccess, onFailure) |
函数说明
TTTRtcWeb static isSystemSupported(); // 注:此为 TTTRtcWeb 的 static 形式方法
返回Boolean值
名称 | 描述 |
返回值 | true - 支持 websdk false - 不支持 websdk |
TTTRtcWeb static listDevices(); // 注:此为 TTTRtcWeb 的 static 形式方法
枚举系统设备
名称 | 描述 |
参数 onSuccess: function | - 成功回调 onSuccess函数携带参数 devices - 设备列表 每项包含如下字段: * kind - 设备类型,取值[audioinput|videoinput|audiooutput] * label - 标签/显示名 * deviceId - 设备ID - 该参数将用于指定设备创建 Stream 时用 |
参数 onFailure: function | - 失败回调 * 枚举设备失败 |
示例代码
TTTRtcWeb.listDevices((devices) => {
devices.forEach(function (deviceInfo) {
message = deviceInfo.kind + ": " + deviceInfo.label + " id = " + deviceInfo.deviceId + '\n';
option.value = deviceInfo.deviceId;
if (deviceInfo.kind === 'audioinput') {
//....
} else if (deviceInfo.kind === 'audiooutput') {
//...
} else if (deviceInfo.kind === 'videoinput') {
//...
} else {
console.log('Some other kind of source/device: ', deviceInfo);
}
});
}, (err) => {
//...
});
// 返回结构举例:
audioinput: 默认 - 麦克风 (Realtek High Definition Audio) id = default
audioinput: 通讯 - 麦克风 (Realtek High Definition Audio) id = communications
audioinput: 麦克风 (Realtek High Definition Audio) id = 5fa4bb7b2bc3e874589e874504ca737f8185024ea081b99a6fdea39fc50a3e67
videoinput: EasyCamera (04f2:b57d) id = 2079af9efddcff53e42675c3fcde75b95127a6fdf6cdb66f47ba65a5da80b907
audiooutput: 默认 - 扬声器 (Realtek High Definition Audio) id = default
audiooutput: 通讯 - 扬声器 (Realtek High Definition Audio) id = communications
audiooutput: 扬声器 (Realtek High Definition Audio) id = 6bb5c351c51d3d36333e846fbbbb470f11d302d49ca0bd4c2235e6949e306977
TTTRtcWeb static getVersion(); // 注:此为 TTTRtcWeb 的 static 形式方法
获取SDK版本信息
名称 | 描述 |
返回值 | SDK版本号 |
TTTRtcWeb static setLogLevel(); // 注:此为 TTTRtcWeb 的 static 形式方法
设置SDK输出日志的级别
名称 | 描述 |
参数 - type: string | type 取值如下: * LOG_NONE * LOG_ERROR * LOG_WARN * LOG_INFO * LOG_DEBUG * LOG_TRACE 解释: * LOG_NONE ---- 不输出日志 * LOG_ERROR ---- 输出错误日志 * LOG_WARN ---- 输出警告日志 * LOG_INFO ---- 输出信息日志 * LOG_DEBUG ---- 输出调试日志 * LOG_TRACE ---- 输出跟踪日志. 默认值. |
TTTRtcWeb static setServerUrl(url); // 注:此为 TTTRtcWeb 的 static 形式方法
设置服务器地址
此函数只适应于私有化部署方案.
名称 | 描述 |
参数 - url: string | 服务器域名 |
TTTRtcWeb createClient(spec);
创建Client对象
名称 | 描述 |
参数 - spec: object |
{ role: @type {string} - 取值范围:1 | 2 | 3 disableRtmpVideo: @type {Boolean} (可选参数) rtmpUrl: @type {string} (可选参数) videoMixerBGIUrl: @type {string} (可选参数) - 视频合屏背景图url audioCodec: @type {string} (可选参数) - 取值范围:opus | isac } 注: role = '1 | 2 | 3' 1: 主播; 2: 副播; 3: 观众 注: disableRtmpVideo = 'true|false' 是否仅向CDN推音频 注: rtmpUrl -(可选参数)如果需要自行指定推流地址,可设置该参数 注: audioCodec -(可选参数)用于前端显式指定音频编码(opus | isac) |
TTTRtcWeb createStream(spec);
创建 Stream 对象
每个 Stream 对象标识一套音视频流,创建 Stream 对象,并执行 stream.init ,该流将可通过 client 向 RTN 推流;
tttwebsdk 在同一 client 上支持同时推多路流;
名称 | 描述 |
参数 - spec: object | { streamId: @type {string} - 音视频流 ID,通常设置为用户ID userId: @type {string} - 用户ID audioSource: @type {MediaStreamTrack} - 是否使用外部 音频源 -- 注:(可选) videoSource: @type {MediaStreamTrack} - 是否使用外部 视频源 -- 注:(可选) audio: @type {Boolean} - 是否由 Stream 打开音频设备 -- 注:(可选),若已设置 audioSource ,则此项失效 microphoneId: @type {string} - 麦克风的设备ID -- 注:(可选),不设置将使用默认的麦克风 video: @type {Boolean} - 是否由 Stream 打开视频设备 -- 注:(可选),若已设置 videoSource ,则此项失效 cameraId: @type {string} - 摄像头的设备ID -- 注:(可选),不设置将使用默认的摄像头 attributes: { -- (可选) 包含以下属性: videoProfile: @type {string} 视频分辨率,取值范围见下表定义 minFrameRate: @type {number} 最小视频帧率 maxFrameRate: @type {number} 最大视频帧率 idealFrameRate: @type {number} 理想帧率 } screen: @type {Boolean} - 是否由 Stream 打开屏幕共享 -- (可选) codecOptions: { -- (可选) startBitrate: @type {number} - 单位:kbps maxBitrate: @type {number} - 单位:kbps minBitrate: @type {number} - 单位:kbps } subStream: @type {Boolean} - 是否子流 -- (可选) }
|
注1: 可以创建的视频流包括:
video: true -- 摄像头视频
screen: true -- 屏幕分享
videoSource -- 外部视频源
注2: video, screen 为互斥项,同时最多只能有其中一个设置为true
注3: audioSource、audio 两参数互斥,如果设置了有效 audioSource,则 audio 自动失效
注4: videoSource、video 两参数互斥,如果设置了有效 videoSource,则 video 自动失效
注5: codecOptions 用于自定义码率,其参数说明如下:
codecOptions: {
startBitrate -- 初始码率
maxBitrate -- 最大码率
minBitrate -- 最小码率
}
attributes.videoProfile 定义
视频属性 | 分辨率(宽x高) | 帧率(fps) | 码率(kbps) |
120p | 160*120 | 15 | 65 |
240p | 320*240 | 15 | 300 |
360p | 640*360 | 15 | 300 |
480p | 640*480 | 15 | 450 |
720p | 1280*720 | 15 | 1400 |
1080p | 1920*1080 | 15 | 2000 |
Client init(appId, uid, onSuccess, onFailure);
使用该方法初始化客户端引擎对象。
名称 | 描述 |
参数 - appId: string | appId |
参数 - uid: string|number | 用户ID 注:十进制数值 |
参数 - onSuccess: function | 成功回调 -- 所有后续有关 Client 的操作,如 join,必须要在 onSuccess 后执行 |
参数 - onFailure: function | 失败回调。 |
Client join(token, channelId, onSuccess, onFailure)
加入 3TRTC 频道 -- 应确保在 Client.init 的成功回调后执行
名称 | 描述 |
参数 - token: string | 验证token 注1:根据 APP ID、Secret Key 生成 token 注2:传入 '',表示不执行校验 |
参数 - channelId: string|number | 频道(房间)id:房间号码 注:十进制数值 |
参数 - onSuccess: function | 成功回调 |
参数 - onFailure: function | 失败回调 |
注:用户加入房间时,保证用户id唯一,否则相同的id用户会被踢出房间。
Client leave(onSuccess, onFailure);
离开频道
名称 | 描述 |
参数 - onSuccess: function | 成功回调 |
参数 - onFailure: function | 失败回调 |
注:离开此房间
Client publish(stream, onSuccess, onFailure);
发布本地音视频流(含摄像头流、屏幕流、外部视频流)
该方法将本地音视频流发布至 3T-RTN。
发布音视频流之后,本地会触发 Client.on("stream-published") 回调;远端会触发 Client.on("audio-added") 或 Client.on("video-added") 事件
注 -- 音视频流包括:摄像头视频、屏幕分享、外部视频流
名称 | 描述 |
参数 - stream: Stream | 发布的 Stream 对象 stream 由 TTTRtcWeb.createStream() 创建,且执行了 stream.init() |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因。 |
代码示例
client.publish(local_stream, function success() {
console.log(...)
}, function failure(e) {
console.error(e)
});
Client unpublish(stream, onSuccess, onFailure, closeDev);
取消发布本地音视频流(含摄像头流、屏幕流、外部视频流)
名称 | 描述 |
参数 - stream: Stream | 要取消发布的 Stream 对象 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
参数 - closeDev: Boolean | 是否关闭摄像头 true - 关闭摄像头 false - 仅仅暂停音视频上行,保持摄像头打开状态 |
代码示例
client.unpublish(local_stream, () => {
console.log(...)
}, (e) => {
console.error(e)
});
Client publishScreen(stream, onSuccess, onFailure)
注:专用于将屏幕流向 CDN 推流 -- 如果需要在连麦房间中推屏幕流,应使用 publish
名称 | 描述 |
参数 - stream: Stream | 屏幕流的 Stream 对象 stream 由 TTTRtcWeb.createStream() 创建,且执行了 stream.init() |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client unpublishScreen(stream, onSuccess, onFailure)
取消向 CDN 推屏幕流
名称 | 描述 |
参数 - stream: Stream | 屏幕流的 Stream 对象 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client setLiveMixerLayout(liveMixerLayout, onSuccess, onFailure)
设置合流视频的布局
名称 | 描述 |
参数 - liveMixerLayout: Object | 该参数为混屏布局,具体的定义如下:{ backgroundColor: 0x000000, width: 640, height: 480, users: [ { userId: "54815", streamId: "54815", x: 0, y: 0, w: 0.5, h: 0.5, z: 1 }, { userId: "12765", streamId: "12765", x: 0.5, y: 0, w: 0.5, h: 0.5, z: 1 } ] } 字段说明: backgroundColor -- 背景色, 0x 起始的16进制数,取值如: 0x000000 width -- 整个画布的宽,取值如:640 height -- 整个画布的宽,取值如:480 users -- 数组,其中每项含如下参数: -- userId -- 该用户ID -- streamId -- 该路视频 streamId - 来源于 stream.getId() -- x, y : 在合屏上的 左上坐标位置,取值范围 0 ~ 1 -- w, h : 在合屏上的 其视频 宽/高,取值范围 0 ~ 1 -- z : 叠放次序,值越大,叠放次序越高 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client kickOut(uid, onSuccess, onFailure)
将某人踢出房间
名称 | 描述 |
参数 - uid: string|number | 将要踢出用户的userId |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
注:只有主播有此权限。作为主播,可以踢出副播或观众
Client subscribe(stream, onSuccess, onFailure)
订阅远程音视频流
名称 | 描述 |
参数 - stream: Stream | 订阅流的 Stream 对象 注:stream 对象来自于 sdk 的通知,由 'audio-added' 或者 'video-added' 携带的 stream 参数 |
参数 - onSuccess: function | 成功回调:参数为 Stream 对象 注:此流为可播放流对象 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
注:订阅远端流 - 本端开始接收指定远端音视频流,订阅成功后,本地可以播放该路媒体。
Client unsubscribe(stream, onSuccess, onFailure)
取消订阅远程音视频流
名称 | 描述 |
参数 - stream: Stream | 要取消订阅 Stream 对象 |
参数 - onSuccess: function | 成功回调:参数为stream对象 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
注:此函数调用后本端将不再接收该路流。
Client pauseMic(stream, onSuccess, onFailure)
暂停推音频流
名称 | 描述 |
参数 - stream: Stream | 将暂停的 Stream 对象 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
注:此函数调用自己的音频流将不再向服务器发送,房间内其他人都将听不见你
Client resumeMic(stream, onSuccess, onFailure)
恢复推音频流
名称 | 描述 |
参数 - stream: Stream | 将恢复的 Stream 对象 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client pauseWebcam(stream, closeDev, onSuccess, onFailure)
暂停推视频流
名称 | 描述 |
参数 - stream: Stream | 将暂停的 Stream 对象 |
参数 - closeDev: Boolean | 是否关闭摄像头设备 true - 关闭摄像头 false - 仅仅暂停视频上行,保持摄像头打开状态 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client resumeWebcam(stream, onSuccess, onFailure)
恢复推视频流
名称 | 描述 |
参数 - stream: Stream | 将恢复的 Stream 对象 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client close()
关闭客户端 - 执行 close 后,将从系统退出
名称 | 描述 |
参数 | 无 |
Client remoteAudioStats()
获取音频接收统计
名称 | 描述 |
参数 - 无 | - |
返回值 | 下行音频传输状态 -- 具体定义见后文 |
下行音频传输状态
{
statTS: 1582989298574, // 统计时刻的时戳
ssrc: 97843223, // 该路流 ssrc 标识
streamId: 111111, // stream id
timestamp: 646196852, // 流时戳 -- 可不用关心
bitrate: 40, // 媒体流码率 -- 单位 kbps
packetCount: 1163, // 累计包数
packetLost: 0, // 累计丢包数
nackCount: 0, // 重传包数
pliCount: 0, // 关键帧请求数
sliCount: 0, // 条带请求数 -- 可不用关心
fractionLost: 21, // 当前丢包率 %
rtt: 42 // rtt -- 往返时间
}
Client remoteVideoStats()
获取视频接收统计
名称 | 描述 |
参数 - 无 | - |
返回值 | 下行视频传输状态 -- 具体定义见后文 |
下行视频传输状态
{
statTS: 1582989663000, // 统计时刻的时戳
ssrc: 86991964, // 该路流 ssrc 标识
streamId: 111111, // stream id
timestamp: 646561280, // 流时戳 -- 可不用关心
bitrate: 180, // 媒体流码率 -- 单位 kbps
packetCount: 361, // 累计包数
packetLost: 20, // 累计丢包数
nackCount: 41, // 重传包数
pliCount: 7, // 关键帧请求数
sliCount: 0, // 条带请求数 -- 可不用关心
fractionLost: 21, // 当前丢包率 %
rtt: 42 // rtt -- 往返时间
}
Client localAudioStats()
获取音频发送统计
名称 | 描述 |
参数 - 无 | - |
返回值 | 上行音频传输状态 -- 具体定义见后文 |
上行音频传输状态
{
statTS: 1582989662531, // 统计时刻的时戳
ssrc: 4202670861, // 该路流 ssrc 标识
streamId: 111111, // stream id
timestamp: 646560815, // 流时戳 -- 可不用关心
bitrate: 37, // 媒体流码率 -- 单位 kbps
packetCount: 390, // 累计包数
packetLost: 31, // 累计丢包数
nackCount: 0, // 重传包数
jitter: 7, // jitter 抖动缓存
pliCount: 0, // -- 可不用关心
fractionLost: 31, // 当前丢包率 %
}
Client localVideoStats()
获取视频发送统计
名称 | 描述 |
参数 - 无 | - |
返回值 | 上行视频传输状态 -- 具体定义见后文 |
上行视频传输状态
{
statTS: 1582989662648, // 统计时刻的时戳
ssrc: 4047475653, // 该路流 ssrc 标识
streamId: 111111, // stream id
timestamp: 646560932, // 流时戳 -- 可不用关心
bitrate: 166, // 媒体流码率 -- 单位 kbps
packetCount: 221, // 累计包数
packetLost: 29, // 累计丢包数
nackCount: 48, // 重传包数
jitter: 37, // jitter 抖动缓存
pliCount: 9, // -- 可不用关心
fractionLost: 29, // 当前丢包率 %
}
TTTRtcWeb getStats()
获取网络状态
名称 | 描述 |
返回值 | 当前状态信息,具体定义见后 |
{
iceSendTransport:"connected", // 上行媒体通道链接状态 : fault | new | connected | disconnected
iceRecvTransport:"connected", // 下行媒体通道连接状态 : fault | new | connected | disconnected
websocketTransport:"online", // 信令通道连接状态 : fault | connected | disconnected
loginStatus:"online", // 当前登录状态 : online | offline
stats:
{ // 传输状态统计
rtt:"193", //
networkType:"wlan", // 网络类型 : lan | wlan
upSpeed:"201.00", // 上行速率(总) - kbps
upFractionLost:18, // 上行丢包率
downSpeed:"205.00", // 下行速率(总) - kbps
downFractionLost:15 // 下行丢包率
}
}
Client setRtmpUrl(opts, onSuccess, onFailure)
切换 rtmp 推流地址
名称 | 描述 |
参数 - opts: Object |
{ url: @type {string} - CDN 地址 avMode: @type {string} (可选参数) } 注: avMode = ''audio' | 'av'' 'audio': 纯音频 'av': 音视频 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client setVideoMixerBGIUrl(url, onSuccess, onFailure)
设置视频合屏的背景图(url) - 只要主播角色的用户才有此权限
名称 | 描述 |
参数 - url: string | 背景图 url |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client setUserRole(role, onSuccess, onFailure)
切换用户角色 - 仅仅允许在 副播|观众 之间切换
名称 | 描述 |
参数 - role: string|number | 用户角色 - 有效取值为 2 | 3
注: role = '2 | 3' 2: 副播; 3: 观众 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Client renewToken(token, onSuccess, onFailure)
当启动了校验时,将需要通过 renewToken 来更新 token
名称 | 描述 |
参数 - token: string | token 字符串,由上层根据 AppID、Secret Key 生成 |
参数 - onSuccess: function | 成功回调:无参数 |
参数 - onFailure: function | 失败回调:参数为失败原因 |
Stream setAudioProfile(profile)
设置音频 Profile
名称 | 描述 |
参数 - profile: string | 取值 : 音频属性(Profile)字符串。详见下表的定义 |
-- 仅仅对于本地流,该接口有效 -- 要确保在调用 Stream.init 之前调用该接口
音频 Profile 定义
音频属性 | 采样率 | 声道 | 码率(kbps) | 编码 |
speech_low_quality | 16kHZ | 单声道 | 24 | opus |
speech_standard | 32kHZ | 单声道 | 24 | opus |
music_standard | 48kHZ | 单声道 | 40 | opus |
standard_stereo | 48kHZ | 双声道 | 64 | opus |
high_quality | 48kHZ | 单声道 | 128 | opus |
high_quality_stereo | 48kHZ | 双声道 | 192 | opus |
Stream init(onSuccess, onFailure)
流初始化,用于本地流初始化,创建本地摄像头、屏幕分享、外部视频源、mic采集、外部音频源等相关
注:仅用于本地流
名称 | 描述 |
参数 - onSuccess: function | 成功回调 |
参数 - onFailure: function | 失败回调 |
当stream create完成后,需要调用init方法将本地流真正初始化完成。
Stream getId()
获取音视频流 ID
名称 | 描述 |
返回值 - streamId: string | stream id. |
Stream getAudioLevel()
获得本地音频当前音量
名称 | 描述 |
返回值 - volume: number | 音量 数值: 0 到 100 之间 |
Stream hasVideo()
检查本地流是否包含视频
名称 | 描述 |
返回值 - boolean | true - 包含 false - 不包含 |
Stream hasAudio()
检查本地流是否包含音频
名称 | 描述 |
返回值 - boolean | true - 包含 false - 不包含 |
Stream disableVideo()
禁用本地视频轨道
名称 | 描述 |
参数 | 无 |
Stream enableVideo()
启用视频轨道
名称 | 描述 |
参数 | 无 |
Stream disableAudio()
禁用本地音频轨道
名称 | 描述 |
参数 | 无 |
Stream enableAudio()
启用音频轨道
名称 | 描述 |
参数 | 无 |
Stream setVideoProfile(videoProfile, onSuccess, onFailure)
设置视频属性
名称 | 描述 |
参数 - videoProfile: object | 视频属性(Profile)字符串。详见下表的定义。 |
参数 - onSuccess: function | 成功回调。 |
参数 - onFailure: function | 失败回调。 |
视频属性定义
视频属性 | 分辨率(宽x高) | 帧率(fps) | 码率(kbps) |
120p | 160*120 | 15 | 65 |
240p | 320*240 | 15 | 300 |
360p | 640*360 | 15 | 300 |
480p | 640*480 | 15 | 450 |
720p | 1280*720 | 15 | 1400 |
1080p | 1920*1080 | 15 | 2000 |
Stream getVideoProfile()
获取视频属性
名称 | 描述 |
返回值 - object | 获取视频属性.
{ height: @type {number}, width: @type {number} } 例如: { height: 480 width: 640 } |
Stream play(elementID)
播放音视频流
名称 | 描述 |
参数 - elementID: string | video tag id 注:该参数为可选参数,如果为纯音频流,则无需传入 elementID |
Stream close()
关闭本地音视频流
名称 | 描述 |
参数 | 无 |
Stream setAudioVolume(volume)
设置音频播放音量
名称 | 描述 |
参数 - volume: number | 播放音量,取值 : [0, 1.5] 0 : 静音 0.* : 减小 1 : 正常 1.* : 放大 1.5 : 最大 |
Stream setInputVolume(volume)
设置mic音量
名称 | 描述 |
参数 - volume: number | 播放音量,取值 : [0, 1.5] 0 : 静音 0.* : 减小 1 : 正常 1.* : 放大 1.5 : 最大 |
Stream switchDevice(type, deviceId, onSuccess, onFailure)
关闭本地音视频流
名称 | 描述 |
参数 - type: string | 设备类型,取值:'audio' | 'video' |
参数 - deviceId: string | 设备ID -- 来源于 TTTRtcWeb.listDevices() 获取的设备列表,取其中的 deviceId 值 |
参数 - onSuccess: function | 成功回调。 |
参数 - onFailure: function | 失败回调。 |
事件(通过 client.on(), stream.on() 监听的事件) |
|
connection-state-change | 连接状态改变 |
peer-join | 通道内有用户加入 |
peer-leave | 通道内有用户离开 |
disconnected | 与服务端的连接已断开 |
kickout | 被踢出房间 |
rtmp-success | rtmp推流设置成功 |
rtmp-failure | rtmp推流设置失败 |
onTokenPrivilegeWillExpire | token将过期 |
audio-added | 通道内有远端音频流加入 |
video-added | 通道内有远端视频流加入 |
stream-subscribed | 音视频流订阅成功 |
stream-unsubscribed | 音视频流已取消订阅 |
stream-published | 本用户音视频流发布成功 |
stream-unpublished | 音频流已取消发布 |
screen-published | 屏幕流已发布 |
screen-unpublished | 屏幕流已取消发布 |
audio-mute | 用户音频静音 |
audio-unmute | 用户音频静音恢复 |
video-mute | 用户视频静默 |
video-unmute | 用户视频静默恢复 |
screen-close | 屏幕流已关闭 |
speaking | 用户正在发言 |
volume-change | 用户音量变化 |
stopped-speaking | 用户停止发言 |
事件说明
client.on(event: 'connection-state-change', callback: function): void
连接状态改变
名称 | 描述 |
object | { prevState: @type {string}, // 改变之前的状态 curState: @type {string} // 当前状态 } |
client.on('connection-state-change', function (evt) {
console.log(evt.prevState, evt.curState);
//...
}
client.on(event: 'peer-join', callback: function): void
通道内有用户加入
名称 | 描述 |
object | { userID: @type {string|number} // 用户ID } |
client.on(event: 'peer-leave', callback: function): void
通道内有用户离开
名称 | 描述 |
object | { userID: @type {string|number} // 用户ID } |
client.on(event: 'disconnected', callback: function): void
与服务端的连接已断开
名称 | 描述 |
参数 | 无 |
服务器断开连接. 1: 可能是网络连接断开了;2:被踢出房间后。
client.on(event: 'kickout', callback: function): void
被踢出房间
名称 | 描述 |
object | { exitCode: @type {number}, // 错误码 reason: @type {string} // 错误原因 } 错误原因如下: * 重复登录。 * 主播退出。 * 被主播踢出房间 |
client.on(event: 'rtmp-success', callback: function): void
rtmp推流设置成功
名称 | 描述 |
object | { url: @type {string}, // 该推流地址 url channelId: @type {string|number} // 房间号 } |
client.on(event: 'rtmp-failure', callback: function): void
rtmp推流设置失败
名称 | 描述 |
object | { url: @type {string}, // 该推流地址 url channelId: @type {string|number} // 房间号 } |
client.on(event: 'audio-added', callback: function): void
通道内有远端音频流加入
名称 | 描述 |
object | { stream: @type {Stream} // 音频流对象 } |
client.on('audio-added', function (evt) {
let stream = evt.stream;
// 请求订阅 该流
client.subscribe(stream, (event) = > {
// ...
}, (err) => {
// ...
}
//...
}
client.on(event: 'video-added', callback: function): void
通道内有远端视频流加入
名称 | 描述 |
object | { stream: @type {Stream} // 视频流对象 } |
client.on('video-added', function (evt) {
let stream = evt.stream;
// 请求订阅 该流
client.subscribe(stream, (event) = > {
// ...
}, (err) => {
// ...
}
//...
}
client.on(event: 'stream-subscribed', callback: function): void
音视频流订阅成功
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('stream-subscribed', function (evt) {
let stream = evt.stream;
if (stream.type === 'audio')
{
stream.play();
}
else
{
stream.play(video-elementID);
}
//...
}
client.on(event: 'stream-unsubscribed', callback: function): void
音视频流已取消订阅
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('stream-unsubscribed', function (evt) {
let stream = evt.stream;
//...
}
client.on(event: 'stream-published', callback: function): void
本用户音视频流发布成功
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('stream-published', function (evt) {
let stream = evt.stream;
//...
}
client.on(event: 'stream-unpublished', callback: function): void
音频流已取消发布
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('stream-unpublished', function (evt) {
let stream = evt.stream;
//...
}
client.on(event: 'screen-published', callback: function): void
屏幕流已发布
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('screen-published', function (evt) {
let stream = evt.stream;
//...
}
client.on(event: 'screen-unpublished', callback: function): void
屏幕流已取消发布
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
client.on('screen-unpublished', function (evt) {
let stream = evt.stream;
//...
}
client.on(event: 'audio-mute', callback: function): void
用户音频静音
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
client.on('audio-mute', function (evt) {
let stream = evt.stream;
let uid = stream.getId();
//...
}
client.on(event: 'audio-unmute', callback: function): void
用户音频静音恢复
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('audio-unmute', function (evt) {
let stream = evt.stream;
let uid = stream.getId();
//...
}
client.on(event: 'video-mute', callback: function): void
静默用户视频
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('video-mute', function (evt) {
let stream = evt.stream;
let uid = stream.getId();
//...
}
client.on(event: 'video-unmute', callback: function): void
恢复用户静默视频
名称 | 描述 |
object | { stream: @type {Stream} // 流对象 } |
示例代码
client.on('video-unmute', function (evt) {
let stream = evt.stream;
let uid = stream.getId();
//...
}
stream.on(event: 'screen-close', callback: function): void
屏幕流关闭
名称 | 描述 |
object | { streamID : @type {string}, stream: @type {Stream} // 流对象 } |
当用户点击停止屏幕共享按钮时将触发这个事件.
stream.on(event: 'speaking', callback: function): void
用户正在发言
名称 | 描述 |
object | { userID: @type {string|number} // 正在发言的用户ID } |
stream.on(event: 'volume-change', callback: function): void
用户音量变化
名称 | 描述 |
object | { userID: @type {string|number} // 正在发言的用户ID volume: @type {number} // 音量值 } |
stream.on(event: 'stopped-speaking', callback: function): void
用户停止发言
名称 | 描述 |
object | { userID: @type {string|number} // 停止发言的用户ID } |
示例代码
demo源码: santiyun@github