在视频通话或视频互动直播场景下,视频画面是否清晰流畅,很大程度上决定了用户体验。视频编码属性包含视频分辨率、帧率、码率等影响视频质量的参数设置。你可以通过设置视频编码属性,控制视频流在不同网络条件下的展示方式。百家云 SDK 提供了 setVideoEncoderParam 方法设置视频编码属性。此方法可以在任何阶段调用。如果在加入房间后不需要重新设置视频编码属性,百家云建议在 startLocalPreview 前调用 setVideoEncoderParam,以加快首帧出图的时间。相关函数接口在 electron-sdk 2.0.7 及以上版本支持
视频编码属性的参数如下所示:
上述参数设置的均为理想情况下的最大值。当视频因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,取值会尽量接近最大值。
// 设置大流推送视频编码参数 this.client.setVideoEncoderParam({ bandWidth: 500, width: 640, height: 480, frameRate: 15, resolutionMode: BRTCVideoResolutionMode.BRTC_VIDEO_RESOLUTION_MODE_LANDSCAPE, codec: BRTCVideoCodec.BRTC_VIDEO_CODEC_H264 //目前只支持h264 可以不用指定该参数 })
通常来讲,视频编码参数的选择要根据产品实际情况和场景来确定。比如,在一对一教学场景下,老师和学生的窗口比较大,要求分辨率会高一点,随之帧率和码率也要高一点; 如果是一对四场景, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。
一般可按下列场景中的推荐值进行设置。
在视频旋转场景中,我们主要关注播放端的行为。setVideoEncoderRotation 设置不影响本地画面的预览方向,但会影响房间中其他用户所观看到(以及云端录制文件)的画面方向。
// 设置编码时视频旋转180度 this.client.setVideoEncoderRotation(BRTCCloud.BRTCVideoRotation.BRTC_VIDEO_RATATION_180)
默认情况下,SDK 在编码时不对视频作镜像操作。你可以通过 setVideoEncoderMirror 参数来设置视频编码的镜像模式决定远端用户看到的视频画面。
// 打开远端镜像功能 this.client.setVideoEncoderMirror(true)
在网络带宽比较充裕的情况下,清晰和流畅是可以兼顾的,但当用户的网络并不理想时,究竟是优先保证清晰还是优先保证流畅?您可以通过指定 setNetworkQosParam 中的 BRTCDef.BRTCNetworkQosParam 参数来做出选择。
// 设置网络流控策略为保流畅 this.client.setNetworkQosParam({preference: BRTCCloud.BRTCVideoQosPreference.BRTC_VIDEO_QOS_PREFERENCE_SMOOTH}) // 设置网络流控策略为保清晰 //this.client.setNetworkQosParam({preference: BRTCCloud.BRTCVideoQosPreference.BRTC_VIDEO_QOS_PREFERENCE_CLEAR})
本功能需要在推流前设定,独立设置小流的分辨率、帧率和码率等信息。
在拉流端,使用函数 setRemoteVideoStreamType 选定远端用户的大小画面。
// 打开双路流模式,设置小流视频编码参数推流 this.client.enableEncSmallVideoStream(true, { bandWidth: 70, width: 160, height: 120, frameRate: 15 }) // 开启本地视频预览画面 this.client.startLocalPreview(); // 开启本地视频推流到云端 this.client.muteLocalVideo(false); // 指定渲染远端用户的大流画面 this.client.setRemoteVideoStreamType(remoteUserId, BRTCCloud.BRTCVideoStreamType.BRTC_VIDEO_STREAM_TYPE_SMALL) // 拉取远端用户 remoteUserId 的低分辨率画面(主画面和低分辩率画面只能二选一) this.client.startRemoteView(remoteUserId, view, BRTCCloud.BRTCVideoStreamType.BRTC_VIDEO_STREAM_TYPE_SMALL); // 播放 remoteUserId 的主画面 //this.client.startRemoteView(remoteUserId, view, BRTCCloud.BRTCVideoStreamType.BRTC_VIDEO_STREAM_TYPE_BIG); // 开始接收指定用户的远端视频流 this.client.muteRemoteVideoStream(remoteUserId, false)
目前在网络不理想的环境下,自动大流关闭保留小流,如果网络条件还不好就关闭视频,只留音频。如果网络变好,会从只留音频变成恢复推小流,如果网络还很宽裕,再恢复成推大小流。
设置视频编码参数
在视频通话或视频互动直播场景下,视频画面是否清晰流畅,很大程度上决定了用户体验。
视频编码属性包含视频分辨率、帧率、码率等影响视频质量的参数设置。你可以通过设置视频编码属性,控制视频流在不同网络条件下的展示方式。
百家云 SDK 提供了 setVideoEncoderParam 方法设置视频编码属性。此方法可以在任何阶段调用。
如果在加入房间后不需要重新设置视频编码属性,百家云建议在 startLocalPreview 前调用 setVideoEncoderParam,以加快首帧出图的时间。
相关函数接口在 electron-sdk 2.0.7 及以上版本支持
分辨率、帧率和码率
视频编码属性的参数如下所示:
上述参数设置的均为理想情况下的最大值。当视频因网络环境等原因无法达到设置的分辨率、帧率或码率的最大值时,取值会尽量接近最大值。
视频参数推荐值
通常来讲,视频编码参数的选择要根据产品实际情况和场景来确定。比如,在一对一教学场景下,老师和学生的窗口比较大,要求分辨率会高一点,随之帧率和码率也要高一点; 如果是一对四场景, 老师和学生的窗口都比较小,分辨率可以低一点,对应的码率帧率也会低一点,以减少编解码的资源消耗和缓解下行带宽压力。
一般可按下列场景中的推荐值进行设置。
编码器输出方向设置
在视频旋转场景中,我们主要关注播放端的行为。setVideoEncoderRotation 设置不影响本地画面的预览方向,但会影响房间中其他用户所观看到(以及云端录制文件)的画面方向。
镜像模式
默认情况下,SDK 在编码时不对视频作镜像操作。你可以通过 setVideoEncoderMirror 参数来设置视频编码的镜像模式决定远端用户看到的视频画面。
Qos 策略设定
在网络带宽比较充裕的情况下,清晰和流畅是可以兼顾的,但当用户的网络并不理想时,究竟是优先保证清晰还是优先保证流畅?您可以通过指定 setNetworkQosParam 中的 BRTCDef.BRTCNetworkQosParam 参数来做出选择。
大小流编码
本功能需要在推流前设定,独立设置小流的分辨率、帧率和码率等信息。
在拉流端,使用函数 setRemoteVideoStreamType 选定远端用户的大小画面。
视频自动回退机制
目前在网络不理想的环境下,自动大流关闭保留小流,如果网络条件还不好就关闭视频,只留音频。如果网络变好,会从只留音频变成恢复推小流,如果网络还很宽裕,再恢复成推大小流。