tencent cloud

Game Multimedia Engine

GMEルーム管理機能の導入

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-01-18 15:47:47
ご注意:
GME 3.xバージョンは現在、ルーム管理機能をサポートしていません。
ここでは、開発者がルーム管理サービスに素早くアクセスできるように、ルーム管理サービスのユースケースとアクセスの流れについて紹介します。

機能の説明

クライアントルーム管理インターフェースにより、ルームメンバーの管理、ルームメンバーのマイクのオン・オフ管理を簡単に実現することができます。

シナリオ

例えば、人狼ゲームのシナリオでは、ホストとしてEnableMicで他のプレイヤーのマイクオンをコントロールできます。あるプレイヤーが「死亡」し、ルームの音声を聞いたりマイクを操作して話す必要がない場合、ForbidUserOperationインターフェースを介してそのプレイヤーのデバイス操作を禁止します。

前提条件

リアルタイム音声サービスが有効になっていること音声サービス有効化ガイドをご参照ください。
GME SDK導入済み:コアインターフェースとリアルタイム音声インターフェースの導入を含みます。詳細については、Native SDKクイックスタートUnity SDKクイックスタートUnreal SDKクイックスタートをご参照ください。
説明:
この機能はH5 SDKではサポートされていません。

導入プロセス

クラス名:ITMGRoomManager

GMEルーム管理機能は、ルームに入ってから呼び出し、ルーム内のメンバーの状態のみを変更できます。 すべてのインターフェースの結果はITMG_MAIN_EVNET_TYPE_ROOM_MANAGEMENT_OPERATORによってコールバックされます。コールバックの詳細については、コールバック処理をご参照ください。

インターフェースリスト

タイプ
インターフェース
収集制御
EnableMic、EnableAudioCaptureDevice、EnableAudioSend
再生制御
EnableSpeaker、EnableAudioPlayDevice、EnableAudioRecv
機器状態の取得
GetMicState、GetSpeakerState
敏感なインターフェース
ForbidUserOperation

収集管理の関連インターフェース

収集管理インターフェースには、マイク管理オーディオアップリンク管理および収集ハードウェアデバイス管理が含まれます。その中で、マイク管理は、オーディオアップリンク管理と収集ハードウェアデバイス管理に相当します。

収集管理

このインターフェースを呼び出して、ルームにいるユーザーのマイクをオンまたはオフにします。呼び出しが成功すると、そのユーザーのマイクはオフまたはオンになります。
EnableMicはEnableAudioSendとEnableAudioCaptureDeviceを同時に呼び出すことに相当します。

関数のプロトタイプ

Android
iOS
public abstract int EnableMic(boolean isEnabled,String receiverID);
-(QAVResult)EnableMic:(BOOL)enable Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定のユーザーのマイクをオンにします。NO:特定のユーザーのマイクをオフにします
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_MIC_OP。

オーディオストリーム送信管理

このインターフェースを呼び出して、ルーム内のユーザーのオーディオ上りをオンまたはオフにします。呼び出しが成功すると、そのユーザーのオーディオ上りはオフまたはオンになりますが、マイクの収集には影響しません。

関数のプロトタイプ

Android
iOS
public abstract int EnableAudioSend(boolean isEnabled,String receiverID);
-(QAVResult)EnableAudioSend:(BOOL)enable Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定のユーザーのアップリンクをオンにします。NO:特定のユーザーのアップリンクをオフにします
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_AUDIO_SEND_OP。

オーディオ収集ハードウェア管理

このインターフェースを呼び出して、ルーム内のユーザーのオーディオ収集ハードウェアデバイスをオンまたはオフにします。呼び出しが成功すると、そのユーザーのオーディオ収集ハードウェアデバイスはオフまたはオンになりますが、上りには影響しません。

関数のプロトタイプ

Android
iOS
public abstract int EnableAudioCaptureDevice(boolean isEnabled,String receiverID);
-(QAVResult)EnableAudioCaptureDevice:(BOOL)enabled Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定のユーザーのオーディオ収集ハードウェアデバイスをオンにします。NO:特定のユーザーのオーディオ収集ハードウェアデバイスをオフにします
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_CAPTURE_OP。

