...
Code Block |
---|
|
dropwatch -l kas
>start |
Настройка буферов UDP на уровне системы
Если на сервере публикуются потоки с высоким битрейтом, и для публикации и проигрывания используется UDP (например, в качестве транспорта внутри CDN), может потребоваться настройка буферов UDP на уровне системы
Code Block |
---|
|
sudo sysctl -w net.core.rmem_max=26214400
sudo sysctl -w net.core.rmem_default=26214400 |
При этом производительности сервера должно хватать для обработки всех поступающих пакетов трафика. В противном случае качество трансляции ухудшится (появятся фризы), но узким местом станет не сеть, а CPU.
Оптимизация загрузки канала
...
В отличие от скрипта запуска webcallserver, файл setenv.sh при последующих обновлениях не перезаписывается, таким образом, нет необходимости при каждом обновлении восстанавливать эту настройку.
Использование параметров сервиса при запуске от непривилегированного пользователя (начиная со сборки 5.2.801)
Начиная со сборки 5.2.801, WCS запускается от пользователя 'flashphoner' для большей безопасности. В этом случае изменение максимального количества открытых файлов возможно в параметрах сервиса
Code Block |
---|
|
sudo nano /etc/systemd/system/webcallserver.service |
Количество открытых файлов задается параметром LimitNOFILE
, например
Code Block |
---|
|
[Service]
User=flashphoner
Group=flashphoner
LimitNOFILE=100000
... |
Команда для изменения максимального количества открытых файлов
В сборке 5.2.1255 добавлена команда для изменения максимального количества открытых файлов
Code Block |
---|
|
sudo ./webcallserver set-fd-limit 100000 |
При этом WCS будет остановлен перед внесением изменений в настройки и автоматически запущен после внесения изменений.
Если указано меньшее количество, чем значение по умолчанию (20000), будет выведено сообщение об ошибке, и изменения не будут применены.
Шифрование в отдельном потоке для каждой клиентской сессии
По умолчанию, шифрованием трафика для всех клиентских сессий занимается один процессорный поток. Это приводит к тому, что на маломощных серверах при большом количестве подписчиков такой поток нагружает одно процессорное ядро, после чего сервер не успевает рассылать медиапакеты подписчикам, и начинается деградация воспроизводимых потоков, снижение FPS и фризы.
Чтобы распределить нагрузку равномерно по ядрам процессора, необходимо включить шифрование трафика в отдельном процессорном потоке для каждой из клиентских сессий при помощи следующих настроек
Code Block |
---|
|
rtp_paced_sender=true
rtp_paced_sender_initial_rate=200000
rtp_paced_sender_increase_interval=50
rtp_paced_sender_k_up=0.9 |
и перезапустить WCS.
Оптимизация доставки потока подписчикам
При большом количестве подписчиков на один поток (от 100 и более) качество воспроизведения потока может падать: низкий FPS, фризы. При этом нагрузочной способности сервера и канала может быть достаточно. В таких случаях рекомендуется включить распределение доставки потока подписчикам по процессорным потокам при помощи настройки
Code Block |
---|
|
streaming_distributor_subgroup_enabled=true |
При этом клиентские аудио и видео сессии распределяются по группам.
Максимальное количество видео сессий в группе задается настройкой
Code Block |
---|
|
streaming_distributor_subgroup_size=50 |
Максимальное количество аудио сессий в группе задается настройкой
Code Block |
---|
|
streaming_distributor_audio_subgroup_size=500 |
Размеры очередей пакетов на группу и максимальное время ожидания фрейма для отправки (в миллисекундах) задаются настройками
Code Block |
---|
|
streaming_distributor_subgroup_queue_size=300
streaming_distributor_subgroup_queue_max_waiting_time=5000 |
для видео и
Code Block |
---|
|
streaming_distributor_audio_subgroup_queue_size=300
streaming_distributor_audio_subgroup_queue_max_waiting_time=5000 |
для аудио соответственно.