すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:Android での音声チャットルーム SDK の統合

最終更新日:Mar 01, 2026

ApsaraVideo Live ARTC SDK を使用して、Android 上に音声チャットルームを構築します。このガイドでは、チャンネルの作成、ロールベースのアクセス、オーディオコントロール、バックグラウンドミュージックについて説明します。

前提条件

開始する前に、以下が準備できていることを確認してください。

仕組み

音声チャットルームでは、ARTC SDK を音声のみモードで使用し、ロールベースのアクセス制御を行います。

  • ストリーマー (インタラクティブロール):チャンネルを作成し、音声を公開し、すべての参加者から音声を受信します。

  • 視聴者 (ライブロール):既存のチャンネルに参加し、音声を受信します。ロールの切り替えによって共同ストリーマーに昇格できます。

実装フロー:

  1. チャンネルプロファイルとクライアントロールを設定します。

  2. 高品質の音楽用にオーディオプロファイルを設定します。

  3. 認証トークンを構築してエンコードします。

  4. チャンネルに参加します。

Implementation diagram

ストリーマーとしてのチャンネル作成

SDK をインタラクティブライブモードで初期化し、インタラクティブロールを設定してチャンネルに参加します。SDK は、すべてのリモートオーディオストリームを自動的にサブスクライブします。

// チャンネルプロファイルをインタラクティブライブストリーミングに設定
mAliRtcEngine.setChannelProfile(AliRTCSdkInteractiveLive);
// ロールをインタラクティブに設定 (ストリーマーは音声を公開および受信可能)
mAliRtcEngine.setClientRole(AliRTCSdkInteractive);
// 音声チャットシナリオでは高品質音楽モードを使用
mAliRtcEngine.setAudioProfile(AliRtcEngineHighQualityMode, AliRtcSceneMusicMode);

// コールバック用のリスナーを設定
mAliRtcEngine.setRtcEngineEventListener(this);
// ローカルオーディオを自動公開
mAliRtcEngine.publishLocalAudioStream(true);
// すべてのリモートオーディオストリームを自動サブスクライブ
mAliRtcEngine.setDefaultSubscribeAllRemoteAudioStreams(true);
mAliRtcEngine.subscribeAllRemoteAudioStreams(true);
// 音声のみモードを有効化 (ビデオなし)
mAliRtcEngine.setAudioOnlyMode(true);

// 認証トークンを構築
JSONObject tokenv2 = new JSONObject();
tokenv2.put("appid", userInfo.appId);
tokenv2.put("channelid", userInfo.channelId);
tokenv2.put("userid", userInfo.userId);
tokenv2.put("nonce", userInfo.nonce);
tokenv2.put("timestamp", userInfo.timestamp);
tokenv2.put("gslb",userInfo.gslb);
tokenv2.put("token", userInfo.token);
String base64TokenV2 = Base64.encodeToString(JSON.toJSONBytes(tokenv2),Base64.NO_WRAP);
// Base64 でエンコードされたトークンでチャンネルに参加
mAliRtcEngine.joinChannel(base64TokenV2, null, null, mUsername);

視聴者としてのチャンネル参加

視聴者は、ストリーマーと同じ初期化フローを使用しますが、クライアントロールが AliRTCSdkLive に設定される点が異なります(ストリーマーの場合は AliRTCSdkInteractive です)。これにより、ユーザーは通常の視聴者として指定されます。

共同ストリーマーとして参加するには、ロールを AliRTCSdkInteractive に設定します。

mAliRtcEngine.setChannelProfile(AliRTCSdkInteractiveLive);
// ロールをライブ (一般視聴者) に設定
mAliRtcEngine.setClientRole(AliRTCSdkLive);
// 音声チャットシナリオでは高品質音楽モードを使用
mAliRtcEngine.setAudioProfile(AliRtcEngineHighQualityMode, AliRtcSceneMusicMode);

// コールバック用のリスナーを設定
mAliRtcEngine.setRtcEngineEventListener(this);
// ローカルオーディオを自動公開
mAliRtcEngine.publishLocalAudioStream(true);
// すべてのリモートオーディオストリームを自動サブスクライブ
mAliRtcEngine.setDefaultSubscribeAllRemoteAudioStreams(true);
mAliRtcEngine.subscribeAllRemoteAudioStreams(true);
// 音声のみモードを有効化 (ビデオなし)
mAliRtcEngine.setAudioOnlyMode(true);

