【最佳实践】巡检项:实时音视频 (TRTC) 检查原生平台 SDK 是否根据辅流/小流视频分辨率和帧率设置了合理的视频码率

2023-05-09 11:23:10 浏览数 (2)

问题/风险描述:

在直播场景中,主播的推流分辨率已经设置为1080p,但观众端看到的画面还是很模糊。通过分析这个案例,发现问题不是出现在推流端分辨率过低导致的模糊。从仪表盘上观察推流数据发现,上行分辨率是1080p,但是推流的码率过低。1080p x 15fps的码率只有500kbps左右,在排除了推流端的网络带宽不足情况,跟客户确认了,应用侧设置码率是只有500kbps。

根据客户提供推流参数,我们对比复现了在相同1080p分辨率下,分别用1000kbps和500kbps的码率在直播模式下进行了测试。

如下图所示,在500kbps的码率下,即使是1080p的分辨率,画面相比1000kbps要模糊不小,所以判断这个案例是因为用客户设置的码率过低,编码器把画面压缩比设置过大,导致的画面细节丢失而产生的模糊现象。

1000kbps画面质量1000kbps画面质量
500kbps画面质量500kbps画面质量

解决方案:

根据上面的分析得知,因为没有正确设置推流端的码率,码率过小情况下,即使是带宽充足也会出现视频画面模糊问题。

解决办法是根据推流端画面分辨率和帧率,然后参考这里的表格设置适合的码率:实时音视频 设定画面质量 - 无 UI 集成方案 - 文档中心 - 腾讯云

下面是设置Native SDK推流端设置辅路视频参数setSubStreamEncoderParam的接口调用代码:

代码语言:javascript复制
TRTCCloudDef.TRTCVideoEncParam param = new TRTCCloudDef.TRTCVideoEncParam();
param.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1920_1080;
// 设置码率 2000kbps
param.videoBitrate = 2000;
// 设置最小码率 1200kbps ,一般为正常码率的60%
param.minVideoBitrate = 1200;
param.videoResolutionMode = TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
param.enableAdjustRes = false;
param.videoFps = 25;
// 设置辅路流的码率
mTRTCCloud.setSubStreamEncoderParam(param);

下面是设置Native SDK推流端设置小流视频参数enableEncSmallVideoStream的代码:

代码语言:javascript复制
// 小画面推流,建议只在桌面端 PC或者MAC上开启
TRTCCloudDef.TRTCVideoEncParam param = new TRTCCloudDef.TRTCVideoEncParam();
param.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_640_360;
// 设置码率 2000kbps
param.videoBitrate = 400;
// 设置最小码率 1200kbps ,一般为正常码率的60%
param.minVideoBitrate = 240;
param.videoResolutionMode = TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
param.enableAdjustRes = false;
param.videoFps = 15;
// 设置辅路流的码率
mTRTCCloud.enableEncSmallVideoStream(true, param);

注意事项:

在不同的场景对画面的质量要求是不一样的,应该根据场景设置适合的码率,比如广播影视比普通视频通话对画面要求要高得多,这时候可以设置更高的码率。

另外,如果设置最小码率,SDK会根据用户带宽自动调整码率,在带宽不足情况下,牺牲画面质量来保持通话的流畅性。

0 人点赞