TUIVoiceRoomはオープンソースのオーディオビデオUIコンポーネントであり、プロジェクトにTUIVoiceRoomコンポーネントを統合することにより、数行のコードを書くだけで、Appに「多人数ボイスチャット」などのシーンを組み込むことができます。TUIVoiceRoomはiOSなどのプラットフォームをサポートしています。基本機能は下図のとおりです:
説明:TUIKitシリーズコンポーネントはTencent CloudのTRTCとIMという2つの基本的なPaaSサービスを同時に使用し、TRTCをアクティブにした後、IMサービスを同期的にアクティブにすることができます。IMサービスの課金ルールの詳細については、Instant Messagingの料金説明をご参照ください。TRTCをアクティブにすると、デフォルトでは、100DAUまでサポートするIM SDK体験版もアクティブになります。
クリックしてGithubに進み、コードのクローン/ダウンロードを選択した後、Android/Sourceディレクトリをプロジェクトにコピーし、次のようにインポート動作を完了します:
setting.gradle
へのインポートを完了します。以下をご参照ください:
include ':Source'
appのbuild.gradleファイルにSourceに対する依存関係を追加します:
api project(':Source')
ルートディレクトリのbuild.gradle
ファイルにTRTC SDK
およびIM SDK
の依存関係を追加します
ext {
liteavSdk = "com.tencent.liteav:LiteAVSDK_TRTC:latest.release"
imSdk = "com.tencent.imsdk:imsdk-plus:latest.release"
}
AndroidManifest.xmlにAppの権限を設定します。SDKには次の権限が必要です(6.0以上のAndroidシステムではマイクの権限などを動的に申請してください):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
proguard-rules.proファイルでは、SDK関連を非難読化リストに追加します:
-keep class com.tencent.** { *; }
// 1.初期化
TRTCVoiceRoom mTRTCVoiceRoom = TRTCVoiceRoom.sharedInstance(this);
mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
);
// 2.ログイン
mTRTCVoiceRoom.login(SDKAppID, userId, userSig, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
//ログイン成功
}
}
});
パラメータの説明:
管理者によるボイスチャットルーム作成の実装TRTCVoiceRoom#createRoom
// 1.管理者が呼び出してルームを作成
int roomId = 12345; //ルームid
final TRTCVoiceRoomDef.RoomParam roomParam = new TRTCVoiceRoomDef.RoomParam();
roomParam.roomName = "ルーム名";
roomParam.needRequest = false; // マイク・オンに対する管理者の確認の要否
roomParam.seatCount = 7; // ルームの座席数。ここでは計7席あり、管理者が1席を占め、残り6席がリスナーとなります
roomParam.coverUrl = "ルームカバー図のURL ";
mTRTCVoiceRoom.createRoom(roomId, roomParam, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
//作成に成功
}
}
});
リスナーのボイスチャットルーム入室の実装TRTCVoiceRoom#enterRoom
// 1.リスナーが呼び出して入室
mTRTCVoiceRoom.enterRoom(roomId, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
//入室に成功
}
}
});
リスナーの自主的なマイク・オンの実装TRTCVoiceRoom#enterRoom
// 1: リスナーが呼び出してマイク・オン
int seatIndex = 2; //マイクのindex
mTRTCVoiceRoom.enterSeat(seatIndex, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
//操作に成功しました
}
}
});
// 2. onSeatListChangeコールバックを受信し、マイクリストを更新します
@Override
public void onSeatListChange(final List<TRTCVoiceRoomDef.SeatInfo> seatInfoList) {
}
管理者による視聴者発言招待の実装TRTCVoiceRoom#pickSeat
// 1: 管理者が呼び出して、視聴者が発言できるように招待
int seatIndex = 2; //マイクのindex
String userId = "123"; //マイク・オンが必要なユーザーid
mTRTCVoiceRoom.pickSeat(1, userId, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
//操作に成功しました
}
}
});
// 2. onSeatListChangeコールバックを受信し、マイクリストを更新します
@Override
public void onSeatListChange(final List<TRTCVoiceRoomDef.SeatInfo> seatInfoList) {
}
リスナーによるマイク・オン申請の実装 TRTCVoiceRoom#sendInvitation
// リスナー側の視点
// 1.リスナーが呼び出してマイク・オンを申請
String seatIndex = "1"; //マイクのindex
String userId = "123"; //ユーザーid
String inviteId = mTRTCVoiceRoom.sendInvitation("takeSeat", userId, seatIndex, null);
// 2.招待のリクエスト同意を受信し、正式にマイク・オンになります
@Override
public void onInviteeAccepted(String id, String invitee) {
if(id.equals(inviteId)) {
mTRTCVoiceRoom.enterSeat(index, null);
}
}
// 管理者側の視点
// 1.管理者がリクエストを受信します
@Override
public void onReceiveNewInvitation(final String id, String inviter, String cmd, final String content) {
if (cmd.equals("takeSeat")) {
// 2.管理者がリスナーのリクエストに同意します
mTRTCVoiceRoom.acceptInvitation(id, null);
}
}
管理者によるマイク・オンへの招待の実装 TRTCVoiceRoom#sendInvitation
// 管理者側の視点
// 1.管理者が呼び出して、視聴者が発言できるように招待をリクエスト
String seatIndex = "1"; //マイクのindex
String userId = "123"; //ユーザーid
String inviteId = mTRTCVoiceRoom.sendInvitation("pickSeat", userId, seatIndex, null);
// 2.招待のリクエスト同意を受信し、正式にマイク・オンになります
@Override
public void onInviteeAccepted(String id, String invitee) {
if(id.equals(inviteId)) {
mTRTCVoiceRoom.pickSeat(index, null);
}
}
// リスナー側の視点
// 1.リスナーがリクエストを受信します
@Override
public void onReceiveNewInvitation(final String id, String inviter, String cmd, final String content) {
if (cmd.equals("pickSeat")) {
// 2.リスナーが管理者のリクエストに同意します
mTRTCVoiceRoom.acceptInvitation(id, null);
}
}
テキストチャットの実装TRTCVoiceRoom#sendRoomTextMsg
// 発信側:テキストメッセージの発信
mTRTCVoiceRoom.sendRoomTextMsg("Hello Word!", null);
// 受信側:テキストメッセージのモニタリング
mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
@Override
public void onRecvRoomTextMsg(String message, TRTCVoiceRoomDef.UserInfo userInfo) {
Log.d(TAG,"が" + userInfo.userName + "から受信したメッセージ:" + message);
}
});
弾幕コメントの実装 TRTCVoiceRoom#sendRoomCustomMsg
// 発信側:カスタマイズCmdによって弾幕と「いいね」情報を区別することができます
// eg:「CMD_DANMU」は弾幕コメントを表し、「CMD_LIKE」は「いいね」情報を表します
mTRTCVoiceRoom.sendRoomCustomMsg("CMD_DANMU", "Hello world", null);
mTRTCVoiceRoom.sendRoomCustomMsg("CMD_LIKE", "", null);
// 受信側:カスタムメッセージのモニタリング
mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
@Override
public void onRecvRoomCustomMsg(String cmd, String message, TRTCVoiceRoomDef.UserInfo userInfo) {
if ("CMD_DANMU".equals(cmd)) {
// 弾幕コメントの受信
Log.d(TAG, "が" + userInfo.userName + "から受信した弾幕コメント:" + message);
} else if ("CMD_LIKE".equals(cmd)) {
// 「いいね」情報の受信
Log.d(TAG, userInfo.userName + "いいねを付けました!");
}
}
});
ご要望やフィードバックなどがございましたら、colleenyu@tencent.comまでご連絡ください。
この記事はお役に立ちましたか?