今回はオンラインカラオケアプリで利用できそうなリクエストごとにマイクのON/OFFをコントロールするサンプルをご紹介します。
概要としては、マイクコントロール役のホスト側、マイクをリクエストするオーディエンス側に分かれ、オーディエンス側がマイクONのリクエストメッセージを送信し、それを受信したホスト側が許可メッセージを送信後、許可を受けたオーディエンス側のマイクがON
になるというものです。
本サンプルは、Agora.ioから提供されているVoiceSDK、Real-time MessagingSDKを組み合わせて実現しています。
マイクのリクエスト時メッセージ処理は、agora.io Real-time Messaging SDKで実装します。
マイクのON/OFFは、agora.io VoiceSDKで実装します。
[ホスト側/オーディエンス側共通]
・ログインとログアウト
・チャネルへの入室と退室
・ホストとオーディエンスの選択
・音質の設定
[ホスト側]
・オーディエンス拠点からのマイクリクエストの取得
・オーディエンス拠点へのマイク許可
・自拠点(ホスト)のマイクON/OFF
[オーディエンス側]
・ホスト側へのマイクリクエスト送信
・ホスト側から許可された場合のマイクON/OFF
・Android Studio(Java)
・Agora.io VoiceSDK
・Real-time Messaging SDK
Agora.io Real-time Messaging SDKでログインし、メッセージをやりとり(マイクのリクエスト時メッセージ処理)するサンプルです。
本サンプルでのメッセージのやりとり(マイクのリクエスト時メッセージ処理)は、下図のようなイメージです。
mRtmClient = RtmClient.createInstance(getBaseContext(), getString(R.string.agora_app_id), new RtmClientListener(){
mRtmClient.login(null, login_name + mUid, new ResultCallback<Void>() {
mRtmChannel = mRtmClient.createChannel(channel, new MyChannelListener());
mRtmChannel.join(new ResultCallback<Void>() {
RtmMessage message = mRtmClient.createMessage();
message.setText(”Please unmute”);
mRtmChannel.sendMessage(message, new ResultCallback<Void>() {
class MyChannelListener implements RtmChannelListener {
@Override
public void onMessageReceived(final RtmMessage message, final RtmChannelMember fromMember) {
String account = fromMember.getUserId();
String msg = message.getText();
//Please unmute//
if (getString(R.string.msg_unmute).equals(arrMsg[0])) {
//リクエスト文字を画面に表示
txReq = (TextView) findViewById(R.id.textReq3);
txReq.setText(getString(R.string.msg_unmute));
}
//You can unmute
if (getString(R.string.msg_can_unmute).equals(arrMsg[0])) {
//マイクをON
doVoiceLocalMute(false);
}
}
}
※メッセージが受信されるとonMessageReceivedがコールバックされます。
fromMemberには送信元のメンバー情報、messageには受信メッセージが入っています。
※メッセージの内容を受けて処理を切り分けます。
Agora.io voice SDKでログインし、音質設定、マイクをON/OFFするサンプルです
mRtcEngine = RtcEngine.create(getBaseContext(), appId, mRtcEventHandler);
mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION);
mRtcEngine.setAudioProfile(Constants.AUDIO_PROFILE_MUSIC_STANDARD,Constants.AUDIO_SCENARIO_SHOWROOM);
※第1引数にprofile、第2引数にscenarioを選択します。
mRtcEngine.joinChannel(null, channel, null, HOST_UID);
mRtcEngine.muteLocalAudioStream(true);
※マイクOFFの時はtrue、マイクONの時はfalseを指定します。
動作を確認してみます。
PCとAndroidデバイスをUSB接続し、AndroidStudioから実行ボタンをクリックし開始します。ビルドが完了すると、Androidデバイス上に画面が表示されます。
(ホスト側、オーディエンス側)
1.(ホスト側)「host」チェックONの状態で「LOGIN」ボタンをクリックします。
2.(ホスト側)「オーディオプロファイル」は、プロファイル:”MUSIC_STANDARD”、シナリオ:”SHORWROOM”をそれぞれ選択します。
3.(ホスト側)「JOIN」ボタンをクリックします。
(ホスト側)
1.(オーディエンス側)「host」チェックOFFにした状態にして、ホスト側と同じ手順で入室します。
※同様に2拠点のオーディエンスが入室しています。
(オーディエンス側)
※この時点ではホスト側のみマイクON、オーディエンス側はマイクOFFになっています。
(オーディエンス側)
1.(ホスト側)オーディエンス側からのマイクリクエストを受け取ります。
ホスト側に”Please unmute”が表示されてます。
(ホスト側)
(ホスト側)オーディエンス側からの完了メッセージ(unMuted)が届き、”unMuted”が表示されます。
※この時点ではホスト側、オーディエンス側(58841)の2拠点がマイクONになります。
(ホスト側)必要に応じてホストは自分のマイクをOFFにします。
※オーディエンス側(58841)のみがマイクONになります。
(ホスト側)
(オーディエンス側)
(ホスト側、オーディエンス側)「LEAVE」ボタンをクリックし退室します。(同時にログアウトもされます)