tencent cloud

文档反馈

自定义音频转发路由

最后更新时间:2022-06-08 16:42:32

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

    设置音频转发规则

    调用此接口设置音频转发规则,此接口在进房成功回调中调用,调用后此次进房生效,退房后失效。

    注意

    禁言功能 AddBlackList 为本端生效,优先级高于自定义音频路由。例如 A 通过 SetServerAudioRouteSendOperateType 设置了只听 B 说话,但是又调用了 AddBlackList 将B禁言,此时 A 将听不到 B 的声音。

    使用前提

    使用 GME 实时语音功能成功进入语音房间,并且打开了麦克风(EnableMic)、扬声器(EnableSpeaker)。

    接口原型

    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)
    ;
    }

    类型说明

    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 本端不接受任何音频,相当于关闭房间内扬声器效果,此时参数 OpenIDForSend 无效,只需填 null
    AUDIO_ROUTE_RECV_FROM_ALL 本端接收所有人的音频,此时参数 OpenIDForSend 无效,只需填 null
    AUDIO_ROUTE_RECV_BLACK_LIST 本端不接收黑名单的人的音频声音,黑名单由参数 OpenIDForSend 提供
    AUDIO_ROUTE_RECV_WHITE_LIST 本端只接收白名单的人的音频声音,白名单由参数 OpenIDForSend 提供
    说明:

    • 如果类型传入 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。

    接口原型

    //iOS接口
    -(ITMG_SERVER_AUDIO_ROUTE_SEND_TYPE)GetCurrentSendAudioRoute:(NSMutableArray *) OpenIDForSend;
    -(ITMG_SERVER_AUDIO_ROUTE_RECV_TYPE)GetCurrentRecvAudioRoute:(NSMutableArray *)OpenIDForRecv;
    //Unity接口
    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

    接收类型 效果
    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

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持