游戏多媒体引擎 网络音频流转发路由

为方便 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 的声音。

四、接口原型

UnityC++AndroidiOSpublic 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 提供

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 提供

六、返回值

接口返回值为 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]; ;}

回调

-(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]; ; } } default: break; }}

八、获取音频设置转发规则

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

九、接口原型

UnityiOSpublic 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。

赞 (0)
上一篇 4天前
下一篇 4天前