Чем объясняется высокая нагрузка на сервер при трансляции RTSP потока?

Max

Administrator
Staff member
Если вопрос про CPU, то нагрузка вызвана транскодированием аудио составляющей потока из кодека AAC (RTSP) в Opus (WebRTC).
Это если ваша камера отдаёт H.264 + AAC.
Чтобы сказать точно, нужно знать какой формат отдаёт камера и на каких устройствах / браузерах воспроизводится поток.
 

Sergei

Member
Если вопрос про CPU, то нагрузка вызвана транскодированием аудио составляющей потока из кодека AAC (RTSP) в Opus (WebRTC).
Это если ваша камера отдаёт H.264 + AAC.
Чтобы сказать точно, нужно знать какой формат отдаёт камера и на каких устройствах / браузерах воспроизводится поток.
Вопрос больше не в нагрузке, а в объеме трафика проходящего через сервер (входящего, исходящего). За один день при работе с одной камерой через сервер прошло 144 ГБ данных (в час приходило 12 ГБ), хотя камера отдает видео в 640x480 h264. Может ли быть такое, что при каждом подключении к потоку (просмотре в плеере) с определенным именем, происходит открытие нового потока? В примере плеера в поле stream указывает адрес потока, который в последствии можно использовать, как имя потока, так?
 
Last edited:

Max

Administrator
Staff member
Выглядт странно.
Больше похоже на некорректный расчет статистики или же на флуд сервера.
Прежде всего нужно снять дампы трафика и посмотреть на какие порты идёт 12 ГБ трафика в час.
Code:
tcpdump -s 4096 -w log.pcap
WCS использует TCP порты из диапазона 32000-33000 и на этих портах принимает RTSP interleave трафик.
Если трафик заходит на них,то это RTSP.
Если нет, то это какой-то другой трафик.

Также можете посмотреть статистику:
http://host:8081?action=stat
Пример
Code:
ports_rtsp=1
streams_viewers=rtsp://192.168.1.5:554/Streaming.sdp/1
streams_rtsp_in=1
Здесь вы можете видеть сколько RTSP сессий открыто, сколько открыто поротв и сколько каждый из RTSP потоков имеет зрителей.
Если открыть один и тот же RTSP поток в нескольких плеерах, цифры streams_rtsp_in и ports_rtsp не меняются. Т.е. WCS продолжает держать всего одну RTSP сессию с камерой.

Поэтому попробуйте разобраться, какой именно трафик к вам приходит / уходит и промониторить сколько открытых соединений показывает статистика WCS во временном разрезе.

Можно добавить в Cron такой простой скрипт:
Code:
curl "http://host:8081?action=stat&params=ports_rtsp,streams_viewers,streams_rtsp_in" >> rtsp.log
 
Last edited:

Sergei

Member
Изменяется кол-во streams_webrtc_out и ports_media. Из-за этого может увеличиваться нагрузка на сервер?
Еще при открытии 13 плееров с включенным просмотром, то видео останавливаются. Нужно больше процессорной мощности, или это показатель того, что что-то не так подключено?