再生管理の関連インターフェース

再生管理インターフェイスには、スピーカー管理オーディオダウンストリーム管理および再生ハードウェアデバイス管理が含まれます。その中で、スピーカー管理は、オーディオダウンリンク管理と再生ハードウェアデバイス管理に相当します。

再生管理

このインターフェースを呼び出して、ルーム内のユーザーのスピーカーをオンまたはオフにします。呼び出しが成功すると、そのユーザーのスピーカーがオフまたはオンになり、室内のオーディオ音が聞こえるようになります。 EnableSpeakerはEnableAudioRecvとEnableAudioPlayDeviceを同時に呼び出すことに相当します。

関数のプロトタイプ

Android
iOS
public abstract int EnableSpeaker(boolean isEnabled,String receiverID);
-(QAVResult)EnableSpeaker:(BOOL)enable Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定のユーザーのスピーカーをオンにします。NO:特定のユーザーのスピーカーをオフにします
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_SPEAKER_OP。

オーディオストリーム受信管理

このインターフェースを呼び出して、ルーム内のユーザーのオーディオ下りをオンまたはオフにします。呼び出しが成功すると、そのユーザーのオーディオ下りはオフまたはオンになりますが、再生デバイスには影響しません。

関数のプロトタイプ

Android
iOS
public abstract int EnableAudioRecv(boolean isEnabled,String receiverID);
-(QAVResult)EnableAudioRecv:(BOOL)enabled Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定のユーザーのダウンリンクをオンにします。NO:特定のユーザーのダウンリンクをオフにします
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_AUDIO_REC_OP。

オーディオ再生ハードウェア管理

このインターフェースを呼び出して、ルーム内のユーザーのオーディオ再生ハードウェアデバイスをオンまたはオフにします。呼び出しが成功すると、そのユーザーのオーディオ再生ハードウェアデバイスがオフまたはオンになりますが、下りには影響しません。

関数のプロトタイプ

Android
iOS
public abstract int EnableAudioPlayDevice(boolean isEnabled,String receiverID);
-(QAVResult)EnableAudioPlayDevice:(BOOL)enabled Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定のユーザーのオーディオ再生ハードウェアデバイスをオンにします。NO:特定のユーザーのオーディオ再生ハードウェアデバイスをオフにします
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_PLAY_OP。

メンバー状態取得インターフェース

特定ユーザーの収集状態の取得

このインターフェースを呼び出して、ルーム内のメンバーのマイク状態を取得します。

関数のプロトタイプ

Android
iOS
public abstract int GetMicState(String receiverID);
-(QAVResult)GetMicState:(NSString *)receiverID;
パラメータ
タイプ
意味
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_GET_MIC_STATE。

特定ユーザーの再生状態の取得

このインターフェースを呼び出して、ルーム内のメンバーのスピーカー状態を取得します。

関数のプロトタイプ

Android
iOS
public abstract int GetSpeakerState(String receiverID);
-(QAVResult)GetSpeakerState:(NSString *)receiverID;

コールバック

コールバックパラメータはITMG_ROOM_MANAGEMENT_GET_SPEAKER_STATE。

特定のメンバーによる収集および再生操作の禁止

メンバーがルームに入ると、デフォルトでマイクとスピーカーの操作が許可されます。このインターフェースを呼び出すと、ルームのメンバーがマイクとスピーカーを操作できなくなります。この機能は、メンバーがルームを出ると無効になります。
Android
iOS
public abstract int ForbidUserOperation(boolean isEnabled,String receiverID);
-(QAVResult)ForbidUserOperation:(BOOL)enable Receiver:(NSString *)receiverID;
パラメータ
タイプ
意味
enable
BOOL
YES:特定ユーザーによるデバイスの操作を禁止します。NO:特定ユーザーによるデバイスの操作を許可します
receiverID
NSString*
ターゲットユーザーOpenIdを入力します

コールバック

コールバックパラメータはITMG_ROOM_MANAGERMENT_FOBIN_OP。

