入门必读
重要概念
房间
-
非即时房间: 使用本SDK之前,您需要使用 webapi 或 访问管理系统页面 来创建的房间。使用获得的房间号即可与同房间用户进行音视频和其他数据的交换了。
-
即时房间: 直接调用SDK接口,joinRoomEx ,同时可以进入房间进行音视频交互。
用户
- 使用网页、客户端或手机app皆可进入房间,每一个接入房间的客户端实例,我们称为一个用户。
音视频
- 每个具有可用的音视频采集设备的用户都可以单独发布自己的音频数据,也可以同时发布音视频数据。
使用指南
进出房间
-
调用joinroom 或者joinRoomEx接口加入房间。成功加入房间后,自己将收到事件 TK.EVENT_TYPE.roomConnected(加入房间成功事件),同时房间内的其他用户将会收到事件 TK.EVENT_TYPE.roomParticipantJoin(有用户加入房间事件)。
-
当需要离开房间时,您需要调用 leaveRoom 接口,离开房间成功后,您将收到事件 TK.EVENT_TYPE.roomLeaveRoom(离开房间事件),同时房间内其他用户将收到事件 TK.EVENT_TYPE.roomParticipantLeave(有用户离开房间事件)。
-
当遇到网络闪断等异常情况时,您也会收到事件 TK.EVENT_TYPE.roomDisconnected (房间连接中断事件)。在这种情况下,您需要做好项目的相关清除工作。
关于用户
-
每一个连接到房间内的客户端,被称为一个用户。用户的身份由userId来唯一标识。当您在调用 joinroom 接口时,如果传入一个userId,则本地用户的userId即为您设定的Id。如果没有传,则SDK会自动生成一个guid作为您的userId。但请注意,无论是哪种情况,系统不允许同一个房间内存在userId相等的两个用户。所以当您使用一个房间内已经存在的userId进入房间时,服务器会把之前使用这个id的用户请出房间。
-
除了userId外,每个用户还有一些其他属性(预定义的和自定义的),您可以使用 changeUserProperty 接口来修改任一用户的任一属性,并且可以指定把这项修改通知给哪个(些)用户(或者只包括自己)。随后,您指定的用户就会收到一个事件TK.EVENT_TYPE.roomUserPropertyChanged(用户属性改变),告知某个用户的某些属性被修改了。
音视频
-
您可以调用 publishVideo 和 publishAudio 接口来发布自己的音频和视频。一旦用户开始发布音、视频数据,房间内的所有用户都会收到事件 TK.EVENT_TYPE.roomUserAudioStateChanged 和 TK.EVENT_TYPE.roomUserVideoStateChanged。要注意的是,您不需要发布本地用户的视频,都可以随时调用 playVideo 观看自己的视频图像。如果您不想观看某个用户的视频,可以通过调用 unplayVideo 结束观看。
-
您可以调用 unpublishAudio 和 unpublishVideo 接口来取消发布自己的音频或视频。一旦用户将自己的音视频都取消发布,房间内的所有用户都会收到事件 TK.EVENT_TYPE.roomUserVideoStateChanged 和 TK.EVENT_TYPE.roomUserAudioStateChanged,这时您需要调用 unplayVideo 和 unplayAudio 取消观看别人的视频和收听别人的音频。
自定义信令
- 利用自定义信令接口,您可以完成您设计的各种业务流程,创造各种激动人心的用户体验。我们把各种信令都抽象成了消息,和用户类似,消息有自己的id和name,name可以和其他消息重名,但id必须在房间内唯一,id相同的消息,后来的会替换之前的。除了这两个属性,消息还有这些属性:
属性名 | 说明 |
---|---|
toId | 谁会接收到该消息的通知。可以填入目标用户的peerID(可以是自己),也可以填入预设身份集合,见消息发送角色 |
data | 数据(可存放各种数据结构,包括数字、字符串、Json) |
save | 是否保存。当为true时,服务器会在房间内保存该条消息,新进入的用户会收到该条消息。如果连续发两条id相同且需要保存的消息,服务器只会保存后一条。当为false时,服务器在转发完这条消息后,即将此消息抛弃 |
具体流程如下:
-
调用 pubMsg 接口发布一条消息,则所有指定用户将收到事件TK.EVENT_TYPE.roomPubmsg(自定义消息发布)
-
如果这条消息是指定保存的,则之后新进入房间的用户会收到事件TK.EVENT_TYPE.roomConnected(房间连接成功)的数据中带有当前服务器的所有保存的且未删除的消息数组。
-
在发布消息之后,可以再次调用 pubMsg 接口,发布一条相同id的消息来覆盖它,则指定用户会再次收到事件TK.EVENT_TYPE.roomPubmsg(房间自定义消息发布)
-
也可以调用 delMsg 接口来删除此消息,此时指定用户会收到事件TK.EVENT_TYPE.roomDelmsg(自定义消息删除)