设置视频质量
内容介绍
在 TRTCCloud 中,您可以通过以下方式调整画质:
TRTCCloud.enterRoom 中的 TRTCAppScene 参数:用于选择您的应用场景。
TRTCCloud.setVideoEncoderParam:用于设置编码参数。
TRTCCloud.setNetworkQosParam:用于设置网络调控策略。
本文主要介绍如何配置上述参数,使 TRTC SDK 的画质效果符合您的项目需要。
您也可以参考以下 Demo:
支持的平台
iOS | Android | Mac OS | Windows | Web | Electron | Flutter |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
房间场景
场景类型 | 场景介绍 |
TRTC_APP_SCENE_VIDEOCALL | 在视频通话场景中,支持 720p 和 1080p 高清图像质量。单个房间可容纳最多300名同时在线用户,最多50人同时发言。 |
TRTC_APP_SCENE_LIVE | 在互动视频直播场景中,麦克风可以顺畅地打开/关闭,无需等待切换,主播延迟低至300毫秒以下。支持数十万并发观众用户的直播,播放延迟降至1000毫秒。 注意:在此场景下,您必须使用 TRTCParams 中的 role 字段指定当前用户的角色。 |
TRTC_APP_SCENE_AUDIOCALL | 在音频通话场景中,支持48 kHz双声道音频通话。单个房间可容纳最多300名同时在线用户,最多50人同时发言。 |
TRTC_APP_SCENE_VOICE_CHATROOM | 在互动音频直播场景中,麦克风可以顺畅地打开/关闭,无需等待切换,主播延迟低至300毫秒以下。支持数十万并发观众用户的直播,播放延迟降至1000毫秒。 注意:在此场景下,您必须使用 TRTCParams 中的 role 字段指定当前用户的角色。 |
TRTCVideoEncParam
推荐的配置
应用场景 | videoResolution | videoFps | videoBitrate |
视频通话(手机) | 640x360 | 15 | 550kbps |
视频会议(主画面 @ Mac Win) | 1280x720 | 15 | 1200kbps |
视频会议(主画面 @ 手机) | 640x360 | 15 | 900kbps |
视频会议(小画面) | 320x180 | 15 | 250kbps |
在线教育(老师 @ Mac Win) | 960x540 | 15 | 850kbps |
在线教育(老师 @ iPad) | 640x360 | 15 | 550kbps |
在线教育(学生) | 320x180 | 15 | 250kbps |
各字段详解
(int) videoResolution
编码分辨率(TRTCCloudDef.TRTC_VIDEO_RESOLUTION_ ),例如 640 x 360 是指编码出的画面的宽(像素) x 高(像素),我们在 TRTCVideoResolution 枚举定义里只定义了宽 >= 高的横屏(Landscape)分辨率,如果想要使用竖屏分辨率,需要将 resMode 设置为 Portrait。
注意:
由于很多硬件编解码器只支持能被 16 整除的像素宽度,所以 SDK 实际编码出的分辨率并不一定完全按照参数自定,而是会自动进行 16 整除修正。例如 640 x 360 的分辨率,在 SDK 内部有可能会适配为 640 x 368。
(int) videoResolutionMode
指横屏或竖屏分辨率(TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_ ),由于 TRTCVideoResolution 中只定义了横屏分辨率,如果您希望使用 360 x 640 这样的竖屏分辨率,就需要指定 resMode 为 TRTCVideoResolutionModePortrait。一般 PC 和 Mac 采用横屏(Landscape)分辨率,手机采用竖屏(Portrait)分辨率。
(int) videoFps
帧率(FPS),也就是每秒钟要编码多少帧画面。推荐设置为 15 FPS,这样既能保证画面足够流畅,又不会因为每秒帧数太多而拉低单幅画面的清晰度。如果您对流畅度要求比较高,可以设置为 20 FPS 或 25 FPS。但请不要设置 25 FPS 以上的数值,因为电影的常规帧率也只有 24 FPS。
(int) videoBitrate
视频码率(Bitrate),即每秒钟编码器输出多少 Kbit 的编码后的二进制数据。如果您将 videoBitrate 设置为 800kbps,那么每秒钟编码器会产生 800kbit 的视频数据,这些数据如果存储成一个文件,那么文件大小就是 800kbit,也就是100KB,也就是 0.1M。
视频码率并不是越高越好,它跟分辨率之间要有比较恰当的映射关系,如下表所示。
分辨率码率参照表
分辨率定义 | 宽高比 | 建议码率(VideoCall) | 建议码率(LIVE) |
TRTCVideoResolution_120_120 | 1:1 | 80kbps | 120kbps |
TRTCVideoResolution_160_160 | 1:1 | 100kbps | 150kbps |
TRTCVideoResolution_270_270 | 1:1 | 200kbps | 300kbps |
TRTCVideoResolution_480_480 | 1:1 | 350kbps | 525kbps |
TRTCVideoResolution_160_120 | 4:3 | 100kbps | 150kbps |
TRTCVideoResolution_240_180 | 4:3 | 150kbps | 225kbps |
TRTCVideoResolution_280_210 | 4:3 | 200kbps | 300kbps |
TRTCVideoResolution_320_240 | 4:3 | 250kbps | 375kbps |
TRTCVideoResolution_400_300 | 4:3 | 300kbps | 450kbps |
TRTCVideoResolution_480_360 | 4:3 | 400kbps | 600kbps |
TRTCVideoResolution_640_480 | 4:3 | 600kbps | 900kbps |
TRTCVideoResolution_960_720 | 4:3 | 1000kbps | 1500kbps |
TRTCVideoResolution_160_90 | 16:9 | 150kbps | 250kbps |
TRTCVideoResolution_256_144 | 16:9 | 200kbps | 300kbps |
TRTCVideoResolution_320_180 | 16:9 | 250kbps | 400kbps |
TRTCVideoResolution_480_270 | 16:9 | 350kbps | 550kbps |
TRTCVideoResolution_640_360 | 16:9 | 550kbps | 900kbps |
TRTCVideoResolution_960_540 | 16:9 | 850kbps | 1300kbps |
TRTCVideoResolution_1280_720 | 16:9 | 1200kbps | 1800kbps |
TRTCVideoResolution_1920_1080 | 16:9 | 2000kbps | 3000kbps |
TRTCNetworkQosParam
QosPreference
在网络带宽比较充裕的情况下,清晰和流畅是可以兼顾的,但当用户的网络并不理想时,究竟是优先保证清晰还是优先保证流畅?您可以通过指定 TRTCNetworkQosParam 中的 preference 参数来做出选择。
流畅优先(TRTCVideoQosPreferenceSmooth)
在用户遭遇弱网环境时,画面会变得模糊,且会有较多马赛克,但可以保持流畅或轻微卡顿。
清晰优先(TRTCVideoQosPreferenceClear)
在用户遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。
ControlMode
controlMode 参数选择 TRTCQosControlModeServer 即可,TRTCQosControlModeClient 是腾讯云研发团队做内部调试用的,请勿关注。
常见的误区
2. 帧率越高越好?
由于摄像头采集的画面是曝光阶段中所有现实物体的完整映射,所以并不是帧率越高,感官就越流畅,这一点跟游戏里的FPS是不一样的。恰恰相反,帧率过高,会拉低每帧画面的画质,也会减少摄像机的曝光时间,效果可能会更差。
4. 用 Wi-Fi 的时候就可以设置很高的分辨率和码率
并不是说 Wi-Fi 的网速是恒定不变的,如果离无线路由器较远, 或者路由器信道被占用,可能网速还不如 4G。
针对这种情况, TRTC SDK 提供了测速功能,可以在视频通话前先进行测速,根据打分值来确定网络好坏。