tencent cloud

文档反馈

网络音频流转发路由

最后更新时间:2023-04-27 17:28:08
    为方便 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
    本端不接受任何音频,相当于关闭房间内扬声器效果,此时参数 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。

    接口原型

    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
    联系我们

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

    技术支持

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

    7x24 电话支持