[TOC]
# **实时通信**
## Join 加入房间
**加入房间**
1.接口说明
网络服务注册,只有注册过后才能使用后续网络服务(例如实时语音对话等)。该API是异步实现,是否注册成功需要在JoinResult回调函数中获得结果。 调用该API之后肯定会触发JoinResult回调函数(需要先注册回调)。
2.函数原型
`int Join(string appID, string appKey, string userID, string roomID, Mode mode);`
* 参数说明:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| appID | string | 用于Lark服务鉴权, Lark分配的appid |
| appKey | string | Lark平台分配的appkey |
| userID | string | 玩家唯一的身份标识 |
| roomID| string | 房间ID,只有相同房间的人才能进行互相通讯 |
| mode | Mode | mode设计分为主播模式(mode=Mode.MODE_ANCHOR)和听众模式(mode=MODE_AUDIENCE),听众只能收听语音不能发送语音,而主播既可以发送语音也可以收听语音 |
* Mode
| 类型 | 值 |
| --- | --- |
| MODE_ANCHOR | 1 |
| MODE_AUDIENCE | 2 |
3.示例代码
`client.Join("fef68f5cf1a1ad61", "95dc07bda45acba098b83f8ed29e460d", "1", "1", 1);`
4.返回值
错误返回错误码,0表示设置成功。
## JoinResult 加入房间异步结果
加入房间异步结果回调
1.接口说明
注册是否成功的回调事件,调用Join函数之后就会抛出该回调事件来通知是否注册成功。
2.函数原型
~~~
int SetJoinResultHandler(JoinResult result)
JoinResult:(void*)(int code)
~~~
3.示例代码
~~~
client.SetJoinResultHandler(HandleRegisterResult);
void HandleRegisterResult(int code) {
if (code == 0) {
Debug.Log("client.Register successful ");
} else {
Debug.Log("client.Register failed "+code);
}
}
~~~
## NetError 网络错误
**注册网络错误回调**
1.接口说明
注册网络错误回调函数。如若发生网络错误(例如 远程服务器关闭,被同名id挤下线, 客户端未连接网络等等),会抛出回调事件。
2.函数原型
~~~
int SetNetErrorHandler(NetError netError)
NetError:(void*)()
~~~
3.示例代码
~~~
void HandleNetError(){
UnityEngine.Debug.Log("Net Error");
}
client.SetNetErrorHandler(HandleNetError);
~~~
4.返回值
设置回调返回错误码,0表示设置成功。
## Exit 退出房间
**退出房间**
1.接口说明
退出房间,断开与所有人的实时通信,使用本地模式。
2.函数原型
`int Exit();`
3.示例代码
`client.Exit();`
4.返回值
错误返回错误码,0表示设置成功。
## StartSpeak 开始说话
**开始说话**
1.接口说明
开始说话,开启自己的麦克风,所有听自己的人都能听见此端语音
2.函数原型
`int StartSpeak();`
3.示例代码
`client.StartSpeak();`
4.返回值
错误返回错误码,0表示成功。
## StopSpeak 停止说话
**停止说话**
1.接口说明
停止说话,关闭自己的麦克风,不让别人听到此端的语音。
2.函数原型
`int StopSpeak();`
3.示例代码
`client.StopSpeak();`
4.返回值
错误返回错误码,0表示成功。
## Call 呼叫用户
**呼叫用户**
1.接口说明
呼叫某用户,并创建其声音流,初始化环境。 与想听的用户建立实时通信
2.函数原型
`int Call(string userid);`
* 参数说明:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| userid | string | 想要听的人的用户ID |
3.示例代码
`client.Call("1");`
4.返回值
返回唯一标识id,即想听对象的音频流id,失败为-1,其他成功
## Hangup 挂断
**挂断**
1.接口说明
挂断唯一标识id的对象,销毁其对应流环境,之后不与该用户通信。
2.函数原型
`int Hangup(int id);`
* 参数说明:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| id | int | 挂断不听的、唯一标识id的对象,释放资源 |
3.示例代码
`client.Hangup(1);`
4.返回值
错误返回错误码,0表示成功。
## StartListen 开始听某人声音
**开始听某人声音**
1.接口说明
需要先调用call,听别人说话,call将返回对象的唯一标识id,StartListen该id,必须保证双方的APPID与ROOMID相同才能互相连麦。
2.函数原型
`int StartListen(int id);`
* 参数说明:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| id | int | (听)唯一标识id的对象 |
3.示例代码
`client.StartListen(1);`
4.返回值
错误返回错误码,0表示成功。
## StopListen 停止听某人声音
**停止听某人声音**
1.接口说明
停止后可调用Hangup,用于释放资源,停止听对方说话,id为对方Call返回的唯一标识id。
2.函数原型
`int StopListen(int id);`
* 参数说明:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| id | int | (不听)唯一标识id的对象 |
3.示例代码
`client.StopListen(1);`
4.返回值
错误返回错误码,0则成功。
## SelfVad 人声检测
**注册自己人声检测回调**
1.接口说明
注册静音检测回调函数,init之后数据就会抛出,每60ms调用一次。
2.函数原型
~~~
int SetSelfVadHandler(SelfVad vadObverser)
SelfVad:(void*)(bool isSpeech)
~~~
* isSpeech: 0(此时未检测到人声)
* isSpeech: 1(检测到人声)
3.示例代码
~~~
client.SetSelfVadHandler(GetVad);
void GetVad(bool isSpeech){
UnityEngine.Debug.Log("isSpeech"+isSpeech);
}
~~~
4.返回值
错误返回错误码,0表示成功。
## OtherVad 其他用户人声检测
**注册其他用户人声检测回调**
1.接口说明
注册静音检测回调函数,init之后数据就会抛出,每60ms调用一次。
2.函数原型
~~~
int SetOtherVadHandler(OtherVad vadObverser)
OtherVad:(void*)(string userID, bool isSpeech)
~~~
* isSpeech: 0(此时未检测到人声)
* isSpeech: 1(检测到人声)
3.示例代码
~~~
client.SetOtherVadHandler(GetVad);
void GetVad(string userID,bool isSpeech){
UnityEngine.Debug.Log(userID+"isSpeech"+isSpeech);
}
~~~
4.返回值
错误返回错误码,0表示成功。