问题/风险描述:
在直播场景中,主播的推流分辨率已经设置为1080p,但观众端看到的画面还是很模糊。通过分析这个案例,发现问题不是出现在推流端分辨率过低导致的模糊。从仪表盘上观察推流数据发现,上行分辨率是1080p,但是推流的码率过低。1080p x 15fps的码率只有500kbps左右,在排除了推流端的网络带宽不足情况,跟客户确认了,应用侧设置码率是只有500kbps。
根据客户提供推流参数,我们对比复现了在相同1080p分辨率下,分别用1000kbps和500kbps的码率在直播模式下进行了测试。
如下图所示,在500kbps的码率下,即使是1080p的分辨率,画面相比1000kbps要模糊不小,所以判断这个案例是因为用客户设置的码率过低,编码器把画面压缩比设置过大,导致的画面细节丢失而产生的模糊现象。
解决方案:
根据上面的分析得知,因为没有正确设置推流端的码率,码率过小情况下,即使是带宽充足也会出现视频画面模糊问题。
解决办法是根据推流端画面分辨率和帧率,然后参考这里的表格设置适合的码率:实时音视频 设定画面质量 - 无 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会根据用户带宽自动调整码率,在带宽不足情况下,牺牲画面质量来保持通话的流畅性。