有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
为方便 GME 开发者调试和接入腾讯云游戏多媒体引擎产品 API,本文为您介绍适用于 GME 自定义音频转发路由功能的使用参考文档。

使用场景

场景描述:2个好友组小队后,匹配了3个路人组了一个大队伍,需要实现听全队的声音,但只和小队的好友说话。
自定义音频路由功能可以实现。这里5个人都进入同一个语音房间,然后通过音频路由的接口设置,玩家可以设置只听见2人队伍的声音或者全房间的声音,也可以设置为说话只被2人队伍的人听到或者全房间的人听到。
音频规则距离:SetServerAudioRouteSendOperateType(AUDIO_ROUTE_SEND_WHITE_LIST,"2人队伍的list",ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE,"2人队伍的list"); 这样声音就只发送给list里面的人,且只接收3人队伍的声音。




前提条件

已开通实时语音服务:可参见 服务开通指引
已接入 GME SDK:包括核心接口和实时语音接口的接入,详情可参见 Native SDK 快速接入Unity SDK 快速接入Unreal SDK 快速接入
使用 GME 实时语音功能成功进入语音房间,并且打开了麦克风(EnableMic)、扬声器(EnableSpeaker)。

接入音频转发路由功能

设置音频转发规则

调用此接口设置音频转发规则,此接口在进房成功回调中调用,调用后此次进房生效,退房后失效。
注意
禁言功能 AddBlackList 为本端生效,优先级高于自定义音频路由。例如 A 通过 SetServerAudioRouteSendOperateType 设置了只听 B 说话,但是又调用了 AddBlackList 将B禁言,此时 A 将听不到 B 的声音。

接口原型

Unity
C++
Android
iOS
public abstract class ITMGRoom{
public abstract int SetServerAudioRouteSendOperateType(ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE Sendtype, string[] OpenIDforSend, ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE Recvtype, string[] OpenIDforRecv);
}
virtual int SetServerAudioRoute(ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE SendType, const char OpenIDforSend[][21], int OpenIDforSendSize, ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE RecvType,const char OpenIDforRecv[][21], int OpenIDforRecvSize) = 0;
public abstract int SetServerAudioRoute(ITMGContext.ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE sendType, ArrayList<String> SendList, ITMGContext.ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE recvType, ArrayList<String> RecvList);
-(int)SetServerAudioRouteSendOperateType:(ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE) Sendtype SendList:(NSArray *)OpenIDForSend RecvOperateType:(ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE) Recvtype RecvList:(NSArray *)OpenIDForRecv;

类型说明

ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE
设置发送音频规则,不同的规则填入后,会有不同的发送规则。
接收类型
效果
AUDIO_ROUTE_NOT_SEND_TO_ANYONE
本端音频上行发送到后台,但后台不转发给任何人,相当于将自己静音,此时参数 OpenIDForSend 无效,只需填 null
AUDIO_ROUTE_SEND_TO_ALL
本端音频上行将转发给所有人,此时参数 OpenIDForSend 无效,只需填 null
AUDIO_ROUTE_SEND_BLACK_LIST
本端音频上行将不转发给黑名单的人,黑名单由参数 OpenIDForSend 提供
AUDIO_ROUTE_SEND_WHITE_LIST
本端音频上行将只转发给白名单的人,白名单由参数 OpenIDForSend 提供
说明
如果类型传入 AUDIO_ROUTE_NOT_SEND_TO_ANYONE 以及 AUDIO_ROUTE_SEND_TO_ALL ,此时的参数 OpenIDForSend 不生效,只需要填 null。
如果类型传入 AUDIO_ROUTE_SEND_BLACK_LIST ,此时参数 OpenIDForSend 为黑名单列表,最多支持 10 个。
如果类型传入 AUDIO_ROUTE_SEND_WHITE_LIST ,此时参数 OpenIDForSend 为白名单列表,最多支持 10 个。
ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE
设置接收音频规则,不同的规则填入后,会有不同的接收规则。
接收类型
效果
AUDIO_ROUTE_NOT_RECV_FROM_ANYONE
本端不接受任何音频,相当于关闭房间内扬声器效果,此时参数 OpenIDforRecv 无效,只需填 null
AUDIO_ROUTE_RECV_FROM_ALL
本端接收所有人的音频,此时参数 OpenIDforRecv 无效,只需填 null
AUDIO_ROUTE_RECV_BLACK_LIST
本端不接收黑名单的人的音频声音,黑名单由参数 OpenIDforRecv 提供
AUDIO_ROUTE_RECV_WHITE_LIST
本端只接收白名单的人的音频声音,白名单由参数 OpenIDforRecv 提供
说明
如果类型传入 AUDIO_ROUTE_NOT_RECV_FROM_ANYONE 以及 AUDIO_ROUTE_RECV_FROM_ALL OpenIDForSend 不生效。
如果类型传入 AUDIO_ROUTE_RECV_BLACK_LIST ,此时参数 OpenIDForSend 为黑名单列表,最多支持 10 个。
如果类型传入 AUDIO_ROUTE_RECV_WHITE_LIST ,此时参数 OpenIDForSend 为白名单列表,最多支持 10 个。

