在今年Facebook F8大会上,Facebook宣布了将在Instagram Direct上开放一对一与群组视频聊天功能,这种新功能能够帮助用户使用实时视频聊天来相互链接,即便是他们没能相聚在一块儿。毫无疑问,社交领域的一线平台开始愈来愈重视实时音视频技术在社交领域的应用。html
不过,在Instagram正准备增长视频社交功能以前,咱们国内的某款已上市社交应用,已经基于实时音视频基础能力,开始拓展新的玩法了。并且,听说上线后,马上成为用户们正向体验的功能,用户活跃与留存双破新高。这个新功能就是KTV。咱们也用电脑+手机录制了一段视频,你们能够感觉下这款设计应用中的多人KTV功能(若是你只想听效果,请空降38秒处)。git
在社交直播中,有人是靠颜值上位,有人则是以优美的声线取胜,KTV正是为后者准备的。从上面这个视频能够看出,具体功能以下:github
房主创建房间后,开启KTV功能,上麦;算法
房主在线点歌,歌曲与KTV歌房中常见MV同样,包括画面、字幕伴奏;网络
观众能够申请上麦,进行点歌、演唱;post
上麦的观众在演唱时可自主调节伴奏与人声音量;优化
房主可控制歌曲暂停、切歌。编码
你可能想问:听上去就是直播秀场,这有什么差异么?其实,二者之间在功能和体验都存在差异。设计
在功能方面如表格所示,秀场直播主播演唱时,观众能够文字参与评论、互动,也能够上麦。但观众上麦后只能聊天,不能上台演唱。而一块儿KTV的伴奏曲库存放于线上,任何观众均可以在线点歌、演唱。orm
从体验角度讲,秀场直播只是主播的我的秀。秀场至关因而主播的“独乐乐”。而一块儿KTV更接近线下KTV体验。每一个人均可以点歌,都有机会演唱,是一种互动体验的升级。
一块儿KTV与咱们曾分享过的“赛事直播”场景很像,都是基于实时音视频技术的基本能力拓展而来的。从表面来看,一块儿KTV功能很简单,但其中存在一些难点:
歌曲控制同步
“一块儿KTV”强调的是要“一块儿”唱,主播能够邀请多个听众上麦,你方唱罢,我登场,每一个人都有机会站在聚光灯下。
在这个过程当中,“话筒”会按顺序传递给不一样连麦观众,主播仍然能够控制歌曲的播放,如切歌、暂停等操做。但若是采用RTMP传输,网络延时较高。那么网络状况较好状况下,当主播暂停歌曲或切歌后,可能连麦演唱的观众在3~4秒后才会发现,或者歌曲已经开始,下一个演唱者还没能开唱。若是网络状况差,延迟可能会超过10秒。
高音质、高画质
每一个站上台演唱的人都想展示本身真正的技术。若是没法以高质量音质传输,无疑会影响用户体验。同时,该场景下的MV画面至关于连麦中的视频画面,卡顿、模糊等问题一样存在。开发者若是但愿经过自研实现,须要基于UDP协议进行传输,并在边缘节点的部署、主干网络拥塞、弱网传输等方面作出优化策略。
如咱们在《详解音视频直播中的低延时》中所说,开发者除了要对网络传输进行优化,还须要尽量优化编解码算法,下降音视频在端上的延时。
咱们具体研究了该功能的实现方式,开发者们能够点击这里查看详细开发步骤,或者也能够经过Github直接获取 源码,本身动手尝试一下。咱们的实现逻辑如上图所示,具体逻辑是这样的:
房主开启“一块儿KTV”功能后成为演唱者;
房主端从第三方在线曲库读取MV歌曲数据;
观众上麦申请被房主经过后,可在线点歌,并开始排麦;
房主的歌声与MV伴奏在本地通过混音、编码,基于UDP协议传输至Agora SD-RTN™;
而后咱们经过UDP协议将房主K歌歌声与MV画面传输给观众;
轮到播放上麦观众所点的歌时,观众成为演唱者,除了没有歌曲控制权限外,歌曲演唱、混音、编码、传输流程与房主一致。
除实现主要的功能以外,咱们还须要支持传输720p以上的高清画面。这是为了保证在手机上MV(包含了歌词)的观看体验。同时,还须要额外开发包括音量调节、切歌、演唱者切换等主播控制功能。
如对咱们的方案感兴趣,或遇到开发问题,欢迎访问声网 Agora问答版块,发帖与声网工程师交流。