tencent cloud

Game Multimedia Engine

製品アップデート情報
製品紹介
製品概要
優位性のある特徴
製品機能
ユースケース
セキュリティコンプライアンス認証
初心者ガイド
SDKダウンロードガイド
製品機能体験
基本機能Demo
シーン化体験
コンソールガイド
使用量の表示
サービスの有効化
クイックスタート
Quick Integration of SDK
Quick Integration of Sample Project
基本機能開発ガイド
Authentication Key
リアルタイム音声ロール設定
音質設定
拡張機能開発ガイド
サーバー側のレコーディング
レンジボイス
3Dサウンド
効果音と伴奏
ネットワークオーディオストリーム転送ルーティング
カスタムメッセージチャネル
社内ファイアーフォール制限への対応について
Language Parameter Reference List
GMEルーム管理機能の導入
クライアントAPI
SDK for Unity
SDK for Unreal Engine
Cocos2D SDK
SDK for Windows
SDK for iOS
SDK for Android
SDK for macOS
H5 SDK
Electron SDK
SDK for Flutter
SDK Version Upgrade Guide
エラーコード
Toolchain
Server APIs
History
Introduction
API Category
Usage APIs
Recording APIs
Making API Requests
Voice Chat APIs
Application APIs
Data Types
Error Codes
よくある質問
製品機能質問
問題解決ガイド
課金について
Sample Projectの使用上の問題
一般的な質問
認証について
リアルタイム音声ルーム参加失敗について
リアルタイム音声利用時に音声が聞こえない問題とオーディオ関連について
ネットワークについて
ボイス・ツー・テキスト変換について
プロジェクトエクスポートについて
Service Agreement
Service Level Agreement
お問い合わせ
用語集
GME ポリシー
データ処理とセキュリティ契約
プライバシーポリシー

カスタムメッセージチャネル

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-01-18 15:47:47
GME開発者がTencent Cloud GME製品APIのデバッグと導入を容易にするために、このドキュメントではGMEユーザーカスタマイズオーディオパックにメッセージが付属される機能の使用について紹介します。

シナリオ

GMEユーザーカスタムオーディオパックにメッセージ機能が付属することにより、開発者はGMEオーディオパックにカスタムメッセージを持ち運び、同室の人にブロードキャストするためのシグナリングとして機能することができます。

前提条件

リアルタイムボイスサービスを有効にしましたサービス有効化ガイドをご参照ください。
GME SDK導入済み:コアインターフェースとリアルタイム音声インターフェースの導入が含まれます。詳細については、Native SDKのクイック導入Unity SDKクイック導入Unreal SDKクイック導入をご参照ください。

使用制限

このインターフェースを呼び出すには、StandardおよびHigh-Definition(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
-(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_CUSTOMDATA_UPDATE: {
if (ITMG_CUSTOMDATA_AV_SUB_EVENT_UPDATE == ((NSNumber *)data[@"sub_type"]).intValue) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"customdata" message:[NSString stringWithFormat:@"内容:%@,from:%@ ",data[@"content"],data[@"senderid"]] delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
break;
}
}

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はその操作を実行中であり、再度呼び出す必要はありません。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック