Для получения оптимального качества картинки с учетом пропускной способности канала при захвате WebRTC потока в браузере необходимо управлять битрейтом видео. Для этого в WCS предусмотрена возможность ограничения минимального и максимального битрейта видео в публикуемом потоке. Битрейт аудио не регулируется.
Chrome | Firefox | Safari 11 | Edge | |
---|---|---|---|---|
Windows | + | + | + | |
Mac OS | + | + | + | |
Android | + | + | ||
iOS | - | - | + |
Для ограничения битрейта предназначены следующие настройки WCS:
На стороне браузера (JavaScript) | На стороне сервера (flashphoner.properties) | |
---|---|---|
Ограничение минимального битрейта | constraints.video.minBitrate | webrtc_cc_min_bitrate |
Ограничение максимального битрейта | constraints.video.maxBitrate | webrtc_cc_max_bitrate |
При этом, на стороне браузера битрейт задается в килобитах в секунду, например
constraints.video.maxBitrate=600 |
а на стороне сервера в битах в секунду
webrtc_cc_max_bitrate=600000 |
Если заданы настройки с обоих сторон, то настройки браузера имеют приоритет над настройками сервера.
Если настройки браузера не заданы, применяются настройки сервера.
Если не заданы ни те, ни другие настройки, применяются значения по умолчанию
webrtc_cc_min_bitrate=30000 webrtc_cc_max_bitrate=10000000 |
Эти настройки работают в основных современных браузерах и задают границы управления битрейтом при помощи REMB.
Если задан maxBitrate, WCS сервер, при достижении указанной планки, будет отправлять браузеру REMB-команду снизить битрейт.
Если задан minBitrate, WCS сервер, при достижении указанной планки, перестанет отправлять браузеру REMB-команды снижения битрейта.
Таким образом, настройки обозначают три диапазона, в каждом из которых WCS сервер управляет битрейтом:
№ | Диапазон | Управление |
---|---|---|
1 | [0, minBitrate] | WCS сервер прекращает управление битрейтом и не отправляет REMB |
2 | [minBitrate, maxBitrate] | WCS сервер осуществляет активное управление битрейтом: в зависимости от |
3 | [maxBitrate, ...] | В этом диапазоне WCS сервер постоянно посылает команды на снижение |
В настоящее время, форсировать повышение битрейта можно только в браузере Chrome, указав в SDP при помощи замены параметров x-google-max-bitrate
и x-google-min-bitrate
.
Через настройки на стороне клиента и сервера форсировать увеличение битрейта невозможно, можно только управлять его понижением.
При этом, настройки, специфичные для Chrome, если они выставлены, будут иметь приоритет, т.е. настройки constraints
и настройки сервера будут игнорироваться. Отметим, что настройка Chrome по умолчанию, определенная опытным путем, на сегодняшний день составляет
x-google-max-bitrate=2500 |
Удержание битрейта в определенных границах может быть полезным, например, при публикации видео для клиентов, использующих браузер Safari. Данный браузер чувствителен к резким изменениям битрейта, при этом ухудшается качество картинки вплоть до фризов и зависаний браузера. Поэтому при вещании для Safari рекомендуется максимально стабилизировать битрейт, задавая узкие пределы изменения, например
constraints.video.minBitrate=600 constraints.video.maxBitrate=600 |
В этом случае картинка в Safari будет сохранять приемлемое качество, в зависимости от полосы пропускания и состояния канала.
Форсирование повышения битрейта необходимо при публикации HD и 4K потоков. В этом случае рекомендуется использовать для публикации браузер Chrome.