-----Connection Stats-----
connections=13
connections_rtmfp=0
connections_websocket=13
-----Port Stats-----
ports_sip=0
ports_media=24
ports_rtsp=2
-----Stream Stats-----
streams_webrtc_in=0
streams_webrtc_out=0
streams_rtmfp_in=0
streams_rtmfp_out=0
streams_rtmp_in=0
streams_rtmp_out=0
streams_viewers=rtsp://admin:123456@streamclub1.ddns.net:554/mpeg4/10
streams_rtsp_in=1
streams_rtsp_out=0
streams_websocket_out=0
streams_rtmp_client_out=0
-----Core Stats-----
core_threads=209
core_heap_memory_used=332198
core_rss_memory=639452
core_open_file_descriptors=325
core_cpu_usage=41.0
core_gc=3631.182: [GC (Allocation Failure) 371734K->45466K(394240K), 0.0068782 secs]
core_gc_manager=3660.927: [GC (Allocation Failure) 180820K->76820K(226304K), 0.0069738 secs]
core_java_threads=201
core_java_committedMemory=3860209664
core_java_freePhysicalMemorySize=87441408
core_java_arch=amd64
core_java_availableProcessors=2
core_java_freeSwapSpaceSize=2140286976
core_java_maxFileDescriptorCount=20000
core_java_open_file_descriptors=321
core_java_cpu_usage=15.37
core_java_totalPhysicalMemorySize=2088448000
core_java_totalSwapSpaceSize=2146430976
core_java_uptime=3642610
-----Call Stats-----
sip_calls=0
sip_calls_established=0
sip_calls_in=0
sip_calls_out=0
sip_calls_per_second=0.00
-----Sip Stats-----
sip_registered=0
-----Recording Stats-----
recording_sessions=0
-----System Stats-----
system_java_cpu_usage=17.22
system_java_load_average=0.47
system_uptime= 1:01
system_memory_total=2039500
system_memory_free=84752
system_cpu_usage=2.4
-----Network Stats (Mbit/s)-----
global_bandwidth_in=0.000
global_bandwidth_out=0.000
 
Last edited:

Sergei

Member
Изменяется кол-во streams_webrtc_out и ports_media. Из-за этого может увеличиваться нагрузка на сервер?
Еще при открытии 13 плееров с включенным просмотром, процессор загружается на 100% и видео останавливаются. Нужно больше процессорной мощности, или это показатель того, что что-то не так подключено?

-----Connection Stats-----
connections=13
connections_rtmfp=0
connections_websocket=13
-----Port Stats-----
ports_sip=0
ports_media=24
ports_rtsp=2
-----Stream Stats-----
streams_webrtc_in=0
streams_webrtc_out=0
streams_rtmfp_in=0
streams_rtmfp_out=0
streams_rtmp_in=0
streams_rtmp_out=0
streams_viewers=rtsp://admin:123456@streamclub1.ddns.net:554/mpeg4/10
streams_rtsp_in=1
streams_rtsp_out=0
streams_websocket_out=0
streams_rtmp_client_out=0
-----Core Stats-----
core_threads=209
core_heap_memory_used=332198
core_rss_memory=639452
core_open_file_descriptors=325
core_cpu_usage=41.0
core_gc=3631.182: [GC (Allocation Failure) 371734K->45466K(394240K), 0.0068782 secs]
core_gc_manager=3660.927: [GC (Allocation Failure) 180820K->76820K(226304K), 0.0069738 secs]
core_java_threads=201
core_java_committedMemory=3860209664
core_java_freePhysicalMemorySize=87441408
core_java_arch=amd64
core_java_availableProcessors=2
core_java_freeSwapSpaceSize=2140286976
core_java_maxFileDescriptorCount=20000
core_java_open_file_descriptors=321
core_java_cpu_usage=15.37
core_java_totalPhysicalMemorySize=2088448000
core_java_totalSwapSpaceSize=2146430976
core_java_uptime=3642610
-----Call Stats-----
sip_calls=0
sip_calls_established=0
sip_calls_in=0
sip_calls_out=0
sip_calls_per_second=0.00
-----Sip Stats-----
sip_registered=0
-----Recording Stats-----
recording_sessions=0
-----System Stats-----
system_java_cpu_usage=17.22
system_java_load_average=0.47
system_uptime= 1:01
system_memory_total=2039500
system_memory_free=84752
system_cpu_usage=2.4
-----Network Stats (Mbit/s)-----
global_bandwidth_in=0.000
global_bandwidth_out=0.000
Сразу, после такого "пришествия", не получается запустить видео, выдается FAILED. Что нужно сделать, чтобы подобное не происходило?
 

Sergei

Member
При открытой одной вкладке постоянный поток трафика идет через данные порты:
 

Attachments

Sergei