// 認証トークンを構築
JSONObject tokenv2 = new JSONObject();
tokenv2.put("appid", userInfo.appId);
tokenv2.put("channelid", userInfo.channelId);
tokenv2.put("userid", userInfo.userId);
tokenv2.put("nonce", userInfo.nonce);
tokenv2.put("timestamp", userInfo.timestamp);
tokenv2.put("gslb",userInfo.gslb);
tokenv2.put("token", userInfo.token);
String base64TokenV2 = Base64.encodeToString(JSON.toJSONBytes(tokenv2),Base64.NO_WRAP);
// Base64 でエンコードされたトークンでチャンネルに参加
mAliRtcEngine.joinChannel(base64TokenV2, null, null, mUsername);

視聴者ロールの切り替え

視聴者がチャンネルに参加した後、ロールを動的に切り替えます。

// チャンネルに参加したユーザーのロールをストリーマーに切り替え
mAliRtcEngine.setClientRole(AliRTCSdkInteractive);

ボリューム、音声エフェクト、リバーブのコントロール

ボリュームの調整

// ローカル録音ボリュームを調整
mAliRtcEngine.setRecordingVolume(volumeLevel);
// 特定のリモートユーザーのボリュームを調整
mAliRtcEngine.setRemoteAudioVolume(uid, volume);
// すべてのサウンドの再生ボリュームを調整
mAliRtcEngine.setPlayoutVolume(volume);

ボイスチェンジャーの適用

// 「老人」ボイスチェンジャーエフェクトを適用
mAliRtcEngine.setAudioEffectVoiceChangerMode(AliRtcSdk_AudioEffect_Voice_Changer_Oldman);

リバーブの適用

// ルームサイズを設定してリバーブを構成
mAliRtcEngine.setAudioEffectReverbParamType(AliRtcEngine.AliRtcAudioEffectReverbParamType.AliRtcSdk_AudioEffect_Reverb_Room_Size, value);

バックグラウンドミュージックの再生

raw PCM データ入力とファイルベース入力の 2 つのメソッドが利用可能です。

PCM データ入力

音楽入力ストリームを作成し、raw PCM フレームをプッシュします。

外部オーディオストリームの作成:

AliRtcEngine.AliRtcExternalAudioStreamConfig config = new AliRtcEngine.AliRtcExternalAudioStreamConfig();
config.sampleRate = sampleRate;
config.channels = channels;
// 伴奏のローカル再生ボリューム (ARTC SDK が再生を処理する場合に使用)
config.playoutVolume = 60;
// リモート参加者に公開されるボリューム
config.publishVolume = 100;
int externalAudioStreamId = aliRtcEngine.addExternalAudioStream(config);

AliRtcExternalAudioStreamConfig のパラメーター:

パラメーター説明
sampleRateオーディオサンプルレート
channelsオーディオチャンネル数
playoutVolume伴奏のローカル再生ボリューム
publishVolumeリモート参加者に公開されるボリューム

PCM データのプッシュ:

// raw PCM データでオーディオフレームを構築
AliRtcEngine.AliRtcAudioFrame sample = new AliRtcEngine.AliRtcAudioFrame();
sample.data = buffer;
sample.numSamples = numSamples;
sample.numChannels = channels;
sample.sampleRate = sampleRate;
sample.bytesPerSample = bytesPerSample;
// PCM データを外部オーディオストリームにプッシュ
int ret = aliRtcEngine.pushExternalAudioStreamRawData(externalAudioStreamId, sample);

AliRtcAudioFrame のフィールド:

フィールド説明
dataraw PCM オーディオバッファー
numSamplesオーディオサンプル数
numChannelsオーディオチャンネル数
sampleRateオーディオサンプルレート
bytesPerSampleオーディオサンプルあたりのバイト数

ファイルベースの入力

ローカルオーディオファイルから伴奏を開始します。

AliRtcEngine.AliRtcAudioAccompanyConfig config = new AliRtcEngine.AliRtcAudioAccompanyConfig();
config.onlyLocalPlay = localPlay;       // ローカルでのみ再生し、公開しない
config.replaceMic = replaceMic;         // マイク入力をファイルで置き換え
config.loopCycles = loopCycles;         // 再生ループ回数
config.startPosMs = startPosMs;         // ミリ秒単位の開始位置
config.publishVolume = pubVolume;       // リモート参加者に公開されるボリューム
config.playoutVolume = playVolume;      // ローカル再生ボリューム
return mAliRtcEngine.startAudioAccompany(audioFileName, config);

AliRtcAudioAccompanyConfig のパラメーター:

パラメーター説明
onlyLocalPlayローカルでのみ再生し、リモート参加者には公開しない
replaceMicマイク入力をオーディオファイルで置き換える
loopCycles再生ループ回数
startPosMsミリ秒単位の開始位置
publishVolumeリモート参加者に公開されるボリューム
playoutVolumeローカル再生ボリューム