コールバック処理

GMEの他のコールバックと同様に、ルーム管理のコールバックもOnEventで処理されます。イベント名はITMG_MAIN_EVNET_TYPE_ROOM_MANAGEMENT_OPERATORで、イベントは次のような構造体を返します。

コールバックパラメータ

パラメータ
タイプ
意味
SenderID
NSString
イベント送信者IDです。自身のOpenIdと同じ場合は、ローカルから送信されたコマンドです
ReceiverID
NSString
イベント受信者IDです。自身のOpenIdと同じ場合は、ローカルが受信したコマンドです
OperateType
NSNumber
イベントタイプ
Result
NSNumber
イベント結果です。0は成功を意味します
OperateValue
NSNumber
コマンドの詳細

OperateType

数値
イベントタイプ
意味
0
ITMG_ROOM_MANAGEMENT_CAPTURE_OP
収集デバイスのハードウェアコールバックの制御
1
ITMG_ROOM_MANAGEMENT_PLAY_OP
再生デバイスのハードウェアコールバックの制御
2
ITMG_ROOM_MANAGEMENT_AUDIO_SEND_OP
アップリンクコールバックの制御
3
ITMG_ROOM_MANAGEMENT_AUDIO_REC_OP
ダウンリンクコールバックの制御
4
ITMG_ROOM_MANAGEMENT_MIC_OP
マイクコールバックの制御
5
ITMG_ROOM_MANAGEMENT_PLAY_OP
スピーカーコールバックの制御
6
ITMG_ROOM_MANAGEMENT_GET_MIC_STATE
マイク状態の取得
7
ITMG_ROOM_MANAGEMENT_GET_SPEAKER_STATE
スピーカー状態の取得
8
ITMG_ROOM_MANAGERMENT_FOBIN_OP
マイクイベントとスピーカーイベントの操作を禁止します

OperateValue

メンバー
意味
boolValue
0:コマンドをオフにします。1:コマンドをオンにします

サンプルコード