Member
В случае если нет открытых соединений:
-----Connection Stats-----
connections=0
connections_rtmfp=0
connections_websocket=0
-----Port Stats-----
ports_sip=0
ports_media=0
ports_rtsp=0
-----Stream Stats-----
streams_webrtc_in=0
streams_webrtc_out=0
streams_rtmfp_in=0
streams_rtmfp_out=0
streams_rtmp_in=0
streams_rtmp_out=0
streams_viewers=
streams_rtsp_in=0
streams_rtsp_out=0
streams_websocket_out=0
streams_rtmp_client_out=0
-----Core Stats-----
core_threads=42
core_heap_memory_used=19689
core_rss_memory=138464
core_open_file_descriptors=124
core_cpu_usage= 3.5
core_gc=502.874: [GC (Allocation Failure) 43915K->14067K(57856K), 0.0059620 secs]
core_gc_manager=259.998: [GC (Allocation Failure) 237267K->90043K(289280K), 0.0882132 secs]
core_java_threads=36
core_java_committedMemory=3682496512
core_java_freePhysicalMemorySize=576806912
core_java_arch=amd64
core_java_availableProcessors=2
core_java_freeSwapSpaceSize=2143092736
core_java_maxFileDescriptorCount=20000
core_java_open_file_descriptors=120
core_java_cpu_usage=0.16
core_java_totalPhysicalMemorySize=2088448000
core_java_totalSwapSpaceSize=2146430976
core_java_uptime=576129
-----Call Stats-----
sip_calls=0
sip_calls_established=0
sip_calls_in=0
sip_calls_out=0
sip_calls_per_second=0.00
-----Sip Stats-----
sip_registered=0
-----Recording Stats-----
recording_sessions=0
-----System Stats-----
system_java_cpu_usage=13.82
system_java_load_average=0.00
system_uptime= 1:58
system_memory_total=2039500
system_memory_free=562384
system_cpu_usage=2.2
-----Network Stats (Mbit/s)-----
global_bandwidth_in=0.000
global_bandwidth_out=0.000

То все равно через данные порты идет трафик:
 

Attachments

Max

Administrator
Staff member
Еще при открытии 13 плееров с включенным просмотром, процессор загружается на 100% и видео останавливаются. Нужно больше процессорной мощности, или это показатель того, что что-то не так подключено?
Сразу, после такого "пришествия", не получается запустить видео, выдается FAILED.
Это не зависит от количества плееров.
Проблема именно между сервером и камерой.
Проверили, у нас тоже воспроизводится. Что-то ломается в потоке. В логе видно ошибки.
Если оставите камеру активной, завтра попробуем разобраться.
Что нужно сделать, чтобы подобное не происходило?
Можно было бы попробовать переключиться в non-interleave, но там картинка битая.
Если пришлете временный доступ к админке камеры на logs@flashphoner.com, попробуем там что-то настроить.
 

Max

Administrator
Staff member
Изменяется кол-во streams_webrtc_out и ports_media. Из-за этого может увеличиваться нагрузка на сервер?
Незначительно.
100% грузит именно из за сбоя в потоке между камерой и сервером.
 

Max

Administrator
Staff member
При открытой одной вкладке постоянный поток трафика идет через данные порты
У вас на кратинке:
554 - это порт IP камеры, с него отправляется RTSP трафик на сервер.
32003 - это RTSP порт на сервере, который трафик принимает.
22 - SSH порт, через который вы мониторите сервер.
36782 - непонятный порт, посмотрите какой процесс его использует
Code:
netsat -nlp | grep 36782
И фигурирует ли он в настройках WCS_HOME/conf/flashphoner.properties
Кроме порта 36782, ничего вопросов не вызывает.
 

Max

Administrator
Staff member
В случае если нет открытых соединений, То все равно через данные порты идет трафик.
Остались порты 22 и 36782.
Про SSH отписал выше.
С портом 36782 нужно разбираться и снять по нему дамп.
Code:
tcpdump port 36872 -w log.pcap
 

Sergei

