大数跨境
0
0

Agora 教程丨如何快速实现在线 K 歌房 App?

Agora 教程丨如何快速实现在线 K 歌房 App? RTE开发者社区
2021-09-23
0
导读:我们在 9 月 8 日正式发布了在线 K 歌房场景化解决方案。我们将其场景下的 API 进行了模块整合,并实

我们在 9 月 8 日正式发布了在线 K 歌房场景化解决方案。我们将其场景下的 API 进行了模块整合,并实现了功能的组件化,进一步降低了该场景的开发门槛。目前,在线 K 歌房场景化方案支持 iOS Android 两个平台。接下来,我们简单分析一下在线 K 歌房的功能,以及接口实现。我们也提供了参考 Demo,可在文末获取。


一般来讲,在线 K 歌房中有这样几种角色:



要实现一个完整的在线 K 歌房,需要实现几个核心功能:


实时音频互动


超低延时下,听众实时接收房主和连麦主播的音频流,保证互动的流畅性。


互动连麦


听众可自主上麦成为连麦主播,即可进行点歌。

房间内所有用户都可以实时观看麦上主播互动。


曲库组件


  • Agora 内容中心提供K歌歌曲内容,如歌曲、歌词、歌手封面等。(内容由咪咕音乐提供)

  • 曲库支持搜索功能。


点歌组件


  • 点歌:连麦主播从曲库点歌,歌曲进入已点列表;

  • 当单个人数大于 1 时,根据点歌的顺序进行排麦演唱,开始播放歌曲后,点歌用户成为主唱。


歌词组件


  • 歌词同步:歌曲播放时,根据播放进度显示对应的歌词;

  • 移词切进度:主唱滑动歌词可以改变歌曲进度;

  • 更换歌词背景:主唱可以改变歌词背景。


播放组件


主唱可以控制歌曲的播放、暂停,切换伴奏/原唱,以及控制伴奏和人声的音量。

 

那么基于以上对于功能要求,以及与延时、音质和歌词同步的技术要求,我们可以这样来设计在线 K 歌房的架构,如下图所示。



*注:方案架构中第三方云存储SDK来模拟业务后台


在这个方案中,首先连麦主播发起点歌的指令,然后利用内容 API 在 Agora 内容中心调用咪咕音乐曲库,通过信令将歌曲列表同步给主唱端,并将歌词同步给房间内的所有用户。在主唱开始唱歌后,客户端将BGM与歌声进行混流,然后通过 Agora SD-RTN™ 进行低延时的传输。




在这里我们仅以 iOS 为例,实现一个在线 K 歌房。在房间中,连麦主播在点歌后可以成为主唱,跟随伴奏给听众唱歌。在这个场景中,主唱可以收、发音频流,观众只能接收音频流。



  • Xcode 12.0 或以上版本。

  • 已安装 Cocoapods

  • iOS 11.0 或以上版本的设备。部分模拟机可能无法支持本项目的全部功能,所以推荐使用真机。

  • Python 3.X。

  • 第三方云服务命令行工具

  • 有效的 Agora 开发者账号

  • 有效的 Agora 项目,获取项目的 App ID,并生成一个临时 Token。

  • 如果你的网络环境部署了防火墙,请访问声网文档中心(docs.agora.io/cn)参考应用企业防火墙限制以正常使用 Agora 服务。

 

实现客户端的接口调用时序如下图所示:



 

  1. 用户通过第三方云服务发起加入歌房指令,调用 joinChannelByToken 方法加入 RTC 频道。

    ○ 加入 RTC 频道前,你需要调用sharedEngineWithAppId 创建 AgoraRtcEngineKit 实例。


    ○ 调用 setChannelProfile 方法将场景设为直播。(LiveBroadcasting)


    ○ 调用 setClientRole 方法将主唱的用户角色设为 Broadcaster。


  1. 通过第三方云服务发起上麦指令,成为连麦主播,此时可以与其他连麦主播进行语音互动。同时听众端收到主播端的上麦指令并更新房间内麦位信息。


  2. 从 Agora 内容中心获取歌单,并下载歌曲文件和歌词文件,成为主唱。详见声网文档中心,搜索点歌功能


  3. 调用 startAudioMixing 方法播放歌曲,伴随歌曲唱歌。如需切换原唱和伴奏模式,可以调用 setAudioMixingDualMonoMode 方法。


  4. 通过第三方云服务发起设置当前歌曲指令,听众接收主唱指令并更新当前歌曲。


  5. 唱歌的同时,调用 sendStreamMessage 方法,结合歌词控件实现歌词同步显示,并自定义歌词界面。


  6. 通过第三方云服务发起下麦指令,调用 leaveChannel 方法离开歌房。



  1. 通过第三方云服务发起加入歌房指令,调用 joinChannelByToken 方法加入 RTC 频道。


    ○ 加入 RTC 频道前,你需要调用 sharedEngineWithAppId 创建 AgoraRtcEngineKit 实例。

    ○ 调用 setChannelProfile 方法将场景设为直播。(LiveBroadcasting)


    ○ 调用 setClientRole 方法将主唱的用户角色设为 Audience。


主唱上麦后,听众通过第三方云服务同步房间内麦位信息。主唱唱歌时,听众接收主唱音频流,并根据主唱指令更新当前歌曲。


  1. 听众如需上麦,需要再次调用 setClientRole 方法将用户角色设为 Broadcaster,才可以在房间内发布音频流。


  2. 通过第三方云服务发起获取当前歌词指令,并下载歌词。通过

    receiveStreamMessageFromUid 回调和歌词控件实时同步歌词进度。


  3. 调用 leaveChannel 方法离开歌房。


我们还提供了 Android 与 iOS 端的 Demo App,大家可访问声网文档中心下载(docs.agora.io/cn)。我们也在官方 GitHub 上提供开源的在线 K 歌房示例项目 Online KTV,可点击左侧链接参考源码。除了排麦演唱,声网在线 K 歌房还支持实时合唱。关于实时合唱的更多方案详情可拨打 400 632 6626 咨询。




在9 月 29 日,在 Agora Talk 直播间,声网开发者体验高级工程师夏宁将教你如何搭建一个在线 K 歌房,如果大家看完教程,或在跑通 Demo 的过程中遇到任何问题,可以届时在直播间与我们的工程师交流。扫描下方二维码即可报名。


👇👇👇


 

点击阅读原文了解更多
【声明】内容源于网络
0
0
RTE开发者社区
RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
内容 1122
粉丝 0
RTE开发者社区 RTE 开发者社区是聚焦实时互动领域的中立开发者社区。不止于纯粹的技术交流,我们相信开发者具备更加丰盈的个体价值。行业发展变革、开发者职涯发展、技术创业创新资源,我们将陪跑开发者,共享、共建、共成长。
总阅读1.1k
粉丝0
内容1.1k