LINUX.ORG.RU
ФорумAdmin

nginx проксирование медиа-потока IP камеры

 , ,


0

1

Имеется domain.org, IP камера с внутренним адресом 192.168.1.64. На камере есть web-морда, на которой возможен онлайн просмотр. При пробросе только 80-го порта на камеру - все работает. Но при пробросе этого 80-го порта на ngnix с proxy-конфигурацией:

server {
    listen       80;
    server_name  cam1.domain.org;
    location / {
        proxy_pass http://192.168.1.64:80/;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
видеопоток не отдается. При этом для просмотра в браузере устанавливается какой-то плагин (работает только для IE). Подозреваю что он тянет RTSP/RTMP поток, но как он это делает и почему не может сделать этого через Proxy? Wireshark при просмотре трансляции видит обмен только с 80-м портом камеры. Nginx уже с модулем nginx-rtmp-module, но если работаем только по http - как правильно конфигурировать этот модуль. Может кто сталкивался? Проверено на 4-х типах камер различного производства.

nginx-rtmp-module

Для просмотра видео с http вебморды не нужен. Он нужен для настройки nginx в качестве сервера вещания rtmp/hls.

Не совсем понятно, как и какие порты у вас маршрутизированы. Я так понял, камера висит на каком-то случайном порту, 192.168.1.64:80 перенаправлен на этот порт, и вы поверх пытаетесь накрутить еще один nginx?

Вообще самый первый совет - уберите / в конце proxy_pass. Порт дефолтный, поэтому его тоже можете убрать. И в proxy_set_header порт тоже не нужен.

l0stparadise ★★★★★
()
Ответ на: комментарий от l0stparadise

Камера имеет адрес 192.168.1.64, ее web-интерфейс на 80-м порту. Если с внешнего ip адреса пробрасываем порт на 80 порт камеры - все работает. Если пробрасываем на 80 порт прокси-сервера, а из него проксируем на камеру - то сам web-интерфейс работает, но видео-поток не транслируется.

nike-tesla
() автор топика
Ответ на: комментарий от nike-tesla

А в браузере, в inspect element -> console или network какие ошибки?

adn ★★★★
()
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;



А с какой целью отдаешь эти header'ы?

adn ★★★★
()

камера вещает через activex компонент, который берет видео не через 80 порт

модель камеры озвучьте и смотрите в сторону rtsp дырки

hizel ★★★★★
()
Ответ на: комментарий от adn

Да в том то и дело, что никаких ошибок там нет... или я не правильно пользуюсь этим инструментом - ведь все приходится делать в IE, плагин только для него. header'ы добавил в ходе экспериментов чтоб подменить внутренние данные <host и IP> на запрашиваемые, но и с ними и без них работает одинаково. hizel Камера Hikvision DS-2CD2542FWD-IWS. Обмен данными идет только через 80-ый порт. Так: http://cam1.expert-group.site/ 80-ый порт проброшен на Proxy, откуда на 80 порт камеры - так поток не работает. А если пробрасываю 870-ый порт на 80 порт камеры на прямую: http://expert-group.site:870/ - без Proxy, то все отлично работает. Логин user, пароль 123qwert

nike-tesla
() автор топика
Ответ на: комментарий от nike-tesla

Зря ты сюда все явки и пароли сюда выкладываешь.
Попробуй с хедерами поиграться:

server {
    listen       80;
    server_name  cam1.domain.org;
    location / {
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.1.64:80;
    }
}

adn ★★★★
()
Ответ на: комментарий от adn

Так это ж временные доступы, в том числе и домен тестовый. Без них мне вряд ли кто поможет - разбираться с проблемой не видя самой ошибки мало кто хочет. Пробую играться с хедерами, пока безуспешно.

nike-tesla
() автор топика
Ответ на: комментарий от nike-tesla

если открыть в браузере вот это
http://cam1.expert-group.site/Streaming/channels/1/
можно увидеть вот это:

<rtspPortNo>554</rtspPortNo>
<maxPacketSize>1000</maxPacketSize>
<sourcePortNo>8200</sourcePortNo>
<ControlProtocolList><ControlProtocol><streamingTransport>RTSP</streamingTransport>
</ControlProtocol></ControlProtocolList><Unicast><enabled>true</enabled>
</Unicast>
<Multicast><enabled>true</enabled><destIPAddress>0.0.0.0</destIPAddress>
<destPortNo>8600</destPortNo>
</Multicast>
</Transport>

что скорее всего говорит о том, что видео передается потоком с помощью RTSP.
Ни капли не специалист в потоков видео, но возможно взлетит если
собрать nginx с поддержкой этого «транспорта» ?
UPD. nginx увидел с поддержкой собран уже.
подробности https://habrahabr.ru/post/236359/

art_corp
()
Последнее исправление: art_corp (всего исправлений: 1)
Ответ на: комментарий от art_corp

Да, эти порты используются при работе отдельно через RTSP, клиентское ПО, но для Web они не нужны. От Hikvision Support добился ISAPI мануал и RTSP Interfaces and Development Guide. В последнем есть такой пункт как «2.4 RTP OVER RTSP OVER HTTP». Похоже то, что нужно.

RTSP commands are encrypted with base64 before being sent through POST. But GET commands are not encrypted. To bind two sessions together, the device needs a unified ID, which is in the x-sessioncookie Field of the http head.

Я так понял, что проблема в заголовке «x-sessioncookie». Но мне откровенно не хватает знаний чтоб применить эту инфу к nginx proxy, перепробовал уже кучу proxy_*, пока безуспешно

nike-tesla
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.