帖子
帖子
用户
博客
课程

【模块教程】腾讯云在线K歌(tencentTrtcKaraoke)使用教程

YonBuilder移动开发 2022-5-25 16:18 907人浏览 0人回复
原作者: 软云 收藏 邀请
摘要

腾讯云在线K歌(KTV) 体验 KTV 的能力,包括低延时K歌、麦位管理、收发礼物、文字聊天等 TRTC 在 KTV 场景下的相关能力。支持以下功能: ▪️ 房主创建新的 Karaoke 房间开播,听众进入 Karaoke 房间收听/互动。 ▪ ...

腾讯云在线K歌(KTV)

体验 KTV 的能力,包括低延时K歌、麦位管理、收发礼物、文字聊天等 TRTC 在 KTV 场景下的相关能力。支持以下功能:
▪️ 房主创建新的 Karaoke 房间开播,听众进入 Karaoke 房间收听/互动。
▪️ 房主可以管理点歌、将座位上的麦上主播踢下麦。
▪️ 房主还能对座位进行封禁,其他听众就不能再进行申请上麦了。
▪️ 听众可以申请上麦,变成麦上主播,上麦后可以点歌和唱歌,也可以随时下麦成为普通的听众。
▪️ 支持发送礼物和各种文本、自定义消息,自定义消息可用于实现弹幕、点赞等。

功能测试

Android
IOS
联系我们
[attach]128659[/attach]
[attach]128658[/attach]
[attach]128582[/attach]

扫码添加技术支持微信,微信号: ruanyunkeji006,开通测试账号。

技术支持

原生模块本身使用复杂,再加上腾讯云音视频功能强大,造成接入难度不小。
建议使用前先联系我们的客服,协助接入。
联系我们
微信号
内测功能
[attach]128581[/attach]
ruanyunkeji006
-


快速开始

步骤1:集成模块

▪️加载模块

模块名称: tencentTrtcKaraoke

  1. var karaoke = api.require('tencentTrtcKaraoke');
复制代码

▪️腾讯云配置

注册或登录腾讯云账号,并进行实名认证
  
  1. 点击应用管理,进入应用列表;
  2. 点击 "创建应用"按钮,填入应用名称,创建实时音视频应用,如果使用已有应用,则跳过这步;
  3. 点击"应用信息",进入应用详情;
  4. 在"应用信息"标签卡中,点击"SDKAppID"后面的复制按钮,复制SDKAppId,并保存,对应为后文中的"sdkAppId"。

▪️生成签名

【自动签名】 联系我们(微信号: ruanyunkeji006)获取。
【手动签名】 点击 UserSig生成&校验 选择对应的 sdkAppId 的应用,输入userId,点击获取对应的用户签名userSig

步骤2: 模块初始化

必须调用 init 函数后,才可以使用模块的各个功能。

  1. karaoke.init({}, function(ret, err) {
  2.   
  3. });
复制代码

步骤3: 设置监听

调用 setKaraokeListener 设置监听器,监听器会返回各类事件回调

  1. karaoke.setKaraokeListener({}, function(ret, err) {
  2.   
  3. });
复制代码

步骤4: 登录

调用 login 函数完成组件的登录,请参考下表填写关键参数
  1. karaoke.login({
  2.   sdkAppId: self.sdkAppId,
  3.   userId: self.userId,
  4.   userSig: self.userSig
  5. }, function(ret, err) {
  6.   
  7. });
复制代码

步骤5: 房主端开播

  1. 主播执行 步骤四 登录后,可以调用 setSelfProfile 设置自己的昵称和头像。
  2. 主播调用 createRoom 创建新的KTV房间,此时传入房间 ID、上麦是否需要房主确认、麦位数等房间属性信息。
  3. 主播创建房间成功后,调用 enterSeat 进入座位。
  4. 主播收到模块的 onSeatListChange 麦位表变化事件通知,此时可以将麦位表变化刷新到 UI 界面上。
  5. 主播还会收到麦位表有成员进入的 onAnchorEnterSeat 的事件通知,此时会自动打开麦克风采集。

    [attach]128574[/attach]
  1. // 1.房主设置昵称和头像
  2. karaoke.setSelfProfile({
  3.   userName: self.userName,
  4.   avatarUrl: self.avatarUrl
  5. }, function(ret, err) {
  6.   // 结果回调
  7. });

  8. // 2.房主端创建房间
  9. karaoke.createRoom({
  10.   roomId: self.roomId,
  11.   roomParam: self.roomParam
  12. }, function(ret, err) {
  13.   
  14. });

  15. // 创建房间成功后开始占座
  16. karaoke.enterSeat({
  17.   seatIndex: 0
  18. }, function(ret, err) {
  19.   if (ret.status) {
  20.     // 房主占座成功
  21.   } else {
  22.     // 房主占座失败
  23.   }
  24. });

  25. // 3.占座成功后,收到 onSeatListChange 事件通知
  26. karaoke.setKaraokeListener({}, function(ret, err) {
  27.   if (ret.hasOwnProperty('eventType')) {
  28.     if ('onSeatListChange' == ret.eventType) {
  29.       // 刷新您的麦位列表
  30.     }
  31.    
  32.     // 4. 收到 onAnchorEnterSeat 事件通知
  33.     if ('onAnchorEnterSeat' == ret.eventType) {
  34.       // 处理房主上麦事件
  35.     }
  36.   }
  37. });
