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:31:09
为方便 GME 开发者调试和接入腾讯云游戏多媒体引擎产品 API,本文为您介绍适用于 GME 用户自定义音频包附带消息功能的使用指引。

使用场景

GME 用户自定义音频包附带消息功能可以让开发者在 GME 音频包中携带自定义消息,作为信令传递广播给同房间的人。

前提条件

已开通实时语音服务:可参见 服务开通指引
已接入 GME SDK:包括核心接口和实时语音接口的接入,详情可参见 Native SDK 快速接入Unity SDK 快速接入Unreal SDK 快速接入

使用限制

调用此接口需要在房间类型为标准及高清(ITMG_ROOM_TYPE_STANDARD 及 ITMG_ROOM_TYPE_HIGHQUALITY)的情况下,发送端需要打开麦克风,接收端需要打开扬声器。

自定义消息功能接入

发送自定义消息

接口原型

iOS
Android
Unity
-(int) SendCustomData:(NSData *)data repeatCout:(int)reaptCout;
public abstract int SendCustomData(byte[] data,int repeatCout);
public abstract int SendCustomData(byte[] customdata,int repeatCout);

参数说明

参数
类型
含义
data
NSData * 、byte[]
需要传递的信息
reaptCout
int
重复次数,填入-1为无限次重复发送

返回值

接口返回值为 QAV_OK 则表示成功。
回调返回1004表示参数错误,建议重新检查参数是否正确。返回1201表示房间不存在,建议检查房间号是否正确。
更多错误码请参见 错误码 文档。

示例代码

执行语句
iOS
Android
Unity
-(IBAction)SendCustData:(UIButton*)sender {
int ret = 0;
NSString *typeString;
switch (sender.tag) {
case 1:
ret = [[[ITMGContext GetInstance] GetRoom] SendCustomData:[NSData dataWithBytes:_shareRoomID.text.UTF8String length:_roomIdText.text.length] repeatCout:_shareOpenID.text.intValue];
typeString = @"sendCustData";
break;
case 2:
ret = [[[ITMGContext GetInstance] GetRoom] StopSendCustomData];
typeString = @"recvCustData";
break;
default:
break;
}
if(ret != 0) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"set fail" message:[NSString stringWithFormat:@"%@:errorcode :%d",typeString,ret] delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
String strData = mEditData.getText().toString();
String repeatCount = mEditRepeatCount.getText().toString();
int nRet = ITMGContext.GetInstance(getActivity()).GetRoom().SendCustomData(strData.getBytes(), Integer.parseInt(repeatCount));

InputField SendCustom_Count_InputField = transform.Find("inroomPanel/imPanel/SendCustom_Count_InputField").GetComponent<InputField>();
InputField SendCustom_Data_InputField = transform.Find("inroomPanel/imPanel/SendCustom_Data_InputField").GetComponent<InputField>();

transform.Find("inroomPanel/imPanel/SendCustom_Btn").GetComponent<Button>().onClick.AddListener(delegate ()
{
string data = SendCustom_Data_InputField.text;
string str_count = SendCustom_Count_InputField.text;
int count = 0;
if (int.TryParse(str_count, out count)) {
Debug.Log(data+ count.ToString());
byte[] byteData = Encoding.Default.GetBytes(data);
int ret = ITMGContext.GetInstance().GetRoom().SendCustomData(byteData, count);
if(ret != 0 ) {
ShowWarnning(string.Format("send customdata failed err:{0}",ret));
}
}
});
}
回调
iOS
Android
Unity
-(IBAction)SendCustData:(UIButton*)sender {
    int ret = ret = [[[ITMGContext GetInstance] GetRoom] SendCustomData:[NSData dataWithBytes:dataInput_textfiled_.text.UTF8String length:dataInput_textfiled_.text.length] repeatCout:-1];

    if(ret != 0) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"set fail" message:[NSString stringWithFormat:@"SendCustomData:errorcode :%d",ret] delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
}
if (ITMGContext.ITMG_MAIN_EVENT_TYPE.ITMG_MAIN_EVENT_TYPE_CUSTOMDATA_UPDATE == type) {
int subtype = data.getIntExtra("sub_event",-1);
if (subtype == 0) {
String content = data.getStringExtra("content");
String sender = data.getStringExtra("senderid");
Toast.makeText(getActivity(), String.format("recv content =%s, from:%s", content,
sender), Toast.LENGTH_SHORT).show();
}
void OnEvent(int eventType,int subEventType,string data)
{
Debug.Log (data);
switch (eventType) {
case (int)ITMG_MAIN_EVENT_TYPE.ITMG_MAIN_EVENT_TYPE_CUSTOMDATA_UPDATE:
{
if(subEventType == (int)ITMG_CUSTOMDATA_SUB_EVENT.ITMG_CUSTOMDATA_AV_SUB_EVENT_UPDATE) {
_customData = JsonUtility.FromJson<CustomDataInfo>(data);
ShowWarnning(string.Format("recve customdata {0} from {1}",_customData.content,_customData.senderid));
}
}
break;
}

停止发送自定义消息

调用此接口停止发送自定义消息。

接口原型

iOS
Android
Unity
-(int) StopSendCustomData;
public abstract int StopSendCustomData();
public abstract int StopSendCustomData();

返回值

如果接口返回1003代表已经操作了 StopSendCustomData,SDK 正在进行这个操作,无需再次调用。

帮助和支持

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

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

文档反馈