在视频通话或视频互动直播场景下,视频画面是否清晰流畅,很大程度上决定了用户体验。视频编码属性包含视频分辨率、帧率、码率等影响视频质量的参数设置。你可以通过设置视频编码属性,控制视频流在不同网络条件下的展示方式。BRTC SDK 提供了 setVideoEncoderParam 方法设置视频编码属性。
视频编码属性的参数如下所示:
上述参数设置的均为理想情况下的最大值。当视频因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,取值会尽量接近最大值。
BRTCDef.BRTCVideoEncParam videoEncParams = new BRTCDef.BRTCVideoEncParam(); videoEncParams.width = 640; videoEncParams.height = 480; videoEncParams.bandWidth = 400; videoEncParams.fps = 15; engine.setVideoEncoderParam(videoEncParams);
通常来讲,视频编码参数的选择要根据产品实际情况和场景来确定。比如,在一对一教学场景下,老师和学生的窗口比较大,要求分辨率会高一点,随之帧率和码率也要高一点; 如果是一对四场景, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。
一般可按下列场景中的推荐值进行设置。
在视频旋转场景中,我们主要关注播放端的行为。setVideoEncoderRotation 设置不影响本地画面的预览方向,但会影响房间中其他用户所观看到(以及云端录制文件)的画面方向。
engine.setVideoEncoderRotation(BRTCDef.BRTCVideoRotation_0);
默认情况下,SDK 在编码时不对视频作镜像操作。如果您的使用场景比较特殊,需要对编码的视频画面进行镜像处理,SDK 提供了两种方式来实现:
一、通过 setVideoEncoderMirror 参数来设置。它的布尔参数表示是否执行水平方向上的镜像,不支持垂直镜像。二、通过 BRTCEx 的 setVideoEncodeMirrorMode 方法来设置。这个方法是 BRTC Android SDK 的扩展方法,您必须将 sharedInstance() 强转为 BRTCEx 才能调用。它支持水平、垂直以及水平+垂直这三种镜像。
setVideoEncodeMirrorMode
无论哪种方式:
engine.setVideoEncoderMirror(isMirror);
在网络带宽比较充裕的情况下,清晰和流畅是可以兼顾的。但当用户的网络并不理想时,究竟是优先保证清晰还是优先保证流畅?您可以通过调用 setNetworkQosParam 方法来做出选择。
engine.setNetworkQosParam(new BRTCDef.BRTCNetworkQosParam(BRTCVideoQosPreference.BRTCVideoQosPreferenceClear, 1));
本功能需要在推流前设定,独立设置小流的分辨率、帧率和码率等信息。
在拉流端,使用 setRemoteVideoStreamType 方法选定远端用户的大小画面。
// 推流端: BRTCDef.BRTCVideoEncParam smallParam = new BRTCDef.BRTCVideoEncParam(); smallParam.width = 320; smallParam.height = 180; smallParam.bandWidth = 100; smallParam.fps = 15; //开启推送小流功能 engine.enableEncSmallVideoStream(true, smallParam); // 拉流端: engine.muteRemoteAudio(userID, false); engine.muteRemoteVideoStream(userID, false); engine.setRemoteVideoStreamType(userID, BRTCDef.BRTCVideoStreamType.BRTCVideoStreamTypeSmall); engine.startRemoteView(userID, BRTCDef.BRTCVideoStreamType.BRTCVideoStreamTypeSmall, playCanvas);
"自动回退"是指在视频推流过程中,如果遇到如弱网、CPU负载较高等条件,是否自动关闭推流,只保留音频,或者在运行环境条件改善后再恢复原来的状态的调节机制。当调用 setVideoFallbackEnable 方法开启自动回退机制时,当 SDK 检测到网络不理想时,会自动关闭大流、保留小流。如果网络条件继续恶化,就会彻底关闭视频,只留音频。如果网络恢复了,会从只留音频变成恢复推小流,如果网络还很宽裕,再恢复大流。
当每次自动关闭和恢复视频流时,您会通过此回调 onLocalVideoFallback 收到通知。
BRTCListener brtcListener = new BRTCListener() { @Override public void onLocalVideoFallback(boolean isFallback) { if (isFallback) { Log.d(TAG, "fallback to publish audio only"); } else { Log.d(TAG, "recover to publish video data"); } } //... }; BRTC engine = BRTC.sharedInstance(context); engine.setListener(brtcListener); engine.setVideoFallbackEnable(true);
设置视频编码参数
在视频通话或视频互动直播场景下,视频画面是否清晰流畅,很大程度上决定了用户体验。视频编码属性包含视频分辨率、帧率、码率等影响视频质量的参数设置。你可以通过设置视频编码属性,控制视频流在不同网络条件下的展示方式。BRTC SDK 提供了 setVideoEncoderParam 方法设置视频编码属性。
分辨率、帧率和码率
视频编码属性的参数如下所示:
上述参数设置的均为理想情况下的最大值。当视频因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,取值会尽量接近最大值。
视频参数推荐值
通常来讲,视频编码参数的选择要根据产品实际情况和场景来确定。比如,在一对一教学场景下,老师和学生的窗口比较大,要求分辨率会高一点,随之帧率和码率也要高一点; 如果是一对四场景, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。
一般可按下列场景中的推荐值进行设置。
编码器输出方向设置
在视频旋转场景中,我们主要关注播放端的行为。setVideoEncoderRotation 设置不影响本地画面的预览方向,但会影响房间中其他用户所观看到(以及云端录制文件)的画面方向。
编码镜像模式
默认情况下,SDK 在编码时不对视频作镜像操作。如果您的使用场景比较特殊,需要对编码的视频画面进行镜像处理,SDK 提供了两种方式来实现:
一、通过 setVideoEncoderMirror 参数来设置。它的布尔参数表示是否执行水平方向上的镜像,不支持垂直镜像。
二、通过 BRTCEx 的
setVideoEncodeMirrorMode方法来设置。这个方法是 BRTC Android SDK 的扩展方法,您必须将 sharedInstance() 强转为 BRTCEx 才能调用。它支持水平、垂直以及水平+垂直这三种镜像。无论哪种方式:
Qos(Quality of Service)策略设定
在网络带宽比较充裕的情况下,清晰和流畅是可以兼顾的。但当用户的网络并不理想时,究竟是优先保证清晰还是优先保证流畅?您可以通过调用 setNetworkQosParam 方法来做出选择。
大小流
本功能需要在推流前设定,独立设置小流的分辨率、帧率和码率等信息。
在拉流端,使用 setRemoteVideoStreamType 方法选定远端用户的大小画面。
视频自动回退机制
"自动回退"是指在视频推流过程中,如果遇到如弱网、CPU负载较高等条件,是否自动关闭推流,只保留音频,或者在运行环境条件改善后再恢复原来的状态的调节机制。
当调用 setVideoFallbackEnable 方法开启自动回退机制时,当 SDK 检测到网络不理想时,会自动关闭大流、保留小流。如果网络条件继续恶化,就会彻底关闭视频,只留音频。如果网络恢复了,会从只留音频变成恢复推小流,如果网络还很宽裕,再恢复大流。
当每次自动关闭和恢复视频流时,您会通过此回调 onLocalVideoFallback 收到通知。