合流布局
从 5.1.1
版本(RCRTCMixConfig#getVersion()
== 2)开始,RCRTCMixConfig
中新增加了 setCustomMode
方法,功能为自定义模式开关,打开后,主播用户可以更加灵活的控制合流布局,建议将其设置为 true
,新版本兼容老版本逻辑,升级 SDK
不需要修改代码。
画布和声音配置
-
画布指的是多道视频流新合成后视频背景宽高,不管哪种合流布局方式,都是基于画布宽高范围内渲染,此配置为可选设置。如不指定画布宽高则默认为 360 * 640 帧率为25。
RCRTCMixConfig config = new RCRTCMixConfig();
RCRTCMixConfig.MediaConfig mediaConfig = new RCRTCMixConfig.MediaConfig();
config.setMediaConfig(mediaConfig);
//视频输出配置
RCRTCMixConfig.MediaConfig.VideoConfig videoConfig = new RCRTCMixConfig.MediaConfig.VideoConfig();
mediaConfig.setVideoConfig(videoConfig);
//大流视频的输出参数
RCRTCMixConfig.MediaConfig.VideoConfig.VideoLayout normal = new RCRTCMixConfig.MediaConfig.VideoConfig.VideoLayout();
videoConfig.setVideoLayout(normal);
//推荐宽、高、帧率参数值可以通过默认视频流的配置获取,也可以根据实际需求来自定义设置
//如不设置宽高值则 服务端将使用默认宽高 360 * 640
//例:发布的视频分辨率为720 * 1280,如果不设置则观众端看到的视频分辨率为 360 * 640,
//所以如果想让观众端看到的视频分辨率和发布视频分辨率一致,则应从发布的视频流中获取分辨率配置并设置到 mediaConfig 中
RCRTCVideoStreamConfig defaultVideoConfig = RCRTCEngine.getInstance().getDefaultVideoStream().getVideoConfig();
int fps = defaultVideoConfig.getVideoFps().getFps();
int width = defaultVideoConfig.getVideoResolution().getWidth();
int height = defaultVideoConfig.getVideoResolution().getHeight();
normal.setWidth(width); //视频宽
normal.setHeight(height); //视频高
normal.setFps(fps); //视频帧率
//小流视频的输出参数和标准视频流设置方法是一样的,不同的只是输出参数
//RCRTCMixConfig.MediaConfig.VideoConfig.VideoLayout tinyVideo = new RCRTCMixConfig.MediaConfig.VideoConfig.VideoLayout();
//videoConfig.setTinyVideoLayout(tinyVideo);
//设置渲染裁剪模式(可选)
//裁剪模式共分为两种: VideoRenderMode.CROP/VideoRenderMode.WHOLE(默认)
videoConfig.setExtend(new RCRTCMixConfig.MediaConfig.VideoConfig.VideoExtend(isCrop ? RCRTCMixConfig.VideoRenderMode.CROP : RCRTCMixConfig.VideoRenderMode.WHOLE));
//音频输出配置(可选)
//mediaConfig.setAudioConfig(new RCRTCMixConfig.MediaConfig.AudioConfig(32)); -
视频合流中和
RCRTCMixConfig#setCustomMode
方法场景介绍:/**
*
* 1.customMode 参数设置为 true 时:
*
* 1.1.当没有设置{@link RCRTCMixConfig#setCustomMixAudio(List)}参数时,房间中所有 音频流会自动合并,观众能听到所有主播声音。
*
* 1.2.当设置{@link RCRTCMixConfig#setCustomMixAudio(List)}参数为没有数据的集合(new ArrayList<RCRTCMixConfig.CustomLayoutList.CustomMixAudio>(16);)时,不合并音频流,观众仅能听见本房间主播声音。
*
* 1.3.当设置{@link RCRTCMixConfig#setCustomMixAudio(List)}参数不为 空 时,会将{@link RCRTCMixConfig.CustomLayoutList.CustomMixAudio#setAudioStream(RCRTCStream)}设置的音频流合流到直播流中,观众就能听到合并的音频。
*
* 1.4.当没有设置{@link RCRTCMixConfig#setCustomLayouts(List)}参数时,且已经设置{@link RCRTCMixConfig#setLayoutMode(MixLayoutMode)}参数,即按照合流布局合流。
*
* 1.5.当设置{@link RCRTCMixConfig#setCustomLayouts(List)}}参数为没有数据的集合(new ArrayList<CustomLayout>(16))时,所有人视频都不合流。观众仅能看见本地主播视频。
*
* 1.6.当已经设置{@link RCRTCMixConfig#setCustomLayouts(List)}}参数 且{@link RCRTCMixConfig#setLayoutMode(MixLayoutMode)}参数为 SUSPENSION 或 ADAPTIVE 时,按传入的{@link
* RCRTCMixConfig.CustomLayoutList.CustomLayout#setCustomLayouts(List)}视频流合流。
*
* 1.7.当已经设置{@link RCRTCMixConfig#setCustomLayouts(List)}}参数 且{@link RCRTCMixConfig#setLayoutMode(MixLayoutMode)}参数为 CUSTOM 时,按传入的{@link
* RCRTCMixConfig.CustomLayoutList.CustomLayout#setCustomLayouts(List)} 视频流和合流布局进行合流。
*
* 2.customMode 参数设置为 false 时:全部合并所有主播音频流,视频流合并逻辑按照{@link RCRTCMixConfig#setLayoutMode(MixLayoutMode)} 参数合并。如果参数 {@link RCRTCMixConfig#setLayoutMode(MixLayoutMode)} 为 CUSTOM 时,视频合流逻辑按照设置的{@link RCRTCMixConfig#setCustomLayouts(List)}} 集合合并。
*
* @param customMode 默认true
*/
config.setCustomMode(true);
合流布局
直播合流视频布局目前分为三种:1. 自定义布局;2. 悬浮布局(默认);3. 自适应布局.下面分别介绍布局效果。