复制代码

步骤6: 听众端观看

  1. 听众端执行 步骤4 登录后,可以调用 setSelfProfile 设置自己的昵称和头像。
  2. 听众端向业务后台获取最新的KTV房间列表。

说明:

App 中的 KTV 房间列表仅做演示使用,KTV 房间列表的业务逻辑千差万别,腾讯云暂不提供 KTV 房间列表的管理服务,请自行管理您的 KTV 房间列表。

  1. 听众端调用 getRoomInfoList 获取房间的详细信息,该信息是在房主端调用 createRoom 创建KTV房间时设置的简单描述信息。

注意:

如果您的KTV房间列表包含了足够全面的信息,可跳过调用 getRoomInfoList 相关步骤。

  1. 观众选择一个KTV房间,调用 enterRoom 并传入房间号即可进入该房间。
  2. 进房后会收到模块的 onRoomInfoChange 房间属性变化事件通知,此时可以记录房间属性并做相应改变,例如 UI 展示房间名、记录上麦是否需要请求主播同意等。
  3. 进房后会收到组件的 onSeatListChange 麦位表变化事件通知,此时可以将麦位表变化刷新到 UI 界面上。  
  4. 进房后还会收到麦位表有主播进入的 onAnchorEnterSeat 的事件通知。

    [attach]128573[/attach]
  1. // 1.听众设置昵称和头像
  2. karaoke.setSelfProfile({
  3.   userName: self.userName,
  4.   avatarUrl: self.avatarUrl
  5. }, function(ret, err) {
  6.   // 结果回调
  7. });

  8. // 2.假定您从业务后台获取房间列表为 roomIdList
  9. // 3.通过调用 getRoomInfoList 获取房间的详细信息
  10. karaoke.getRoomInfoList({
  11.   roomIdList: self.roomIdList
  12. }, function(ret, err) {
  13.   // 获取结果,此时可以刷新UI
  14. });

  15. // 4.选择KTV房间后,传入 roomId 进入房间
  16. karaoke.enterSeat({
  17.   seatIndex: self.seatIndex
  18. }, function(ret, err) {
  19.   // 进入房间结果回调
  20.   if (ret.status) {
  21.     // 进房成功
  22.   }
  23. });
复制代码

步骤7: 麦位管理

房主端:

  1. pickSeat 传入对应的麦位和观众 userId,可以抱人上麦,房间内所有成员会收到onSeatListChangeonAnchorEnterSeat 的事件通知。
  2. kickSeat 传入对应麦位后,可以踢人下麦,房间内所有成员会收到 onSeatListChangeonAnchorLeaveSeat 的事件通知。
  3. muteSeat 传入对应麦位后,可以静音/解除静音,房间内所有成员会收到 onSeatListChangeonSeatMute 的事件通知。
  4. closeSeat 传入对应麦位后,可以封禁/解禁某个麦位,封禁后听众端将不能再上麦,房间内所有成员会收到 onSeatListChangeonSeatClose 的事件通知。

     [attach]128575[/attach]

听众端:

  1. enterSeat 传入对应的麦位后,可以进行上麦,房间内所有成员会收到 onSeatListChangeonAnchorEnterSeat 的事件通知。
  2. leaveSeat 主动下麦,房间内所有成员会收到 onSeatListChangeonAnchorLeaveSeat 的事件通知。

     [attach]128576[/attach]

麦位操作后的事件通知顺序如下:callback > onSeatListChange > onAnchorEnterSeat 等独立事件。

  1. // case1: 房主抱人上1号麦位
  2. karaoke.pickSeat({
  3.   seatIndex: 1,
  4.   userId: '123'
  5. }, function(ret, err) {
  6.   // 结果回调
  7. });

  8. karaoke.setKaraokeListener({}, function(ret, err) {
  9.   if (ret.hasOwnProperty('eventType')) {
  10.     // 3.收到 onSeatListChange 回调,刷新您的麦位列表
  11.     if ('onSeatListChange' == ret.eventType) {
  12.       // 刷新的麦位列表
  13.     }
  14.     // 4.单个麦位变化的通知,可以在这里判断听众是不是真的上麦成功
  15.     if ('onAnchorEnterSeat' == ret.eventType) {
  16.       // 处理上麦事件
  17.     }
  18.   }
  19. });
  20. // case2: 听众主动上2号麦位
  21. karaoke.enterSeat({
  22.   seatIndex: 2
  23. }, function(ret, err) {
  24.   // 上麦结果回调
  25. });

  26. karaoke.setKaraokeListener({}, function(ret, err) {
  27.   if (ret.hasOwnProperty('eventType')) {
  28.     // 3.收到 onSeatListChange 回调,刷新您的麦位列表
  29.     if ('onSeatListChange' == ret.eventType) {
  30.       // 刷新的麦位列表
  31.     }
  32.     // 4.单个麦位变化的通知,可以在这里判断是不是自己并进行相应处理
  33.     if ('onAnchorEnterSeat' == ret.eventType) {
  34.       // 处理上麦事件
  35.     }
  36.   }
  37. });