返回值

接口返回值为 QAV_OK 则表示成功。
若回调返回 1004 表示参数错误,建议重新检查参数是否正确。
若回调返回 1001 表示重复操作。
若回调返回 1201 表示房间不存在,建议检查房间号是否正确。
若回调返回 10001 以及 1005 ,建议重新调用接口一次。
更多返回结果解释详情请参见 错误码

示例代码

执行语句
@synthesize _sendListArray;
@synthesize _recvListArray;

int ret = [[[ITMGContext GetInstance] GetRoom] SetServerAudioRouteSendOperateType:SendType SendList:_sendListArray RecvOperateType:RecvType RecvList:_recvListArray];
if (ret != QAV_OK) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"更新audioroute列表失败" message:[NSString stringWithFormat:@"错误码:%d",ret] delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
回调
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{
NSString* log =[NSString stringWithFormat:@"OnEvent:%d,data:%@", (int)eventType, data];
switch (eventType) {
case ITMG_MAIN_EVENT_TYPE_SERVER_AUDIO_ROUTE_EVENT:{
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"更新audioroute" message:[NSString stringWithFormat:@"结果:%@,sub_type: %@ errorinof: %@", data[@"result"],data[@"sub_type"],data[@"error_info"]] delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
default:
break;
}
}

获取音频设置转发规则

调用此接口获取音频转发规则。调用后接口返回规则,传入的数组参数会返回相应规则的 openId。

接口原型

Unity
iOS
public abstract ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE GetCurrentSendAudioRoute(List<string> OpenIDforSend);
public abstract ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE GetCurrentRecvAudioRoute(List<string> OpenIDforRecve);
-(ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE)GetCurrentSendAudioRoute:(NSMutableArray *) OpenIDForSend;
-(ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE)GetCurrentRecvAudioRoute:(NSMutableArray *) OpenIDForRecv;

返回规则

ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE
接收类型
效果
AUDIO_ROUTE_NOT_SEND_TO_ANYONE
本端音频上行发送到后台,但后台不转发给任何人,相当于将自己静音
AUDIO_ROUTE_SEND_TO_ALL
本端音频上行将转发给所有人
AUDIO_ROUTE_SEND_BLACK_LIST
本端音频上行将不转发给黑名单的人
AUDIO_ROUTE_SEND_WHITE_LIST
本端音频上行将只转发给白名单的人
AUDIO_ROUTE_RECV_INQUIRE_ERROR
获取出错,检查是否进入房间,是否已经初始化 SDK
ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE
接收类型
效果
AUDIO_ROUTE_NOT_RECV_FROM_ANYONE
本端不接受任何音频,相当于关闭房间内扬声器效果
AUDIO_ROUTE_RECV_FROM_ALL
本端接收所有人的音频
AUDIO_ROUTE_RECV_BLACK_LIST
本端不接收黑名单的人的音频声音
AUDIO_ROUTE_RECV_WHITE_LIST
本端只接收白名单的人的音频声音
AUDIO_ROUTE_RECV_INQUIRE_ERROR
获取出错,检查是否进入房间,是否已经初始化 SDK
注意
SetServerAudioRouteSendOperateType 接口中请勿使用 AUDIO_ROUTE_RECV_INQUIRE_ERROR