本文为您介绍解决连麦中观众在视频与语音模式切换时样式和布局不同步的方案。
背景
在主播与观众连麦的场景中,参与连麦的观众通常可以选择使用语音或者视频模式进行连麦,这两种模式下,直播间观众和麦上主播展示样式会有差异,传统的方式是当连麦中的观众进行视频连麦和语音连麦切换时,采用信令消息通知的方式来实现布局和样式变更。这类方案存在两个弊端 :
由于直播和信令的传输延迟差异大,会出现APP样式(比如头像、昵称等)和视频流布局的样式不一致。
若连麦观众在语音与视频模式之间频繁切换,则需要频繁更新混流布局,增大系统性风险。
方案
连麦观众在视频模式时,正常推送视频流用于连麦和混流 ,当从视频切换到语音模式时,客户端推送一张系统图片进行混流和占位 。同时依托SEI信息实时调整直播间的样式展示。
下文以连麦观众从视频模式切换到语音模式为例,为您阐述切换过程中的直播间样式处理方案:
对于直播间现有观众和麦上主播的推荐处理方式:
创建直播推流引擎AlivcLivePushConfig配置对象时,其pauseImg参数传递一张默认图片,当从视频连麦切换成语音连麦后,该默认图片用作连麦观众布局占位和混流,这样可以避免频繁更新混流。
连麦观众B调用muteLocalCamera接口关闭视频推送,观众B本端可以直接贴头像, 从视频连麦切换成语音连麦。
通知业务服务端连麦观众B视频关闭,业务服务端保存连麦观众B视频关闭状态,通过广播将连麦观众B视频关闭消息通知给麦上其他主播,主播收到该消息后贴连麦观众B的头像。
连麦观众B同步调用sendMessage接口(SEI接口),自定义视频关闭/打开消息体,发送连麦观众B视频关闭SEI消息(用于通知麦下普通观众)。
麦下普通观众解析自定义SEI消息,连麦观众B视频关闭,查询连麦观众B的小窗位置信息,贴头像。
连麦观众B的小窗位置信息在周期性SEI中,具体请参见基于SEI实现布局平滑切换。
对于新加入直播间观众的推荐处理方式 :
进入直播间,从业务服务端获取直播信息,播放URL,使用CDN播放地址播放视频流。
从业务服务端获取直播间信息,主播和连麦观众基本信息、布局信息,主播和连麦观众的视频打开/关闭状态。
针对连麦观众是视频连麦的,在视频窗口叠加用户信息;语音连麦观众,直接显示头像信息。
连麦观众B的小窗位置信息在周期性SEI中,具体请参见基于SEI实现布局平滑切换。