Задача: есть IP камера вещающая по протоколу rtsp. В html5 стандарте, этот протокол не поддерживается. Ни один флеш и javascript плеер, его так-же не воспроизводят. С плагинами в браузер — бред.
Решение: при помощи ngnix конвертируем видео в удобовариваемый формат. Решение стырено с: http://conture.by/post/1552#more-1552
Для начала необходимые пакеты:
|
apt-get install libpcre3 libpcre3-dev libssl-dev gcc build-essential unzip rtmpdump |
Устанавливать nginx надо не через apt-get, а из исходников.
|
wget http://conture.by/wp-content/uploads/2015/06/nginx-1.8.0.tar.gz tar -xzvf nginx-1.8.0.tar.gz wget http://conture.by/wp-content/uploads/2015/06/nginx-rtmp-module-master.zip unzip nginx-rtmp-module-master.zip -d nginx-rtmp-module-master wget http://conture.by/wp-content/uploads/2015/06/ffmpeg_nginx.zip unzip ffmpeg_nginx.zip -d /bin chmod 777 /bin/ffmpeg_nginx cd nginx-1.8.0 ./configure --prefix=/usr --add-module=../nginx-rtmp-module-master/arut-nginx-rtmp-module-f62a083/ --pid-path=/var/run/nginx.pid --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_ssl_module make make install cp ../nginx-rtmp-module-master/arut-nginx-rtmp-module-f62a083/stat.xsl /etc/nginx/stat.xsl |
Далее открываем конфиг nginx расположенный /etc/nginx/nginx.conf и правим под себя. У меня он следующий…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
user www-data; worker_processes 4; # воркеры по количеству ядер процессора pid /run/nginx.pid; error_log /var/log/nginx/nginx_error.log debug; env PATH; events { worker_connections 768; } http { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 88; # rtmp stat location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { # you can move stat.xsl to a different location root /etc/nginx/; } location / { rtmp_control all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } # RTMP proxy rtmp { access_log /var/log/nginx/rtmp_access.log; server { listen 1935; ping 30s; notify_method get; # ретрансляция без звука application camera_1 { live on; exec_pull ffmpeg_nginx -i http://192.168.2.40:8000/71-camera1 -vcodec copy -f flv -an rtmp://localhost:1935/camera_1/live 2>>/var/log/nginx/ffmpeg_camera_1.log; } # конвертируем в меньшее разрешение без звука application cam_1 { live on; exec_pull ffmpeg_nginx -i http://192.168.2.40:8000/71-camera1 -threads 2 -f flv -r 25 -s 800x600 -an rtmp://localhost:1935/cam_1/live 2>>/var/log/nginx/ffmpeg_cam1.log; } # и ещё один поток... application infochan { live on; exec_pull ffmpeg_nginx -i http://192.168.2.40:8000/70-infokanal -threads 2 -f flv -r 25 -s 800x600 -an rtmp://localhost:1935/infochan/live 2>>/var/log/nginx/ffmpeg_infochan.log; } } } |
Проверяем корректность нашего конфига nginx:
|
root@kubuntu:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful root@kubuntu:~# |
Если всё ок, то запускаем nginx:
Проверяем льётся ли что-нибудь на порт 1935. Выхлоп должен идти прямо в консоль.
|
rtmpdump -r "rtmp://127.0.0.1:1935/camera_1/live" -v rtmpdump -r "rtmp://127.0.0.1:1935/cam_1/live" -v rtmpdump -r "rtmp://127.0.0.1:1935/infochan/live" -v |
Если есть выхлоп, то гуд. Приступаем к установке Flash-плеера на сайт. Качаем и распаковываем папку архива на сайт.
Содержимое html-страницы где будет встроен плеер должно иметь следующую структуру:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< script src = "/jwplayer/jwplayer.js" type = "text/javascript" ></ script >
< div id = "contain" >Loading the player ...</ div >
< script >
jwplayer("contain").setup({
autostart:!0,
height:600,
width:800,
modes:[{
type:"flash",
src:"/jwplayer/player.swf",
config:{file:"live",streamer:"rtmp://внешний_ip_сервера_rtmp/infochan",provider:"rtmp"}
}]
});
</ script >
|