Setting Video Quality
Overview
In TRTCCloud, you can adjust the video quality in the following ways:
TRTCCloud.enterRoom TRTCAppScene parameter: For selecting your application scenario.
TRTCCloud.setVideoEncoderParam: For setting encoding parameters.
TRTCCloud.setNetworkQosParam: Used for setting up network regulation policies.
This document describes how to configure these parameters to make the video quality of the TRTC SDK meet your project-specific needs.
You can also see the following demos:
Supported Platforms
iOS | Android | Mac OS | Windows | Web | Electron | Flutter |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
For detailed operations on how to set the screen quality on the Web, please refer to the Configuration Guide.
Room Scenario
Scenario Type | Scenario Introduction |
TRTC_APP_SCENE_VIDEOCALL | Within the context of video calling, 720p and 1080p high-definition image quality is supported. A single room can accommodate up to 300 simultaneous online users, with a maximum of 50 users speaking at the same time. |
TRTC_APP_SCENE_LIVE | In the context of interactive video broadcasting, the mic can be smoothly turned on/off without switching latency, with host latency as low as 300 milliseconds. Supports live streaming for hundreds of thousands of concurrent viewers, with playback delay reduced to 1000 milliseconds. Note: In this scenario, you need to specify the current user's role using the 'role' field in TRTCParams. |
TRTC_APP_SCENE_AUDIOCALL | In the audio call context, it supports 48 kHz duplex audio calls. A single room accommodates up to 300 concurrent online users, with a maximum of 50 people speaking at once. |
TRTC_APP_SCENE_VOICE_CHATROOM | In the context of interactive audio live streaming, microphones can be switched on and off smoothly without delay. The host experiences a low latency of fewer than 300 milliseconds. It accommodates hundreds of thousands concurrent viewer users, with the broadcast delay reduced to 1000 milliseconds. Note: In this scenario, you need to specify the current user's role using the 'role' field in TRTCParams. |
TRTCVideoEncParam
Recommended configuration
Application Scenario | videoResolution | videoFps | videoBitrate |
Video call (mobile) | 640x360 | 15 | 550kbps |
Video conferencing (primary image on macOS or Windows) | 1280x720 | 15 | 1200kbps |
Video conferencing (primary image on mobile device) | 640x360 | 15 | 900kbps |
Video conferencing (small image) | 320x180 | 15 | 250kbps |
Online education (teacher on macOS or Windows) | 960x540 | 15 | 850kbps |
Online education (teacher on iPad) | 640x360 | 15 | 550kbps |
Online education (student) | 320x180 | 15 | 250kbps |
Detailed description of fields
(int) videoResolution
The encoding resolution (TRTCCloudDef.TRTC_VIDEO_RESOLUTION_ ), for instance, 640 x 360, indicates the width (in pixels) x height (in pixels) of the output image.We have only predefined horizontal (landscape) resolutions in the TRTCVideoResolution enumeration where the width >= height. If you want to use a vertical (portrait) resolution, you need to set resMode to Portrait.
Note:
Because many hardware codecs only support pixel widths that are divisible by 16, the actual resolution encoded by the SDK may not be exactly the same as configured by the parameter; instead, it will be automatically corrected based on a multiple of 16. For example, the resolution 640 x 360 may be adapted to 640 x 368 inside the SDK.
(int) videoResolutionMode
This parameter designates the screen orientation resolution (TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_). Since TRTCVideoResolution only defines horizontal screen resolution, if you want to use vertical screen resolutions like 360 x 640, you'd need to set resMode as TRTCVideoResolutionModePortrait. Generally, PCs and Macs employ horizontal (Landscape) resolution, while smartphones use vertical (Portrait) resolution.
(int) videoFps
The Frame Rate (FPS) refers to the number of frames to be encoded per second. A recommended setting is 15 FPS, which assures sufficient video fluidity without compromising clarity due to an excessive number of frames per second. If you require higher smoothness, settings of 20 FPS or 25 FPS can be used. However, resist settings above 25 FPS, since the conventional frame rate for movies is 24 FPS.
(int) videoBitrate
Video Bitrate (Bitrate) refers to how much Kbit binary data the encoder outputs per second after encoding. If you set videoBitrate to 800kbps, the encoder will produce 800kbit video data per second. If stored into a file, the size of this file would amount to 800kbit, which is equivalent to 100KB, or 0.1MB.
A higher video bitrate is not always better; instead, it should be chosen appropriately based on the resolution as shown in the table below.
Resolution-bitrate reference table
Resolution Definition | Aspect Ratio | Recommended Bitrate(VideoCall) | Recommended Bitrate(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
In an environment where network bandwidth is ample, clarity and fluidity can be balanced. However, when a user's network conditions are not optimal, the decision needs to be made whether to prioritize clarity or fluidity. This designation can be made through the preference parameter within TRTCNetworkQosParam.
Smoothness preferred (TRTCVideoQosPreferenceSmooth)
When users experience a weak network, the display could turn blurry and may contain many mosaics, but smoothness can be maintained with minimal or no stutter.
Quality preferred (TRTCVideoQosPreferenceClear)
When users are constrained by a weak network, the image will strive to remain as clear as possible, but stuttering might be a frequent occurrence.
ControlMode
Select the TRTCQosControlModeServer for the controlMode parameter. The TRTCQosControlModeClient is used by the Tencent Cloud Research and Development team for internal debugging purposes, please do not focus on it.
Common Misconceptions
1. Is a higher resolution better?
A higher resolution necessitates a higher bit rate for support. If a resolution of 1280 x 720 is chosen, but the bit rate is specified as 200kbps, the picture will contain a substantial blur. It is recommended to refer to the Resolution-bitrate reference table while making adjustments.