技术实践 | 在线 KTV 实现过程(内附demo体验)
你在线上K过歌吗?
在线K歌自2014年兴起以来,已经发展出了无比庞大的用户群体,每两人中就有就有一人体验过在线 K歌,其前景不可小觑。
如此庞大的市场规模,以及音视频技术使用门槛逐步降低的加持,各类在线K歌玩家大幅增加,在K歌赛道大放异彩,对于开发者而言,如何能够快速实现线上 KTV 的场景就变得十分重要。
想要快速实现一起
今天的文章就带领大家一起了解线上 KTV 的结构与实现过程,让开发变得更简单!
一、准备工作
1、开发环境的准备
更多详情可点击:
- Android Studio 2.1 或以上版本。
- Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本。
- Android 4.1 或以上版本,且支持音视频的 Android 设备。
- Android 设备已经连接到 Internet。
2、ZEGO 平台账号的注册
开发环境搭建好之后,需要在 ZEGO 管理控制台上创建应用、才能获取开发需要的AppId 和 AppSign 。具体的创建应用过程详见文章:
二、实现流程详细介绍
1、接口规范说明
首先分析ZEGO的API输入输出规范。根据
以创建 ZegoExpressEngine 单列对象为列,每个参数都详细的解析其作用。每个接口都描述了作用与用法。
2、一起 KTV 的项目开发 (
一起KTV 是一个依附于语音聊天室的娱乐场景。在这个场景中,一个KTV房间里包含了三种角色(房主、合唱着、听众)。
房主:创建 KTV 房间并推送人声、伴奏到远端,并发起混流任务。房主会自动上麦并固定为麦上首位。可点歌切歌(包括自己点的歌和合唱者点的歌)
合唱者:合唱者可以点歌,或者与其他合唱者进行合唱。(上麦后成为合唱者,可点歌切歌-只能切当前播放是自己点的歌)
听众:进入 KTV 房间后,拉取播放房间内的混流。
其中的功能模块有,房间管理、麦位管理、点歌系统、合唱同步管理、歌词同步管理 5 个业务模块。
整体架构图如下:
整体实现流程如下:
(1)用户需要调用 createEngine 接口,初始化 ZEGO Express SDK。
(2)用户需要调用 createCopyrightedMusic 接口,创建版权音乐对象。
(3)用户需要调用 initCopyrightedMusic 接口,初始化版权音乐对象。
(4)用户可以通过调用 sendExtendedRequest 接口,发送版权音乐扩展请求,获取 songID(songID 是一首歌曲的唯一标识)。
(5)用户可以调用 requestSong、requestAccompaniment 接口,进行点歌或点伴奏,然后通过 ZegoCopyrightedMusicRequestSongCallback、ZegoCopyrightedMusicRequestAccompanimentCallback 回调接口,获取 songID 对应的 resourceID、shareToken。
(6)在获取到其他用户分享的 shareToken 后,可以在有效时间内调用 getMusicByToken 接口获取被分享的音乐资源,然后通过 ZegoCopyrightedMusicGetMusicByTokenCallback 回调获取 shareToken 对应的 resourceID。
(7) 用户可以调用 getLrcLyric 接口获取歌词,将会通过 ZegoCopyrightedMusicGetLrcLyricCallback 回调获取到结果。
(8)用户获取 resourceID 后可以调用 download 接口下载资源。
(9)下载资源成功后,用户可以开始调用 start 接口播放资源,或通过 pause 、stop 等接口调整播放状态。
3、角色实现流程
(1)房主端的实现流程
- 创建引擎并配置。
- 通过业务后台创建房间,创建成功后调用 loginRoom 加入 RTC 房间。
- 房主默认上麦,并处于麦上首位。
- 房主可自由点歌、切歌(自己点的歌、合唱者点的歌)。
- 精准混流任务仅由房主发起,混流包括房主的人声流、房主伴奏流以及所有合唱者的人声流。
- 发送 SEI 信息,让房间内所有人同步歌曲播放进度。
- 房主可让其他上麦成员下麦,同时需要通知房间内所有成员麦位变化以更新麦位信息。
- 房主调用业务后台销毁房间,成功后调用 logoutRoom 销毁 RTC 房间,房间内所有成员自动退房。
流程图如下:
(2)合唱者端的实现流程
- 创建引擎并进行相关配置。
- 获取房间列表,加入业务后台房间,成功后调用 loginRoom 加入 RTC 房间。
- 进房后上麦成为合唱者。上麦过后可点歌、当前播放的是自己点的歌也可切歌。
- 监听房间歌曲变化,按需加载歌曲和歌词。
- 推送自己的人声流,拉取所有合唱者的人声流,但不拉取混流。
- 解析房主发送的 SEI 信息,当歌曲播放进度与房主的差距过大时,校准本端播放器进度和歌词。
流程图如下:
(3)听众端的实现流程
- 创建引擎并进行相关配置。
- 获取房间列表,加入业务后台房间,成功后调用 loginRoom 加入 RTC 房间。
- 监听房间歌曲变化,按需加载歌词。
- 拉取混流。
- 解析房主发送的 SEI 信息,校准本端歌词进度。
流程图如下:
三、在线 KTV 效果展示
想要体验 Demo 可点击链接下载:
四、总结
牛顿曾说:我看得远,是因为我站在巨人的肩膀上!
基于 ZEGO 即构科技的音视频功能、
一起动手实操一下吧!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程