26
Дек

Centos 6 + nginx + nginx-rtmp-module + l2tp + mikrotik — трансляция видео с регистратора Dahua

Задача у нас следующая: Необходимо организовать трансляцию с камер или регистраторов на сайт «Безопасный город». Все регистраторы подключены к интернету через разных провайдеров и не имеют белых ip адресов. Нужно предоставить доступ к видео с камер большому количеству людей, а регистратор не выдержит такой нагрузки. Поэтому будем организовывать ретрансляцию потока на виртуальный или физический сервер.
В качестве регистратора используется модель Dahua DH-XVR5108C-S2
Уличные купольные камеры Dahua DH-HAC-HDW1200MP-S3
Для ретрансляции используем виртуальный сервер на ОС Centos 6
Для подключения регистратора к серверу и проброски необходимого локального порта будем использовать роутер Mikrotk. На самом деле подойдёт любая модель и базовые знания для создания правил. Мы используем Mikrotik hAP Lite

Регистратор отдаёт потоки с подключенных камер в формате:
rtsp://логин:пароль@ip:порт/cam/realmonitor?channel=1&subtype=0 — камера 1
rtsp://логин:пароль@ip:порт/cam/realmonitor?channel=2&subtype=0 — камера 2

С настройками регистратора каждый разберётся сам.

Готовим сервер Centos 6 для ретрансляции. Нам необходимо установить пакеты
Ставим текстовый редактор nano

yum install nano

Настравиваем репозиторий nginx

nano /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
yum install nginx pcre-devel openssl-devel

Мы устанавливаем nginx из репозитория, для создания стартовых скриптов.
Теперь смотрим версию nginx которая установилась

nginx -v

и ищем ссылку на архив https://nginx.org/download нашей версии

cd /tmp/
wget https://nginx.org/download/nginx-1.14.2.tar.gz

Скачиваем nginx-rtmp-module

wget https://github.com/arut/nginx-rtmp-module/archive/master.tar.gz
tar xzf nginx-1.14.2.tar.gz
tar xzf master.tar.gz
cd nginx-1.14.2

Чтобы не было ошибок при компиляции устанавливаем необходимый пакет

yum install gcc

Конфигурируем и собираем

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=../nginx-rtmp-module-master
make
make install

Запускаем

service nginx start

Теперь необходимо поставить пакеты ffmpeg и rtmpdump

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
sudo yum install ffmpeg
sudo yum install rtmpdump

Если у вас есть белый ip, то вы пропускаете описание настройки создания l2tp подключения между Mikrotik и сервером Centos 6.

nano /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;

location / {
root /tmp;
index index.html index.htm;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}

location /stat.xsl {
root /tmp;
}
}
nano /etc/nginx/nginx.conf
user nginx;
worker_processes auto;

rtmp_auto_push on;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;
}

rtmp {
live on;
hls on;
hls_fragment 5s;
server {
listen 1935;
application cam1 {
hls_path /tmp/cam1;
}
application cam2 {
hls_path /tmp/cam2;
}
exec_static ffmpeg -i rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0 -c copy -f flv rtmp://127.0.0.1/cam1/stream;
exec_static ffmpeg -i rtsp://admin:[email protected]:554/cam/realmonitor?channel=2&subtype=0 -c copy -f flv rtmp://127.0.0.1/cam2/stream;
}
}

Вам необходимо просто пробросить rtsp порт на роутере (по умолчанию 554) и указать в конфиге nginx все свои камеры.
После чего они станут доступны по адресам rtmp://ip_сервера/cam1/stream или http://ip_сервера/cam1/stream.m3u8
Более подробное описание и примеры я брал тут
Если у вас нет белого постоянного или динамического ip на роутере, идём дальше.
Необходимо создать l2tp подключения роутера Mikrotik или другого, на ваш выбор, куда подключен регистратор с сервером Centos 6, который будет выполнять функцию ретранслятора нашего видео.
Ставим l2tp сервер и другие необходимые пакеты

yum install -y ppp xl2tpd bind-utils

Конфигурируем

nano /etc/ppp/options.xl2tpd
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1280
mru 1280
lock
lcp-echo-failure 10
lcp-echo-interval 60
connect-delay 5000
logfile /var/log/ppp/ppp.log
nano /etc/xl2tpd/xl2tpd.conf
[global]
port = 1701
[lns default]
ip range = 10.0.0.200-10.0.0.255
local ip = 10.0.0.1
refuse chap = yes
refuse pap = yes
require authentication = yes
name=vpn-server
ppp debug = no
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
nano /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
reg1 vpn-server пароль 10.0.0.10
reg2 vpn-server пароль 10.0.0.11

В этом файле мы назначаем локальные ip нашим регистраторам или камера при подключении с разных мест. Чтобы при ребуте сервера не переназначались локальные Ip
Запускаем l2tp сервер

service xl2tpd start

Не забываем про автозапуск.

chkconfig xl2tpd on
chkconfig nginx on

В зависимости от конфигурации вашего виртуального или физического сервера, у вас может быть включен фаервол. Вам открыть порты 1701 и 554
либо остановить его для тестирования

service iptables stop

На этом, сервер готов забирать и отдавать ваши потоки
Переходим к настройке Mikrotik. Нужно пробросить локальный порт в наш l2tp туннель
Как это сделать, я подробно описал в этой статье

Комментариев нет

Leave a Comment