- на edge серверах мы имеем значения отличное от нуля у native_resources.audio_codecs и native_resources.audio_resamplers с чем это может быть связано?
Это означает, что есть транскодинг или ресемплинг звука на Edge. Почитайте, пожалуйста,
здесь по настройке проброса аудио через CDN. D Вашем случае на HLS edge нужно пробрасывать звук в кодеке AAC (mpeg4-generic).
Также для HLS по умолчанию используется звук со следующими частотами дискретизации и количеством каналов:
Code:
m=audio 0 RTP/AVP 108 102 103
a=rtpmap:108 mpeg4-generic/48000/2
a=rtpmap:102 mpeg4-generic/32000/2
a=rtpmap:103 mpeg4-generic/44100/2
То есть если публикуется одноканальный звук (например, при публикации WebRTC по умолчанию), на HLS edge также будет транскодинг звука.
Рекомендуется весь транскодинг возложить на Transcoder узлы, и забирать аудио для HLS edge по профилю:
Code:
profiles:
-720p-hls:
audio:
codec : mpeg4-generic
rate : 48000
channels: 2
video:
.....
native_resources.video_decoders и native_resources.video_encoders пофиксили убрав из плеера параметры разрешения и битрейт
Да, если в настройках HLS edge указаны ненулевые параметры
hls_player_width
и
hls_player_height
, либо не указаны (используются значения по умолчанию, то включится транскодинг.
Рекомендуется весь транскодинг держать на Transcoder узлах. При этом в профиле видео для HLS потоков необходимо указать FPS и GOP:
Code:
profiles:
-720p-hls:
audio:
codec : mpeg4-generic
rate : 48000
channels: 2
video:
width : 1280
height : 720
bitrate: 1500
gop : 90
fps : 30
codec : h264
Также рекомендуется развести WebRTC и HLS подписчиков по разным Edge серверам, т.к. в противном случае транскодинг аудио будет на Edge всегда из-за того, что для HLS используется AAC, а для WebRTC - Opus.
И еще вопрос, каким образом ограничить входящий (публикуемый) стрим по битрейту (rtmp, webrtc)?
Для WebRTC публикаций можно
ограничить битрейт на стороне клиента или сервера. Следует учесть, что ограничения для браузера являются лишь рекомендацией к исполнению, то есть битрейт может выходить за указанные пределы.
Для RTMP потоков битрейт можно ограничить только настройками клиента (ffmpeg, OBS и т.п.).
У нас есть стримеры, которые выставляют в OBS очень высокий битрейт, из-за чего у нас видео дергается и аудио отбрасывается.
Если в момент проблемы перезагрузить transcoder, то на некоторое время все нормализуется (1-5 минут). Мы пробовали поднять video_encoder_max_threads до 6, но это не привело к решение проблемы.
Почитайте
здесь рекомендации по тюнингу Transcoder узлов в условиях больших нагрузок. При этом сами по себе транскодеры должны быть мощными и, крайне желательно, физическими серверами. Обратите внимание, что количество CPU ядер (физических, не гипертрединговых) должно рассчитываться, исходя из следующих ограничений: 1 ядро для кодирования 2 720p потоков или 3 480p потоков, 2 ядра для кодирования 1 1080p потока, плюс запас в два ядра CPU. Гипертрединг на Transcoder узлах желательно отключать. Кроме уже упомянутого тюнинга, необходимо
настроить ZGC для управления памятью Java машины.