复制代码

步骤8:邀请信令使用

在"麦位管理"中,观众上下麦、主播抱人上麦都不需要经过对方的同意就可以直接操作。 如果您的 App 需要对方同意才能进行下一步操作的业务流程,那么邀请信令可以提供相应支持。

如果您的观众上麦需要申请:

  1. 听众端调用 sendInvitation 传入主播的 userId 和业务的自定义命令字等,此时函数会返回一个 inviteId,记录该 inviteId。
  2. 房主端收到 onReceiveNewInvitation 的事件通知,此时 UI 可以弹窗并询问主播是否同意。
  3. 主播选择同意后,调用 acceptInvitation 并传入 inviteId。
  4. 听众端收到 onInviteeAccepted 的事件通知,调用 enterSeat 进行上麦。

     [attach]128577[/attach]

  1. // 听众(test002)视角
  2. // 1. 调用 sendInvitation,请求上1号麦位
  3. karaoke.sendInvitation({
  4.   cmd: 'ENTER_SEAT',
  5.   userId: 'test001',
  6.   content: '1'
  7. }, function(ret, err) {
  8.   // 发送结果回调
  9. });

  10. // 2. 收到邀请的同意请求, 正式上麦
  11. karaoke.setKaraokeListener({}, function(ret, err) {
  12.   if (ret.hasOwnProperty('eventType')) {
  13.     if ('onInviteeAccepted' == ret.eventType) {
  14.       if (ret.invitee == 'test002') {
  15.         karaoke.enterSeat({
  16.           seatIndex: 1
  17.         }, function(ret, err) {
  18.          
  19.         });
  20.       }
  21.     }
  22.   }
  23. });

  24. // 房主端test001视角
  25. // 1. 房主收到请求
  26. karaoke.setKaraokeListener({}, function(ret, err) {
  27.   if (ret.hasOwnProperty('eventType')) {
  28.     if ('onReceiveNewInvitation' == ret.eventType) {
  29.       if (cmd == 'ENTER-SEAT') {
  30.         // 2. 房主同意听众请求
  31.         karaoke.acceptInvitation({
  32.           inviteId: ret.inviteId
  33.         }, function(ret, err) {
  34.          
  35.         });
  36.       }
  37.     }
  38.   }
  39. })
复制代码

如果您的主播需要发送邀请才能抱观众上麦:

  1. 房主端调用 sendInvitation 传入观众的 userId 和业务的自定义命令字等,此时函数会返回一个 inviteId,记录该 inviteId。
  2. 听众端收到 onReceiveNewInvitation 的事件通知,此时 UI 可以弹窗并询问观众是否同意上麦。
  3. 观众选择同意后,调用 acceptInvitation 并传入 inviteId。
  4. 房主端收到 onInviteeAccepted 的事件通知,调用 pickSeat 抱观众上麦。

     [attach]128578[/attach]

步骤9:实现文字和弹幕消息

▪️通过 sendRoomTextMsg 可以发送普通的文本消息,所有在该房间内的主播和观众均可以收到 onRecvRoomTextMsg 回调

即时通信 IM 后台有默认的敏感词过滤规则,被判定为敏感词的文本消息不会被云端转发。

  1. karaoke.sendRoomTextMsg({
  2.   msg: 'This is a msg'
  3. }, function(ret, err) {
  4.   
  5. });
复制代码

▪️通过 sendRoomCustomMsg 可以发送自定义(信令)的消息,所有在该房间内的主播和观众均可以收到 onRecvRoomCustomMsg 回调。

自定义消息常用于传输自定义信令,例如用于点赞消息的发送和广播。

  1. karaoke.sendRoomCustomMsg({
  2.   cmd: 'This is a cmd',
  3.   msg: 'This is a msg'
  4. }, function(ret, err) {
  5.   
  6. });
复制代码

更多功能
-

扫码添加, 获取技术支持,微信号: ruanyunkeji006

[attach]128579[/attach]
源代码

附件上传不了测试代码包,如果需要协助测试,请联系上方技术支持微信号获取接入。
本文暂无评论,快来抢沙发!