一、使用场景
GME 用户自定义音频包附带消息功能可以让开发者在 GME 音频包中携带自定义消息,作为信令传递广播给同房间的人。
二、前提条件
·已开通实时语音服务:可参见 服务开通指引。
·已接入 GME SDK:包括核心接口和实时语音接口的接入,详情可参见 Native SDK 快速接入、Unity SDK 快速接入、Unreal SDK 快速接入。
三、使用限制
调用此接口需要在房间类型为标准及高清(ITMG_ROOM_TYPE_STANDARD 及 ITMG_ROOM_TYPE_HIGHQUALITY)的情况下,发送端需要打开麦克风,接收端需要打开扬声器。
四、接口原型
iOSAndroidUnity-(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表示房间不存在,建议检查房间号是否正确。
更多错误码请参见 错误码 文档。
七、示例代码
执行语句
iOSAndroidUnity-(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]; ; }}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)); } } });}
回调
iOSAndroidUnity-(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]; ; }}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;}
八、停止发送自定义消息
调用此接口停止发送自定义消息。
九、接口原型
iOSAndroidUnity-(int) StopSendCustomData;public abstract int StopSendCustomData();public abstract int StopSendCustomData();
十、返回值
如果接口返回1003代表已经操作了 StopSendCustomData,SDK 正在进行这个操作,无需再次调用。