Member
Это не зависит от количества плееров.
Проблема именно между сервером и камерой.
Проверили, у нас тоже воспроизводится. Что-то ломается в потоке. В логе видно ошибки.
Если оставите камеру активной, завтра попробуем разобраться.

Можно было бы попробовать переключиться в non-interleave, но там картинка битая.
Если пришлете временный доступ к админке камеры на logs@flashphoner.com, попробуем там что-то настроить.
Выслал на почту данные камеры.
 

Sergei

Member
Так же заметил, что трансляция не может работать продолжительное время. Колеблется в зависимости от кол-ва включенных плееров.
 

Sergei

Member
Данные получили, но там IP локальный 192.168.0.123
А по адресу http://streamclub1.ddns.net:80 не открывается.
Похоже порт 80 закрыт.
Открыл доступ к вебке на 8888 порт. Точно работает через IE9, там предлагается установить плагин
 

Max

Administrator
Staff member
Из Windows 10, IE 11 добраться до камеры пока не получилось.
Плагин устанавливается, но не подключается браузером IE 11.
С IE9 пока нет возможности зайти.
 

Max

Administrator
Staff member
Так же заметил, что трансляция не может работать продолжительное время. Колеблется в зависимости от кол-ва включенных плееров.
Скорее всего дело не в этом.
Через некоторое время от камеры начинает идти трафик, который плохо разбирается на нашей стороне.
Мы уже встречали такую проблему с несколькими китайскими камерами. Сейчас еще раз пытаемся разобраться.
В логах при этом такие сообщения
Code:
java.lang.IllegalArgumentException: invalid version format: ￈ᄐヌC|ᅡᄒᆰネK
at org.jboss.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:102)
at org.jboss.netty.handler.codec.rtsp.RtspVersions.valueOf(RtspVersions.java:47)
at com.flashphoner.rtsp.netty.RtspResponseDecoder.createMessage(RtspResponseDecoder.java:75)
at org.jboss.netty.handler.codec.http.HttpMessageDecoder.decode(HttpMessageDecoder.java:189)
at com.flashphoner.rtsp.netty.RtspMessageDecoder.decode(RtspMessageDecoder.java:99)
at com.flashphoner.rtsp.netty.RtspMessageDecoder.decode(RtspMessageDecoder.java:61)
at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:502)
at org.jboss.netty.handler.codec.replay.ReplayingDecoder.cleanup(ReplayingDecoder.java:557)
at org.jboss.netty.handler.codec.frame.FrameDecoder.channelDisconnected(FrameDecoder.java:331)
at org.jboss.netty.channel.Channels.fireChannelDisconnected(Channels.java:399)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:617)PuTTY
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.write0(AbstractNioWorker.java:526)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.writeFromTaskLoop(AbstractNioWorker.java:432)
at org.jboss.netty.channel.socket.nio.AbstractNioChannel$WriteTask.run(AbstractNioChannel.java:366)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processWriteTaskQueue(AbstractNioWorker.java:350)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:246)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Threa
 

Max

Administrator
Staff member
Для стабильной работы с камерой, попробуйте скофигурировать камеру так, чтобы она отдавала UDP пакеты, не превышающие MTU.
Сейчас камера в UDP режиме отдает фрагменты более 1500 байт, которые бьются на части. Из-за этого картинка портится в non-interleaved режиме.
non-interleave-rtsp-mode-mtu.jpg

rtsp-rtp-too-high-mtu-non-interleave-mode.jpg

В итоге, чтобы заработало стабильно, нужно
1) Настроить на камере MTU, например 1450.
2) Переключить WCS в non-interleave режим настройкой
Code:
rtsp_interleaved_mode=false
 

Max

Administrator
Staff member
Еще, сейчас камера использует кодек H.264 Main.
Попробуйте выставить H.264 Baseline, если есть возможность.
Если не понятно как настроить, выложите пожалуйста скриншоты с настройкми камеры.
Возможно из них будет что-то понятно.
Какая модель камеры? Где можно найти спецификацию?
 
Top