直播连麦技术闭坑篇
直播音质如何改善
1、在使用 anyRTC SDK 进行直播的时候,SDK 默认是打开 AEC (回声消除)功能的,该功能对音质有一定的损耗,所以在开播之前建议先关闭该功能,当跟其他人建立起直播连麦后在打开该功能,避免互动的时候产生回声现象,当连麦结束,可以继续关闭该功能。
// true:不使用内置AEC功能,false:使用内置AEC功能
pEngine->setParameters("{\"Cmd\":\"SetExternAec\", \"Enable\": true}");
2、在开播之前,对音频属性进行设定,默认使用 32 KHz采样率,单声道,编码码率最大值为 18 Kbps,anyRTC 支持从8kHz(窄带)到48kHz(全频带)采样,最高支持 196K 的码率,开发者可以根据场景进行设定,设定的太大效果不见得好,要找到自己的适合的场景,一般直播场景使用48 KHz采样率,双声道,编码码率设定为 56 Kbps,人声和音乐效果达到最优,且效率最高。64Kbps的码率是超宽带,不管是人声通话还是音乐直播,这样的频宽都是足够的。
3、户外直播场景,建议打开 AI 降噪功能。该功能创新性地应用深度学习技术,实时分离语音和背景噪声,清晰提取人声,有效消除环境中的各类噪音,让用户畅享更清晰高效的在线音视频通话体验。
// 1:使用AI降噪功能,0:关闭AI降噪功能
pEngine->setParameters("{\"Cmd\":\"SetAudioAiNoise\", \"Enable\": 1}");
美颜方案
直接集成第三方美颜 SDK ,使用第三方面美颜公司提供的相机功能,在配合anyRTC 自采集功能实现美颜+贴纸功能。
推流方案
购买各大云厂商的 CDN 服务,可以根据自身的体量以及产品的运营区域,对应选择。如果产品是出海的产品,建议使用网宿,如果产品在国内,各大厂商的 CDN 服务无大的差别。
主播旁路推流如何选择方案
anyRTC 在2016首次推出客户端4连麦功能就得到了客户的一致好评,随着跟客户的不停磨合,anyRTC 推出了客户端推流 CDN 组件和**服务端推流 CDN **,两种方式相互结合,打造天衣无缝的旁路直播方案。
不管是客户端推流 CDN 组件还是服务端推流CDN,anyRTC 都秉承着功能简单,回调一致,无缝切换的原则去设计旁路推流组件。
- 开始推流:支持推多个地址
- 结束推流
- 直播合流模式:存音频合流直播、视频直播音频合流直播、视频合流直播
- 合流布局:自定义布局,根据业务场景自行布局:大小屏,PK屏幕等等
- 合流背景:对推流的背景进行自定义设定
- 水印:对合流的视图添加水印操作
- SEI:支持在视频帧插入媒体附属信息,保证视频帧与媒体附属信息严格同步
客户端推流 CDN 组件
anyRTC 开发该组件的初衷是为了给企业减负,大家都知道市面上旁路推流的价格非常昂贵,创业者本身就处于缺少现金,但又想给自己的直播间添加互动连麦旁路玩法,顾客户端推流 CDN 组件肩负为企业肩负的任务而出世。
实现流程:
1.主播开始直播,并开启本地推流开始推流
2.观众进入直播间,以游客的角色进入 RTC 拉去主播的实时流
3.观众申请连麦,把角色更改为主播。主播端收到观众的流后,调用本地推流组件的"setLiveTranscoding"方法进行混流布局
4.观众挂断,把角色更改为游客的,主播端收到观众下麦的回调,调用本地推流组件的"setLiveTranscoding"方法进行更改布局
5.H5端可接入m3u8格式的视频流进行观看直播
优势:
- 省钱:无需支付旁路推流的钱
- 延迟小:主播端直接推流,减少了传输过程中的延迟损耗
劣势
- 手机发烫:手机端直接推流,对手机端的性能有些损耗
- 弱网环境下,影响直播的效果,主播端发两路流,考验主播端的上行网络。
服务端推流 CDN
在客户使用客户端推流 CDN 组件的过程中,遇到一些客户想使用 Web 端去做旁路直播;或者用户的终端手机类型鱼龙混杂,一些低端手机没办法直接使用客户端推流 CDN 组件;还有一些用户的网络环境极其恶劣,用客户端推流 CDN 组件影响直播效果。基于以上客户的诉求 anyRTC 给出了第二种旁路解决方案:服务端推流CDN。
服务端推流 CDN,主播端调用接口,让服务端去完成合流并转推 CDN 的功能,对本地没有任何影响。
实现流程:
1.主播开始直播,并开启服务端旁路推流
2.观众进入直播间,以游客的角色进入 RTC 拉去主播的实时流
3.观众申请连麦,把角色更改为主播。主播端收到观众的流后,调用服务端接口"setLiveTranscoding"方法进行混流布局
4.观众挂断,把角色更改为游客的,主播端收到观众下麦的回调,调用服务端接口"setLiveTranscoding"方法进行更改布局
5.H5端可接入m3u8格式的视频流进行观看直播
-
优势:
- 性能差的手机,也能作为主播端进行旁路直播
- 当客户端网络情况不好的时候,对直播的影响较小
- Web端也能进行直播
劣势
-
客户成本增加
-
延迟大:音视频流经过服务端中转并在旁路推流服务中进行合成转码在进行推流。
最佳实践
1.Web当主播的时候使用服务端推流 CDN 功能即可
2.如果用户终端的设备是低端设备的主播,使用服务端推流CDN功能,反之使用客户端旁路推流插件
3.客户端使用RTC实时检测网络情况,如果网络情况出现持续不好的情况,关掉本地旁路推流组件,调用服务端推流 CDN 接口进行无缝替换
4.如果是语音连麦场景,建议直接使用客户端旁路推流
5.如果是2人PK直播场景,使用客户端旁路推流 CDN 组件,并
其他问题
房间内跟主播连麦怎么实现?
申请连麦流程:
1.使用RTM SDK 发送点对点消息,向主播发送连麦请求,如果需要展示连麦列表,需要跟自己的业务服务进行上报连麦事件
2.主播同意连麦请求
通信流程:
1.游客开启本地摄像头并调用 RTC 切换角色的接口,设置为主播
2.主播收到游客成为主播的回调,本地更改布局,根据当前模式
主播间 PK 连麦怎么实现?
调用anyRTC 跨房间连麦接口进行 PK 连麦。
实现流程:
1.主播A通过业务接口获取正在直播的主播列表
2.选中一个主播B,并发送PK邀请链接
3.主播B同意连麦PK,主播A和B,调用跨房间连麦接口,主播A把主播B的流转发到A房间,主播B把主播A的流转发到B房间进行实时互动
4.各方主播房间里的粉丝对自己的主播进行打call加油
一起X(看电影,看球赛)怎么实现?
调用anyRTC 插入媒体流功能进行实现。
实现流程:
1.主播 通过接口向房间里插入一条媒体流,该媒体流会以一个用户的身份进入直播间
2.其他观众接收订阅该媒体流,平均延迟在200ms左右,达到一起看的效果
聊天互动消息怎么实现?
调用 anyRTC RTM 频道消息功能进行实现。
实现流程:
1.主播和游客在加入直播房间的时候,同时加入RTM频道
2.当有用户进入房间的时候,在加入频道成功后,发送一条进入房间的自定义频道消息
3.聊天以及礼物消息皆可通过自定义频道消息来实现
视频秒开怎么优化?
1.保证网速:网速的好坏是视频秒开的直接因素
2.做预加载:当视频将要离开的时候,预加载下一条直播视频源,可以有效解决第一针出图速度
3.优化关键字策略,尽量调小关键字的时长
4.播放器线程优化:拉流线程和解码线程分开
......
结语
直播连麦中还有一些麦序功能、加油团、连麦权限设定、版本兼容、连麦视频布局等等业务上的逻辑,这些需要靠产品经理去强化。
anyRTC 直播连麦demo已经上线,有需要的联系客服索取源码。该demo 展示3种直播连麦的方式,实时互动连麦方式,客户端推流CDN的形式以及服务端推流CDN的形式,有需要的朋友,联系我们吧~