Министерство строительства и ЖКХ России намерено внедрить систему общественного контроля и веб-камеры на всех стройках, которые ведутся в России …
Так и начинаются мучения с этими видеокамерами, начиная от установки их на строй площадке, заканчивая размещения кода на сайте.
Что имеем: 2 видеокамеры на стройке, подключенные через оптоволокно в локальную сеть организации. Через локальную сеть все работает — т.е. чтобы посмотреть видео необходимо зайти по IP камеры ввести логин и пароль и получить доступ к видео потоку. Но требования гласит, чтобы доступ был для всех без ввода логина и пароля.
Локальная сеть получает доступ в Интернет через сервер, на сервере стоит Debian. Было принято решение пробросить видеокамеры в Интернет.
1 камера IP адрес 192.168.5.151 TCP port 34551 HTTP port 80 RTSP 557
2 камера IP адрес 192.168.5.152 TCP port 34552 HTTP port 80 RTSP 558
разные TCP и RTSP порты необходимо для разделения их на сервере
На сервере решаем проблему через iptables создаем файл iptables_video.sh с содержимым
iptables -t nat -A PREROUTING -p tcp -d 00.00.00.00 --dport 81 -j DNAT --to-destination 192.168.5.151:80 iptables -t nat -A PREROUTING -p tcp -d 00.00.00.00 --dport 557 -j DNAT --to-destination 192.168.5.151:557 iptables -t nat -A POSTROUTING -p tcp --dst 192.168.5.151 --dport 80 -j SNAT --to-source 00.00.00.00 iptables -t nat -A POSTROUTING -p tcp --dst 192.168.5.151 --dport 557 -j SNAT --to-source 00.00.00.00 iptables -t nat -A PREROUTING -p tcp -d 00.00.00.00 --dport 34551 -j DNAT --to-destination 192.168.5.151:34551 iptables -t nat -A POSTROUTING -p tcp --dst 192.168.5.151 --dport 34551 -j SNAT --to-source 00.00.00.00 iptables -t nat -A PREROUTING -p udp -d 00.00.00.00 --dport 34551 -j DNAT --to-destination 192.168.5.151:34551 iptables -t nat -A POSTROUTING -p udp --dst 192.168.5.151 --dport 34551 -j SNAT --to-source 00.00.00.00 iptables -t nat -A PREROUTING -p tcp -d 00.00.00.00 --dport 83 -j DNAT --to-destination 192.168.5.152:80 iptables -t nat -A PREROUTING -p tcp -d 00.00.00.00 --dport 558 -j DNAT --to-destination 192.168.5.152:558 iptables -t nat -A POSTROUTING -p tcp --dst 192.168.5.152 --dport 80 -j SNAT --to-source 00.00.00.00 iptables -t nat -A POSTROUTING -p tcp --dst 192.168.5.152 --dport 558 -j SNAT --to-source 00.00.00.00 iptables -t nat -A PREROUTING -p tcp -d 00.00.00.00 --dport 34552 -j DNAT --to-destination 192.168.5.152:34552 iptables -t nat -A POSTROUTING -p tcp --dst 192.168.5.152 --dport 34552 -j SNAT --to-source 00.00.00.00 iptables -t nat -A PREROUTING -p udp -d 00.00.00.00 --dport 34552 -j DNAT --to-destination 192.168.5.152:34552 iptables -t nat -A POSTROUTING -p udp --dst 192.168.5.152 --dport 34552 -j SNAT --to-source 00.00.00.00
где 00.00.00.00 статичный IP провайдера
Таким образом при запросе 00.00.00.00:81 будет отображаться 1 камера, а при запросе 00.00.00.00:83 будет отображаться вторая камера
Остается вопрос как разместить видео на сайте без всяких запросов?
При просмотре видео по адресу 00.00.00.00:81 в браузере (Chrome) можно посмотреть каким образом оно формируется (F12) и скопировать код для дальнейшей вставки на сайт:
<script type="text/javascript" src="m.jsp"></script><style type="text/css"></style> <script type="text/javascript"> var g_SoftWareVersion="V4.02.R11.00000520.12010"; var g_HardWareVersion="Unknown"; var g_mBuildTime="2014/1/16 16:50:44"; var g_SerialNo="0012210e7584"; var g_VideoInChannel=1; var g_AlarmInChannel=2; var g_AlarmOutChannel=1; var g_AudioInChannel=1; var g_DigChannel=0; var g_channelNumber=1; var g_user="viewer"; var g_port="557"; var g_address =document.location.hostname; if (g_address == ""){ // g_address = "10.2.4.46"; } var iLanguage=106; var g_passWord=""; var g_bSafari=false; </script> <script type="text/javascript" src="mt.js"></script><script src="English.js"></script> <script type="text/javascript"> var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] : (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] : (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] : (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] : (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0; if (Sys.safari){ g_bSafari=true; /*document.write('Safari: ' + Sys.safari);*/ } </script> <div id="mb" style="width: 998px; height: 542px; padding: 0px; margin: auto;"> <div id="mbb" style="width: 670px; height: 100%; float: left;"> <div id="playView" style="width: 712px; margin: 3px 2px 0px; height: 473px; float: left; background-color: rgb(192, 192, 192);"> <div id="vf1" onclick="clickV(1)" ondblclick="dbClickV(1)" style="width: 712px; height: 473px; position: relative; border: thin solid rgb(0, 255, 170);"> <div style="width: 712px; height: 473px; position: absolute; border: 0px; margin-top: 0px; margin-left: 0px; background-color: transparent;"> <div id="v1" style="border:0;width:100%;height:100%;position:absolute;"> <object classid="CLSID:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" id="mo" width="100%" height="100%" codebase="http://www.apple.com/qtactivex/qtplugin.cab"> <param name="src" value="back.GIF"> <param name="allowFullScreen" value="true"> <param name="qtsrc" value="rtsp://00.00.00.00:557/user=viewer&password=&channel=1&stream=1.sdp?real_stream--rtp-caching=100"> <param name="autoplay" value="true"> <param name="autohref" value="True"> <param name="target" value="myself "> <param name="href" value="javaScript:void(0)"> <param name="loop" value="false"> <param name="wMode" value="transparent"> <param name="controller" value="false"> <param name="scale" value="tofit"> <embed src="back.GIF" name="movie1" qtsrc="rtsp://00.00.00.00:557/user=viewer&password=&channel=1&stream=1.sdp?real_stream--rtp-caching=100" controller="false" width="100%" height="100%" loop="false" scale="tofit" wmode="Transparent" autoplay="true" kioskmode="true" enablejavasript="true" href="javaScript:void(0)" target="Myself" allowfullscreen="true" bgcolor="black" plugin="quicktimeplugin" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/"> </object> </div> </div> </div> </div> </div> <script type="text/javascript"> resizeM(); </script> </div>
Здесь по коду нужно заменить viewer на пользователя который создан в WEB камере, IP 00.00.00.00 заменить на свой и проверить порт RTSP
P.S. минимальный HTML код для камер
<object classid="CLSID:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" id="mo" width="100%" height="100%" codebase="http://www.apple.com/qtactivex/qtplugin.cab"> <param name="src" value="back.GIF"> <param name="allowFullScreen" value="true"> <param name="qtsrc" value="rtsp://00.00.00.00:554/user=user&password=&channel=1&stream=1.sdp?real_stream--rtp-caching=100"> <param name="autoplay" value="true"> <param name="autohref" value="True"> <param name="target" value="myself "> <param name="href" value="javaScript:void(0)"> <param name="loop" value="false"> <param name="wMode" value="transparent"> <param name="controller" value="false"> <param name="scale" value="tofit"> <embed src="back.GIF" name="movie1" qtsrc="rtsp://00.00.00.00:554/user=user&password=&channel=1&stream=1.sdp?real_stream--rtp-caching=100" controller="false" width="100%" height="100%" loop="false" scale="tofit" wmode="Transparent" autoplay="true" kioskmode="true" enablejavasript="true" href="javaScript:void(0)" target="Myself" allowfullscreen="true" bgcolor="black" plugin="quicktimeplugin" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/"> </object>
Если в сети используется squid то необходимо прописать Safe_ports порты которые вы прописали 81,83,557,558