tencent cloud

文档反馈

自定义消息通道

最后更新时间: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 正在进行这个操作,无需再次调用。
    联系我们

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

    技术支持

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

    7x24 电话支持