说明:
TUIVoiceRoom 组件已停止维护,若您的业务场景需要集成语聊功能,可使用新版语音聊天室(含 UI)TUILiveKit。 组件介绍
TUIVoiceRoom 是一个开源的音视频 UI 组件,通过在项目中集成 TUIVoiceRoom 组件,您只需要编写几行代码就可以为您的 App 添加“多人语音聊天”等场景,TUIVoiceRoom 支持 iOS等平台,基本功能如下图所示: 说明:
TUIKit 系列组件同时使用了腾讯云 实时音视频 TRTC 和 即时通信 IM 两个基础 PaaS 服务,开通实时音视频后会同步开通即时通信IM服务。即时通信 IM 服务详细计费规则请参见 即时通信 - 价格说明,TRTC 开通会默认关联开通 IM SDK 的体验版,仅支持100个 DAU。 组件集成
步骤一:下载并导入 TUIVoiceRoom 组件
单击进入 Github ,选择克隆/下载代码,然后拷贝 Android/Source 目录到您的工程中,并完成如下导入动作: 在 setting.gradle
中完成导入,参考如下:
在 app 的 build.gradle 文件中添加对 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.** { *; }
步骤三:初始化并登录
TRTCVoiceRoom mTRTCVoiceRoom = TRTCVoiceRoom.sharedInstance(this);
mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
);
mTRTCVoiceRoom.login(SDKAppID, userId, userSig, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
}
}
});
参数说明:
SDKAppID:TRTC 应用 ID,如果您未开通腾讯云 TRTC 服务,可进入 腾讯云实时音视频控制台,创建一个新的 TRTC 应用后,单击应用信息,SDKAppID 信息如下图所示:
Secretkey:TRTC 应用密钥和 SDKAppId 对应,进入 TRTC 应用管理 后,SecretKey 信息如上图所示。 userId:当前用户的 ID,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)。建议结合业务实际账号体系自行设置。
userSig:根据 SDKAppId、userId,Secretkey等信息计算得到的安全保护签名,您可以单击 这里 直接在线生成一个调试的userSig,更多信息见 如何计算及使用 UserSig。 步骤四:实现语音聊天房间
int roomId = 12345;
final TRTCVoiceRoomDef.RoomParam roomParam = new TRTCVoiceRoomDef.RoomParam();
roomParam.roomName = "房间名称";
roomParam.needRequest = false;
roomParam.seatCount = 7;
roomParam.coverUrl = "房间封面图的 URL 地址";
mTRTCVoiceRoom.createRoom(roomId, roomParam, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
}
}
});
mTRTCVoiceRoom.enterRoom(roomId, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
}
}
});
int seatIndex = 2;
mTRTCVoiceRoom.enterSeat(seatIndex, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
}
}
});
@Override
public void onSeatListChange(final List<TRTCVoiceRoomDef.SeatInfo> seatInfoList) {
}
int seatIndex = 2;
String userId = "123";
mTRTCVoiceRoom.pickSeat(1, userId, new TRTCVoiceRoomCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
if (code == 0) {
}
}
});
@Override
public void onSeatListChange(final List<TRTCVoiceRoomDef.SeatInfo> seatInfoList) {
}
String seatIndex = "1";
String userId = "123";
String inviteId = mTRTCVoiceRoom.sendInvitation("takeSeat", userId, seatIndex, null);
@Override
public void onInviteeAccepted(String id, String invitee) {
if(id.equals(inviteId)) {
mTRTCVoiceRoom.enterSeat(index, null);
}
}
@Override
public void onReceiveNewInvitation(final String id, String inviter, String cmd, final String content) {
if (cmd.equals("takeSeat")) {
mTRTCVoiceRoom.acceptInvitation(id, null);
}
}
String seatIndex = "1";
String userId = "123";
String inviteId = mTRTCVoiceRoom.sendInvitation("pickSeat", userId, seatIndex, null);
@Override
public void onInviteeAccepted(String id, String invitee) {
if(id.equals(inviteId)) {
mTRTCVoiceRoom.pickSeat(index, null);
}
}
@Override
public void onReceiveNewInvitation(final String id, String inviter, String cmd, final String content) {
if (cmd.equals("pickSeat")) {
mTRTCVoiceRoom.acceptInvitation(id, null);
}
}
mTRTCVoiceRoom.sendRoomTextMsg("Hello Word!", null);
mTRTCVoiceRoom.setDelegate(new TRTCVoiceRoomDelegate() {
@Override
public void onRecvRoomTextMsg(String message, TRTCVoiceRoomDef.UserInfo userInfo) {
Log.d(TAG, "收到来自" + userInfo.userName + "的消息:" + message);
}
});
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。
本页内容是否解决了您的问题?