Перейти к содержимому

Проброс камер из локальной сети в интернет

Министерство строительства и ЖКХ России намерено внедрить систему общественного контроля и веб-камеры на всех стройках, которые ведутся в России …

Так и начинаются мучения с этими видеокамерами, начиная от установки их на строй площадке, заканчивая размещения кода на сайте.

Что имеем: 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&amp;password=&amp;channel=1&amp;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&amp;password=&amp;channel=1&amp;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&amp;password=&amp;channel=1&amp;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&amp;password=&amp;channel=1&amp;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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.