设定画面质量

最近更新时间:2019-08-19 11:03:32

内容介绍

在 TRTCCloud 中,您可以通过三个手段来调整画质:

  • enterRoom 中的 TRTCAppScene 参数: 用来选择您的应用场景。
  • setVideoEncoderParam:用来设置编码参数。
  • setNetworkQosParam:用来设置网络调控策略。
    本文主要介绍如何配置这些手段,使 TRTC SDK 的画质效果符合您的项目需要。

支持的平台

iOS Android Mac OS Windows 微信小程序 Chrome浏览器

TRTCAppScene

  • VideoCall
    对应视频通话场景,即绝大多数时间都是两人或两人以上视频通话的场景,内部编码器和网络协议优化侧重流畅性,降低通话延迟和卡顿率。

  • LIVE
    对应直播场景,即绝大多数时间都是一人直播,偶尔有多人视频互动的场景,内部编码器和网络协议优化侧重性能和兼容性,性能和清晰度表现更佳。

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

各字段详解

  • (TRTCVideoResolution) videoResolution
    编码分辨率,例如 640 x 360 是指编码出的画面的宽(像素) x 高(像素),我们在 TRTCVideoResolution 枚举定义里只定义了宽 >= 高的横屏(Landscape)分辨率,如果想要使用竖屏分辨率,需要将 resMode 设置为 Portrait。

    注意:

    由于很多硬件编解码器只支持能被 16 整除的像素宽度,所以 SDK 实际编码出的分辨率并不一定完全按照参数自定,而是会自动进行 16 整除修正。例如 640 x 360 的分辨率,在 SDK 内部有可能会适配为 640 x 368。

  • (TRTCVideoResolutionMode) resMode
    指横屏或竖屏分辨率,由于 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。

    视频码率并不是越高越好,它跟分辨率之间要有比较恰当的映射关系,如下表所示。

分辨率码率参照表

分辨率定义 宽高比 建议码率 高端配置
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

TRTCNetworkQosParam

QosPreference

在网络带宽比较充裕的情况下,清晰和流畅是可以兼顾的,但当用户的网络并不理想时,究竟是优先保证清晰还是优先保证流畅?您可以通过制定 TRTCNetworkQosParam 中的 preference 参数来做出选择。

  • 流畅优先(TRTCVideoQosPreferenceSmooth)
    在用户遭遇弱网环境时,画面会变得模糊,且会有较多马赛克,但可以保持流畅或轻微卡顿。

  • 清晰优先(TRTCVideoQosPreferenceClear)
    在用户遭遇弱网环境时,画面会尽可能保持清晰,但可能会更容易出现卡顿。

ControlMode

controlMode 参数选择 TRTCQosControlModeServer 即可,TRTCQosControlModeClient 是腾讯云研发团队做内部调试用的,请勿关注。

常见的误区

1. 分辨率越高越好?
较高的分辨率也需要较高的码率来支撑,如果分辨率选择 1280 x 720,但码率却指定为 200kbps,画面就会有大量的马赛克。推荐参考 分辨率码率参照表 进行设置。

2. 帧率越高越好?
由于摄像头采集的画面是曝光阶段中所有现实物体的完整映射,所以并不是帧率越高,感官就越流畅,这一点跟游戏里的FPS是不一样的。恰恰相反,帧率过高,会拉低每帧画面的画质,也会减少摄像机的曝光时间,效果可能会更差。

3. 码率越高越好?
较高的码率也需要较高的分辨率来匹配,对于 320 x 240 这样分辨率,1000kbps 的码率就很浪费了,推荐参考 分辨率码率参照表 进行设置。

4. 用 Wi-Fi 的时候就可以设置很高的分辨率和码率
并不是说 Wi-Fi 的网速是恒定不变的,如果离无线路由器较远, 或者路由器信道被占用,可能网速还不如 4G。
针对这种情况, TRTC SDK 提供了测速功能,可以在视频通话前先进行测速,根据打分值来确定网络好坏。