Different conference members have different hardware and internet connection resources, and this is the main reason people face bad video performance in video conferences.
If we send high-quality video streams to users with poor internet connection or hardware, it causes image and sound to freeze and cause bad performance.
But if we send low-quality video to everyone, users with poor internet connection or hardware do not experience issues, but people with good internet connection and hardware will not be satisfied with the image quality.
That is why we need video quality management.
For web cameras, we manage video quality by changing video resolution. The higher user's resolution, the more video layers the user sends. Then, we send good-quality video to everyone who can receive it and low-quality video to users with a poor internet connection or slow hardware.
For screen sharing, this approach is wrong, because users can share small text and even source code, and lowering resolution can cause the text to be pixelated and unreadable. That is why for screen sharing we manage video quality by lowering frames per second.
In addition to sender-side optimization, recipients also lower incoming traffic via:
requesting a video stream that is not bigger than a video window on the device
disabling the incoming video streams for those participants that are not currently visible
Web SDK API
Here you can find instructions on Web SDK, which are useful for building a web application.
You can connect to a conference with quality management:
And enable/disable video stream and request its status:
You can request a custom resolution from a server and retrieve the last requested resolution:
Here is how you can subscribe to the following events:
a user starts/stops talking
a user's video stream enables/disables
Here you can find instructions on VoxEngine scenario to enable video quality management on Voximplant side.
Here is how you add and remove a user (or endpoint) to and from a conversation:
You can get connected endpoints list, get an endpoint by its ID, and get the endpoint's call, conference, mode, streams and their directions:
You can manage streams: enable or disable them, or requests all streams with specific directions:
You can request a specific resolution for a stream:
And limit the maximum bitrate:
You can also process the following events:
an endpoint is added/removed
an endpoint's incoming stream is added/removed/changed
an endpoint's outbound stream is added/removed/changed/enabled/disabled
an endpoint's outbound stream's max resolution is changed