[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表示成功。