Android
iOS
public void OnEvent(ITMGContext.ITMG_MAIN_EVENT_TYPE type, Intent data) {
if (ITMGContext.ITMG_MAIN_EVENT_TYPE.ITMG_MAIN_EVNET_TYPE_ROOM_MANAGEMENT_OPERATOR== type) {

ArrayList<String> operatorArr = new ArrayList<String>();
operatorArr.add("収集");
operatorArr.add("再生");
operatorArr.add("上り");
operatorArr.add("下り");
operatorArr.add("上り収集");
operatorArr.add("下り再生");
operatorArr.add("mic状態");
operatorArr.add("spk状態");
operatorArr.add("mic/speak操作禁止");

String SenderID = data.getStringExtra("SenderID");
String ReceiverID = data.getStringExtra("ReceiverID");
int OperateType = data.getIntExtra("OperateType",-1000);

int Result =data.getIntExtra("Result",-1000);
boolean OperateValue = data.getBooleanExtra("OperateValue",false);
if (OperateType == -1000 ||Result == -1000) {
return;
}
if (SenderID.equals(identifier)) {
if (OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_GET_MIC_STATE || OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_GET_SPEAKER_STATE) {
Toast.makeText(getActivity(), String.format("id:%sへの%s操作、結果:%s", ReceiverID, operatorArr.get(OperateType), OperateValue ? "オン" : "オフ"), Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getActivity(), String.format("id:%sへの%s%s操作、結果:%d", ReceiverID, operatorArr.get(OperateType), OperateValue ? "オン" : "オフ", Result), Toast.LENGTH_LONG).show();
}

} else if (ReceiverID.equals(identifier)||ReceiverID.equals("ALL")) {
if (Result == 0) {
switch (OperateType) {
case ITMGContext.ITMG_ROOM_MANAGEMENT_CAPTURE_OP:
{
if (!OperateValue) {
mSwitchCapture.setChecked(OperateValue);
}else{
AlertDialog.Builder dialog = new AlertDialog.Builder (getActivity()); //オブジェクト作成
dialog.setTitle("機器収集をオンにしますか");
dialog.setMessage("");
dialog.setCancelable(false);
dialog.setPositiveButton("オン", new DialogInterface.OnClickListener() {
//OKボタンのクリックイベントを設定
@Override
public void onClick(DialogInterface dialog, int which) {
mSwitchCapture.setChecked(true);
ITMGContext.GetInstance(getActivity()).GetAudioCtrl().EnableAudioCaptureDevice(true);
}
});
dialog.setNegativeButton("オフ", new DialogInterface.OnClickListener() {
//キャンセルボタンのクリックイベントを設定
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}

}
break;
case ITMGContext.ITMG_ROOM_MANAGEMENT_PLAY_OP:
{
mSwitchPlayDevice.setChecked(OperateValue);
}
break;
case ITMGContext.ITMG_ROOM_MANAGEMENT_AUDIO_SEND_OP:
{
if (!OperateValue) {
mSwitchSend.setChecked(OperateValue);
}else{
AlertDialog.Builder dialog = new AlertDialog.Builder (getActivity()); //オブジェクト作成
dialog.setTitle("上りをオンにしますか");
dialog.setMessage("");
dialog.setCancelable(false);
dialog.setPositiveButton("オン", new DialogInterface.OnClickListener() {
//OKボタンのクリックイベントを設定
@Override
public void onClick(DialogInterface dialog, int which) {
mSwitchSend.setChecked(true);
ITMGContext.GetInstance(getActivity()).GetAudioCtrl().EnableAudioSend(true);
}
});
dialog.setNegativeButton("オフ", new DialogInterface.OnClickListener() {
//キャンセルボタンのクリックイベントを設定
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
}
break;
case ITMGContext.ITMG_ROOM_MANAGEMENT_AUDIO_REC_OP:
{
mSwitchRecv.setChecked(OperateValue);
}
break;
case ITMGContext.ITMG_ROOM_MANAGEMENT_MIC_OP:
{
if (!OperateValue) {
mSwitchCapture.setChecked(OperateValue);
mSwitchSend.setChecked(OperateValue);
}else{
AlertDialog.Builder dialog = new AlertDialog.Builder (getActivity()); //オブジェクト作成
dialog.setTitle("収集と上りをオンにしますか");
dialog.setMessage("");
dialog.setCancelable(false);
dialog.setPositiveButton("オン", new DialogInterface.OnClickListener() {
//OKボタンのクリックイベントを設定
@Override
public void onClick(DialogInterface dialog, int which) {
mSwitchCapture.setChecked(true);
mSwitchSend.setChecked(true);
ITMGContext.GetInstance(getActivity()).GetAudioCtrl().EnableMic(true);
}
});
dialog.setNegativeButton("オフ", new DialogInterface.OnClickListener() {
//キャンセルボタンのクリックイベントを設定
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
}
break;
case ITMGContext.ITMG_ROOM_MANAGEMENT_SPEAKER_OP:
{
mSwitchPlayDevice.setChecked(OperateValue);
mSwitchRecv.setChecked(OperateValue);
}
break;

}
}
if (OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_GET_MIC_STATE || OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_GET_SPEAKER_STATE)
{
Toast.makeText(getActivity(), String.format("id:%sからの%s操作、結果:%s",SenderID,operatorArr.get(OperateType),OperateValue?"オン":"オフ"), Toast.LENGTH_LONG).show();
}
else if (OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_SPEAKER_OP || OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_AUDIO_REC_OP|| OperateType == ITMGContext.ITMG_ROOM_MANAGEMENT_PLAY_OP|| OperateType == ITMGContext.ITMG_ROOM_MANAGERMENT_FOBIN_OP){
Toast.makeText(getActivity(), String.format("id:%sからの%s%s操作、結果:%d",SenderID,operatorArr.get(OperateType),OperateValue?"オン":"オフ",Result), Toast.LENGTH_LONG).show();
} else if (OperateValue == false) {
Toast.makeText(getActivity(), String.format("id:%sからの%s%s操作、結果:%d",SenderID,operatorArr.get(OperateType),OperateValue?"オン":"オフ",Result), Toast.LENGTH_LONG).show();
}
}
}
-(void)OnEvent:(ITMG_MAIN_EVENT_TYPE)eventType data:(NSDictionary *)data{
NSString *log = [NSString stringWithFormat:@"OnEvent:%d,data:%@", (int)eventType, data];
[self showLog:log];
NSLog(@"====%@====", log);
switch (eventType) {
case ITMG_MAIN_EVNET_TYPE_ROOM_MANAGEMENT_OPERATOR:
{
NSArray *operatorArr = @[@"収集",@"再生",@"上り",@"下り",@"上り収集",@"下り再生",@"メンバー追放",@"mic状態",@"spk状態",@"禁止操作mic/speak"];
// _openId
NSString *SenderID = [data objectForKey:@"SenderID"];
NSString *ReceiverID = [data objectForKey:@"ReceiverID"];
NSNumber *OperateType = [data objectForKey:@"OperateType"];
NSNumber *Result = [data objectForKey:@"Result"];
NSNumber *OperateValue = [data objectForKey:@"OperateValue"];

///自分が出したコマンド
if ([SenderID isEqualToString:_openId]) {
if (OperateType.intValue == ITMG_ROOM_MANAGEMENT_GET_MIC_STATE || OperateType.intValue == ITMG_ROOM_MANAGEMENT_GET_SPEAKER_STATE) {
NSString *alterString = [NSString stringWithFormat:@"id:%@への%@操作、結果:%@",ReceiverID,operatorArr[OperateType.intValue],OperateValue.boolValue?@"オン":@"オフ"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ルーム管理操作" message:alterString delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
else
{
NSString *alterString = [NSString stringWithFormat:@"id:%@への%@%@操作、結果:%@",ReceiverID,OperateValue.boolValue?@"オン":@"オフ",operatorArr[OperateType.intValue],Result];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ルーム管理操作" message:alterString delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}


}
else if([ReceiverID isEqualToString:_openId] ){ //他人からのコマンド
if (Result.intValue == 0) {
switch (OperateType.intValue) {
case ITMG_ROOM_MANAGEMENT_CAPTURE_OP:{
[_micSwitch setOn:OperateValue.boolValue animated:true];
}
break;
case ITMG_ROOM_MANAGEMENT_PLAY_OP:{
[_speakerSwitch setOn:OperateValue.boolValue animated:true];
}
break;
case ITMG_ROOM_MANAGEMENT_AUDIO_SEND_OP:{
[_sendSwitch setOn:OperateValue.boolValue animated:true];
}
break;
case ITMG_ROOM_MANAGEMENT_AUDIO_REC_OP:{
[_recvSwitch setOn:OperateValue.boolValue animated:true];
}
break;
case ITMG_ROOM_MANAGEMENT_MIC_OP:{
[_micSwitch setOn:OperateValue.boolValue animated:true];
[_sendSwitch setOn:OperateValue.boolValue animated:true];
}
break;
case ITMG_ROOM_MANAGEMENT_SPEAKER_OP:{
[_speakerSwitch setOn:OperateValue.boolValue animated:true];
[_recvSwitch setOn:OperateValue.boolValue animated:true];

}
break;
default:
break;
}

if (OperateType.intValue == ITMG_ROOM_MANAGEMENT_GET_MIC_STATE || OperateType.intValue == ITMG_ROOM_MANAGEMENT_GET_SPEAKER_STATE) {
NSString *alterString = [NSString stringWithFormat:@"id:%@からの%@操作、結果:%@",SenderID,operatorArr[OperateType.intValue],OperateValue.boolValue?@"オン":@"オフ"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ルーム管理操作" message:alterString delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
else{
NSString *alterString = [NSString stringWithFormat:@"id:%@からの%@%@操作、結果:%@",SenderID,OperateValue.boolValue?@"オン":@"オフ",operatorArr[OperateType.intValue],Result];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ルーム管理操作" message:alterString delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
}
}
break;
}


ヘルプとサポート

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

フィードバック