视频通话
联系电话:(010) 6072 8829
技术QQ群:697918347
English
视频通话API
API概览

TTT Websdk for web

三体云通过全球部署的虚拟网络,提供可以灵活搭配的 API 组合,为 Web 端提供质量可靠的实时音视频通信。

方法

TTTRtcWeb 是 TTTWEBSDK 的入口类,提供所有可供 App 调用的方法。

根据方法实现的功能,我们把所有方法分为以下几类。

TTTRtcWeb方法

方法 功能
checkSystemRequirements 检查系统是否支持webrtc
getDevices 枚举系统设备
setLogLevel 设置SDK的log等级
setServerUrl 设置服务器地址
getVersion 获取SDK版本信息
createStream 创建音视频流对象
createClient 创建音视频对象
getStats 获取当前网络状态

Client方法

方法 功能
init 初始化客户端对象
join 加入 3TRTC 频道
leave 离开 TTTRTC 频道
publish 发布本地音视频流
unpublish 取消发布本地音视频流
publishScreen 发布屏幕流
unpublishScreen 取消发布屏幕流
subscribe 订阅远程音视频流
unsubscribe 取消订阅远程音视频流
pauseMic 禁音
resumeMic 取消静音
pauseWebcam 禁视频
resumeWebcam 取消禁视频
pauseScreen 禁屏幕流
resumeScreen 取消禁屏幕流
getNetState 获取网络状态
setSEI 设置混流的布局
kickOut 主播踢人
leave 离开房间
close 关闭Client

Stream 方法

方法 功能
init 初始化音视频对象
getId 获取音视频流 ID
getAudioLevel 获取音量
hasVideo 检查时候本地流是否有视频
hasAudio 检查时候本地流是否有视频
enableVideo 启用视频轨道
disableVideo 禁用视频轨道
enableAudio 启用音频轨道
disableAudio 禁用音频轨道
setVideoProfile 设置视频属性
getVideoProfile 获取视频属性
play 播放音视频流
close 关闭音视频流

Client 事件

Client Events

Client事件

回调 事件
peer-join 用户加入
peer-leave 用户离开
stream-added 用户流加入
stream-subscribed 流订阅成功
stream-unsubscribed 流取消订阅成功
audio-mute 远端禁音
video-mute 远端禁视频
audio-unmute 取消禁音
video-unmute 取消禁视频
stream-published 流发布成功
stream-unpublished 取消流发布成功
screen-published 发布屏幕流成功
screen-unpublished 取消发布屏幕流成功
kickout 被踢出房间
disconnected 与服务器断开链接

Stream 事件

Stream Events

Stream事件

volume-change 音量变化
speacking 正在说话
stopped-speaking 停止说话
screen-close 屏幕关闭

 

 

 

API方法

成员函数

Boolean  checkSystemRequirements( )
undefined  getDevices(onSuccess, onFailure)
string  getVersion()
undefined  setLogLevel(logLevel)
undefined  setServerUrl(URL)
object  createStream(spec)
object  createClient(config)
object  getStats()
undefined  init(appId, uid, onSuccess, onFailure)
undefined  join(channel, onSuccess, onFailure)
undefined  leave(onSuccess, onFailure)
undefined  publish(stream, onSuccess, onFailure)
undefined  unpublish(stream, onSuccess, onFailure)
undefined  publishScreen(stream, onSuccess, onFailure)
undefined  unpublishScreen(stream, onSuccess, onFailure)
undefined  subscribe(stream, onSuccess, onFailure)
undefined  unsubscribe(stream, onSuccess, onFailure)
undefined  pauseMic()
undefined  resumeMic()
pauseWebcam  pauseWebcam()
undefined  resumeWebcam()
pauseScreen  pauseScreen()
undefined  resumeScreen()
undefined  setSEI(uid, type, isScreen, sei)
undefined  kickOut(userId)
undefined  close()
undefined  init(onSuccess, onFailure)
string  getId()
int  getAudioLevel()
Boolean  setVideoProfile(videoProfile, onSuccess, onFailure)
Boolean  hasVideo()
Boolean  hasAudio()
undefined  enableVideo()
undefined  disableVideo()
undefined  enableAudio()
undefined  disableAudio()
object  getVideoProfile()
undefined  play(elementID)
undefined  close()

函数说明

 
检查浏览器对Webrtc的兼容性
TTTRtcWeb checkSystemRequirements();

返回Bloolean值

名称 描述
返回值 true表示浏览器支持webrtc,false则表示不支持。
 
枚举系统设备
getDevices(onSuccess, onFailure)

枚举系统设备

名称 描述
回调 onSuccess:设备信息 Field
* flag String Browser/device identifier.
* name String Browser/device descriptive name (taken from User-Agent).
* version String Browser/device version.
* bowser Object Object produced by the _detect() method of the bowser library.
回调 onFailure 枚举设备失败

示例代码

	
		var RTCObj = new TTTRtcWeb();
			
		RTCObj.getDevices((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
	
 
获取SDK版本信息
TTTRtcWeb getVersion();

获取SDK版本信息

名称 描述
返回值 SDK版本号
 
设置日志级别
TTTRtcWeb setLogLevel();

设置SDK输出日志的级别

名称 描述
参数(type: string) * LOG_NONE
* LOG_ERROR
* LOG_WARN
* LOG_INFO
* LOG_DEBUG
* LOG_TRACE

解释:
* LOG_NONE ---- 不输出日志
* LOG_ERROR ---- 输出错误日志
* LOG_WARN ---- 输出警告日志
* LOG_INFO ---- 输出信息日志
* LOG_DEBUG ---- 输出调试日志
* LOG_TRACE ---- 输出跟踪日志. 默认值.
 
设置服务器地址(setServerUrl)
TTTRtcWeb setServerUrl(URL);

设置服务器地址. 此函数只适应于私有化部署方案.

名称 描述
参数:URL string: 服务器域名.
 
创建音视频流对象(createStream)
TTTRtcWeb createStream(spec);
名称 描述
参数:spec • streamId:音视频流 ID,通常设置为 uid,可通过 engine.join 方法获取
• audio:(flag) True/False,指定该音视频流是否包含音频资源
• video:(flag) True/False,指定该音视频流是否包含视频资源
• attributes:(可选) 包含以下属性:
    • resolution: 分辨率,可设置为 ‘sif’, ‘vga’, ‘hd720p’ 的其中任一项
    • minFrameRate: 最小视频帧率
    • maxFrameRate: 最大视频帧率
    • idealFrameRate: 理想帧率
• screen:(flag) True/False,指定该音视频流是否包含屏幕共享功能
• cameraId 摄像头的设备ID. 注:此值为备选,不设置将使用默认的摄像头
• microphoneId 麦克风的设备ID. 注:此值为备选,不设置将使用默认的麦克风
• codecOptions:
     {
       startBitrate: @type {number},
       maxBitrate: @{number},
       minBitrate: @type {number}
     }
subStream: true|false 是否子流
						
e.g.: sample parameter of code.

{
	streamID: '',
	userID: '',
	audio: @type {Boolean},
	video: @type {Boolean},
	screen: @type {Boolean},
	attributes: {
		resolution: 'sif'|'vga'|'hd720p' | 
		{
			 width: @type{number}, height: @type{number} 
	    }
		// NOTE: the 'width and height' can concurrent with 'sif|vga|hd720p' setting, 
		// but the prority more height of 'width and height'. 
		minFrameRate: @type {number},
		maxFrameRate: @type {number},
		idealFrameRate: @type {number} (NOTE: option)
	},
	codecOptions: {
		startBitrate: @type {number}, 
		maxBitrate: @{number}, 
		minBitrate: @type {number}
	},/
	// NOTE: Unit is bits.
	subStream: true | false
}
						
					
 
创建Client对象(createClient)
TTTRtcWeb createClient(config);

创建Client对象

名称 描述
参数:config {
    role: 'string'
    rtmpUrl: 'string'  (可选参数)
}

注:role = '1|2|3'
1: 主播; 2: 副播; 3: 观众


注:rtmpUrl:(这是一个可选参数,不做录制或使用默认地址可不填此值)。服务器有一套默认的推拉流地址(见setSEI接口)。如果使用自己CDN地址,可以在此传入
 
获取网络状态(getStats)
TTTRtcWeb getStats()

获取网络状态

名称 描述
返回值 {
    "roundTripTime": 0, // 数据包到服务器的往返时间
    "quality": 0,             //     网络的综合质量,从 0 到 1。0 最差,1最好
    "fractionLost": 0,     //丢包率
    "wsState": "", ,        //websocket网络状态: CONNECTING, OPEN,     CLOSING, disconnected, CLOSED.
    "sendIceState": "",     //send ice网络状态: new, checking, connected,     completed, disconnected, failed, closed.
    "recvIceState": "",     //recv ice网络状态: new, checking, connected,     completed, disconnected, failed, closed.
    "audioUp": {   //音频上行
    "packageLost": 0,
    "nackCount": 0,
    "jitter": 0,
    "pliCount": 0,
    "sliCount": 0,
    "fractionLost": 0,
    "roundTripTime": 0,
    "packetCount": 0,
"audioDown":
{     //音频下行
    "packageLost": 0,
    "nackCount": 0,
    "jitter": 0,
    "pliCount": 0,
    "sliCount": 0,
    "fractionLost": 0,
    "roundTripTime": 0,
    "packetCount": 0
},
"videoUp": {
    //视频上行
    "packageLost": 0,
    "nackCount": 0,
    "jitter": 0,
    "pliCount": 0,
    "sliCount": 0,
    "fractionLost": 0,
    "roundTripTime": 0,
    "packetCount": 0
},
"videoDown":
{    //视频下行
    "packageLost": 0,
    "nackCount": 0,
    "jitter": 0,
    "pliCount": 0,
    "sliCount": 0,
    "fractionLost": 0,
    "roundTripTime": 0,
    "packetCount": 0
}
}
 
初始化客户端对象(init)
Client init(appId, uid, onSuccess, onFailure);

使用该方法初始化客户端引擎对象。

名称 描述
appId appId
uid 用户ID
注:此数为数值值
onSuccess callback:init的成功回调。
onFailure callback:init的调用失败回调。
 
加入频道(join)
join(channel, onSuccess, onFailure)

加入 3TRTC 频道

名称 描述
channel 频道(房间)id:房间号码
注:数值型值
onSuccess 成功回调
onFailure 失败回调

注:用户加入房间时,保证用户id唯一,负责相同的id用户会被踢出房间。

 
离开房间(leave)
Client leave(onSuccess, onFailure);

离开频道

名称 描述
onFailure 成功回调
onFailure 失败回调

注:就是离开此房间

 
发布本地音视频流(publish)
Client publish(stream, onSuccess, onFailure);

发布本地音视频流

名称 描述
stream 发布的流对象
onSuccess 成功回调:无参数。
onFailure 失败回调:参数是失败原因。

代码示例

	
			client.publish(local_stream, function success() {
				console.log(...)	
			}, function failure(e) {
				console.error(e)
			});
	
 
取消发布本地音视频流(unpublish)
Client unpublish(stream, onSuccess, onFailure);

取消发布本地音视频流

名称 描述
stream 要取消发布的流
onSuccess 成功回调:无参
onFailure 失败回调:无参
注:流不在向服务器发送,这样别人都将看不见也听不见此人。

代码示例


		client.unpublish(local_stream, function success() {
			console.log(...)	
		}, function failure(e) {
			console.error(e)
		});
 
 
发布屏幕流(publishScreen)
Client publishScreen(stream, onSuccess, onFailure)

发布屏幕流

名称 描述
stream 屏幕流的对象
onSuccess 成功回调:参数为stream对象
注:此流为可播放流对象
onFailure 失败回调:参数为失败原因
 
取消发布屏幕流(unpublishScreen)
Client unpublishScreen(stream, onSuccess, onFailure)

取消发布屏幕流

名称 描述
stream 屏幕流的对象
onSuccess 成功回调:参数为stream对象
注:此流为可播放流对象
onFailure 失败回调:参数为失败原因
 
设置合流视频的布局(setSEI)
Client setSEI(uid, type, isScreen, sei)

设置合流视频的布局

名称 描述
uid 这里加哪个用户(或减哪个用户),就写哪个用户的UserID
type 1: add
2: del.
add: 增加用户,del:删除用户
isScreen Bealean: 是否屏幕流. true是,false否。

ture 将屏幕推送到CDN.
    拉流地址:rtmp://pull.3ttech.cn/sdk/web_{roomid}_{the last four digits of appid}
false: 不是屏幕流。此时推送CDN的流为摄像头的流。
    拉流地址和上面的一致
sei
{
    "mid": "12765",
    "pos": [
        {
            "id": "54815",
            "x": 0.7666666507720947,
            "y": 0.7495826482772827,
            "w": 0.20999999344348907,
            "h": 0.22487477958202362,
            "z": 1
        },
        {
            "id": "12765",
            "x": 0,
            "y": 0,
            "w": 1,
            "h": 1,
            "z": 0
        }
    ],
    "ts": 1557912915889,
    "ver": "20161227",
    "canvas": {
        "w": 352,
        "h": 640,
        "bgrgb": [
            80,
            80,
            80
        ]
    }
}

字段说明
mid -- 主播用户ID
pos -- 定义视频合屏中各用户的布局位置信息
          -- 数组 -- 其中,各参数如下:
          -- id : 用户ID
          -- x, y : 在合屏上的 左上坐标位置
          -- 取值范围 0 ~ 1
          -- w,h : 在合屏上的 其视频 宽/高
          -- 取值范围 0 ~ 1
          -- z : 叠放次序,值越大,叠放次序越高
ts    -- 时戳
ver  – 版本号信息
canvas – 合屏的总画布参数
          – w : 宽
          – h : 高
          – bgrgb : 画布背景色
						
 
将某人踢出房间(kickOut)
Client kickOut(userid)

将某人踢出房间

名称 描述
userId 要踢出人的id.
注:只有主播有此权限。其可以踢出副播或观众
 
订阅远程音视频流(subscribe)
Client subscribe(stream, onSuccess, onFailure)

订阅远程音视频流

名称 描述
stream 订阅流的对象
onSuccess 成功回调:参数为stream对象
注:此流为可播放流对象
onFailure 失败回调:参数为失败原因

注:订阅远端流是让远端音视频流发送到本地,此时本地就可以播放了。

 
取消订阅远程音视频流(unsubscribe)
Client unsubscribe(stream, onSuccess, onFailure))

取消订阅远程音视频流

名称 描述
stream 要取消订阅流的对象
onSuccess 成功回调:参数为stream对象
onFailure 失败回调:参数为失败原因

注:此函数调用后远端流将不再向你推送。

 
静音(pauseMic)
Client pauseMic()

静音

名称 描述
参数

注:此函数调用自己的音频流将不再向服务器发送,这样其他人都将听不见你。

 
取消静音(resumeMic)
	Client resumeMic()

取消静音

名称 描述
参数

注:与取消订阅执行相反的操作

 
禁视频(pauseWebcam)
Client pauseWebcam()

禁视频

名称 描述
参数
 
取消禁视频(resumeWebcam)
Client resumeWebcam()

取消禁视频

名称 描述
参数
 
关闭链接 (close)
Client close()

关闭链接

名称 描述
参数
 
流初始化(init)
Stream init(onSuccess, onFailure)

流初始化

名称 描述
onSuccess 成功回调
onFailure 失败回调

当stream create完成后,需要调用init方法将本地流真正初始化完成。

 
获取音视频流 ID(getId)
Stream getId()

获取音视频流 ID

名称 描述
返回值:string stream id.
注: 此 Id 和peerId一致。
 
获得本地音频的音量(getAudioLevel)
Stream getAudioLevel()

获得本地当前的声音的音量

名称 描述
返回值:int 当前的声音的音量
数值:0 到 10之间
 
检查本地流是否包含视频(hasVideo)
Stream hasVideo()

检查本地流是否包含视频

名称 描述
返回值:Boolean true包含,false不包含
 
检查本地流是否包含音频(hasAudio)
Stream hasAudio()

检查本地流是否包含音频

名称 描述
返回值:Boolean true包含,false不包含
 
禁用视频轨道(disableVideo)
Stream disableVideo()

禁用本地视频轨道

名称 描述
参数
 
启用本地视频轨道(enableVideo)
Stream enableVideo()

启用视频轨道

名称 描述
参数
 
禁用本地音频轨道(disableAudio)
Stream disableAudio()

禁用本地音频轨道


名称 描述
参数
 
启用本地音频轨道(enableAudio)
Stream enableAudio()

启用音频轨道

名称 描述
参数
 
设置视频属性(setVideoProfile)
public int setVideoProfile(videoProfile, onSuccess, onFailure)

设置视频属性

名称 描述
videoProfile 视频属性(Profile)字符串。详见下表的定义。
onSuccess 成功回调。
onFailure 失败回调。

视频属性定义

视频属性 分辨率(宽x高) 帧率(fps) 码率(bps)
120P 160*120 15 65*1000
180P 320*180 15 140*1000
240P 320*240 15 200*1000
360P 640*360 15 400*1000
480P 640*480 15 500*1000
720P 1280*720 15 1130*1000
1080P 1920*1080 15 2080*1000
 
获取视频属性(getVideoProfile)
Stream getVideoProfile()

获取视频属性

名称 描述
object 获取视频属性.
{
	aspectRatio: {number},
	deviceId: {string},
	facingMode: {string},
	frameRate: {number},
	groupId: {string},
	height: {number},
	resizeMode: {string},
	width: {number}
}

例如:
{
	aspectRatio: 1.3333333333333333
	deviceId: "2079af9efddcff53e42675c3fcde75b95127a6fdf6cdb66f47ba65a5da80b907"
	facingMode: "user"
	frameRate: 15
	groupId: "47e23a42c695644af56be8a13899017decd9eb7c543eb3f7a11fba0bd38abf0c"
	height: 480
	resizeMode: "crop-and-scale"
	width: 640
}
				
 
播放音视频 (play)
Stream play(elementID)

播放音视频流

名称 描述
参数 elementID. video tag id
 
关闭本地音视频流(close)
Stream close()

关闭本地音视频流

名称 描述
参数

 

 

 

API回调

事件

peer peer-join
peer peer-leave
stream audio-mute
stream audio-unmute
stream video-mute
stream video-unmute
peer disconnected
stream stream-added
stream stream-published
stream stream-unpublished
stream screen-published
stream screen-unpublished
stream stream-subscribed
stream stream-unsubscribed
peer kickout
stream screen-close
event speaking
event volume-change
event stopped-speaking

函数说明

 
用户加入(peer-join)
Client peer-join

用户加入

名称 描述
object {userID: 'userid'}
peer 对象为:{userID: 'userid'}.
 
用户离开(peer-leave)
Client peer-leave

用户离开

名称 描述
object {userID: 'userid', streams: 'map of streams'}
 
用户流加入(stream-added)
Client stream-added

用户流加入

名称 描述
object event. {stream: streamObj}
	
		client.on('stream-added', function (evt) {
			let stream = evt.stream;
			stream.play(id)
			//...
		}
	
 
用户音频禁音(audio-mute)
Client audio-mute

用户音频禁音

名称 描述
object event. {stream: streamObj}

	client.on('audio-mute', function (evt) {
		let stream = evt.stream;
		let uid = stream.getId();
		//...
	}
 
取消用户音频禁音(audio-unmute)
Client audio-unmute

取消用户音频禁音

名称 描述
object event. {stream: streamObj}

示例代码


	client.on('audio-unmute', function (evt) {
		let stream = evt.stream;
		let uid = stream.getId();
		//...
	}
 
用户禁视频(video-mute)
Client video-mute

用户禁视频

名称 描述
object event. {stream: streamObj}

示例代码


	client.on('video-mute', function (evt) {
		let stream = evt.stream;
		let uid = stream.getId();
		//...
	}
 
取消用户禁视频(video-unmute)
Client video-unmute

取消用户禁视频

名称 描述
object event. {stream: streamObj}

示例代码

	
		client.on('video-unmute', function (evt) {
			let stream = evt.stream;
			let uid = stream.getId();
			//...
		}
	
 
用户音视频流订阅成功(stream-subscribed)
Client stream-subscribed

用户音视频流订阅成功

名称 描述
object event. {stream: streamObj}

示例代码

		
			client.on('stream-subscribed', function (evt) {
				let stream = evt.stream;
				stream.play('video-tag');
				//...
			}
		
 
取消用户音频流订阅(stream-unsubscribed)
Client stream-unsubscribed

取消用户音频流订阅

名称 描述
object event. {stream: streamObj}

示例代码

			
				client.on('stream-unsubscribed', function (evt) {
					let stream = evt.stream;
					//...
				}
			
 
用户音频流发布流成功(stream-published)
Client stream-published

用户音频流发布流成功

名称 描述
object event. {stream: streamObj}

示例代码

			
				client.on('stream-published', function (evt) {
					let stream = evt.stream;
					//...
				}
			
 
取消用户音频流发布成功(stream-unpublished)
Client stream-unpublished

取消用户音频流发布成功

名称 描述
object event. {stream: streamObj}

示例代码

			
				client.on('stream-unpublished', function (evt) {
					let stream = evt.stream;
					//...
				}
			
 
用户屏幕流发布成功(screen-published)
Client screen-published

用户屏幕流发布成功

名称 描述
object event. {stream: streamObj}

示例代码

			
				client.on('screen-published', function (evt) {
					let stream = evt.stream;
					//...
				}
			
 
取消用户屏幕流发布成功(screen-unpublished)
Client screen-unpublished

取消用户屏幕流发布成功

名称 描述
object event. {stream: streamObj}
			
				client.on('screen-unpublished', function (evt) {
					let stream = evt.stream;
					//...
				}
			
 
自己被踢(kickout)
Client kickout

自己被踢

名称 描述
参数 {code: 'number', reasion: 'reasion message'}
1: 重复登录。
2: 主播退出。
3: 被主播踢出房间
 
断开和服务端的链接(disconnected)
Client disconnected

断开和服务端的链接

名称 描述
参数

服务器断开连接. 1: 可能是网络连接断开了;2:被踢出房间后。

 
屏幕流关闭(screen-close)
Stream screen-close

屏幕流关闭

名称 描述
object event. {stream: stream}

当用户点击停止屏幕共享按钮时将触发这个事件.

 
有端上用户正在发言(speaking)
Stream speaking

端上用户正在发言

名称 描述
object event. {userID: userID} userID为正在发言的用户ID.
 
端上用户音量变化(volume-change)
Stream volume-change

端上用户音量变化

名称 描述
object event. {userID: userID} userID为正在发言的用户ID.
 
端上用户停止发言(stopped-speaking)
Stream stopped-speaking

端上用户停止发言

名称 描述
object event. {userID: userID} userID端上停止发言的用户ID.