tencent cloud

游戏多媒体引擎

产品动态
产品介绍
产品概述
优势特性
产品功能
应用场景
安全合规认证
新手指引
产品计费
免费额度
购买指南
SDK 下载指引
产品功能体验
基本功能演示
场景化 Demo 体验
控制台指南
用量查看
服务开通
快速入门
快速接入 SDK
快速接入 Sample Project
基础功能开发指南
鉴权密钥
实时语音角色设置
音质选择
进阶功能开发指南
服务端录制
万人范围语音
3D 音效
音效与伴奏
网络音频流转发路由
自定义消息通道
如何应对公司防火墙限制
语言参数参考列表
房间管理功能
客户端 API
Unity SDK
Unreal Engine SDK
Cocos2D SDK
Windows SDK
iOS SDK
Android SDK
macOS SDK
H5SDK
Electron SDK
Flutter SDK
SDK 版本升级指引
错误码
编译工具链文档
服务端 API
History
Introduction
API Category
Usage APIs
Recording APIs
Making API Requests
Voice Chat APIs
Application APIs
Data Types
Error Codes
常见问题
产品功能问题
问题解决指南
计费相关问题
Sample Project 使用问题
一般性问题
鉴权相关问题
实时语音进房失败问题
实时语音无声及音频问题
网络问题
语音转文本问题
工程导出问题
服务协议
服务等级协议
联系我们
词汇表
GME 政策
数据处理和安全协议
隐私协议

网络音频流转发路由

PDF
聚焦模式
字号
最后更新时间: 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

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