Работа с камерой Dlink DCS-2130 в режиме RTSP-over-HTTPВсем привет. Хотел поделиться информацией - вдруг кому пригодится.
Итак, приобрел Dlink DCS-2130 - требуется смотреть за ребенком удаленно. Задача - организовать переносную камеру, работающую через WiFi и установленную за домашним WiFi-маршрутизатором с NAT.
ПРОБЛЕМАВ силу неудобства, глючности и тормознутости WEB-интерфейса с прибамбасом в виде QuickTime, решил использовать какую-нибудь стороннюю программу и протокол RTSP. Настроил камеру стандартно, настроил профили, сделал проброс для контрольной сессии RTSP в NAT-таблице маршрутизатора для доступа извне. Подключаюсь с реального IP-адреса (в примере ниже заменен на 1.2.3.4) к камере с помощью VLC, открвается RTSP-сессия (TCP 554), камера начинает отправлять 2 UDP-потока (UDP 6970 и 6972) в сторону моего IP (звук и видео, я так понимаю):
Цитата:
19:56:21.117472 IP 1.2.3.4.4068 > 192.168.234.8.554: S 2144813683:2144813683(0) win 64240 <mss 1452,nop,nop,sackOK>
19:56:21.119084 IP 192.168.234.8.554 > 1.2.3.4.4068: S 1932912736:1932912736(0) ack 2144813684 win 5840 <mss 1460,nop,nop,sackOK>
19:56:21.136760 IP 1.2.3.4.4068 > 192.168.234.8.554: . ack 1 win 64240
19:56:21.217765 IP 1.2.3.4.4068 > 192.168.234.8.554: P 1:138(137) ack 1 win 64240
19:56:21.219672 IP 192.168.234.8.554 > 1.2.3.4.4068: . ack 138 win 5840
19:56:21.224014 IP 192.168.234.8.554 > 1.2.3.4.4068: P 1:153(152) ack 138 win 5840
19:56:21.662196 IP 1.2.3.4.4068 > 192.168.234.8.554: P 138:301(163) ack 153 win 64088
19:56:21.665731 IP 192.168.234.8.554 > 1.2.3.4.4068: P 153:956(803) ack 301 win 5840
19:56:22.979359 IP 192.168.234.8.554 > 1.2.3.4.4068: P 153:956(803) ack 301 win 5840
19:56:23.195924 IP 1.2.3.4.4068 > 192.168.234.8.554: P 301:480(179) ack 956 win 63285
19:56:23.201648 IP 192.168.234.8.554 > 1.2.3.4.4068: P 956:1153(197) ack 480 win 6432
19:56:23.425865 IP 1.2.3.4.4068 > 192.168.234.8.554: P 480:672(192) ack 1153 win 63088
19:56:23.429935 IP 192.168.234.8.554 > 1.2.3.4.4068: P 1153:1350(197) ack 672 win 7504
19:56:23.744516 IP 1.2.3.4.4068 > 192.168.234.8.554: P 672:826(154) ack 1350 win 62891
19:56:23.749063 IP 192.168.234.8.554 > 1.2.3.4.4068: P 1350:1599(249) ack 826 win 7504
19:56:23.764936 IP 192.168.234.8.6970 > 1.2.3.4.4070: UDP, length: 1448
19:56:23.765864 IP 192.168.234.8.6972 > 1.2.3.4.4072: UDP, length: 1012
19:56:23.767017 IP 192.168.234.8.6970 > 1.2.3.4.4070: UDP, length: 1448
19:56:23.768522 IP 192.168.234.8.6970 > 1.2.3.4.4070: UDP, length: 1448
19:56:23.771140 IP 192.168.234.8.6970 > 1.2.3.4.4070: UDP, length: 1448
...
...
Так все великолепно проигрывается ~45 секунд, после чего камера
ВНЕЗАПНО послылает TCP-FIN в RTSP-сессию, мой IP отвечает ACKом, и закрывает сессию со своей стороны:
Цитата:
...
...
19:57:09.411213 IP 192.168.234.8.554 > 1.2.3.4.4068: F 1677:1677(0) ack 970 win 7504
19:57:10.002321 IP 1.2.3.4.4068 > 192.168.234.8.554: . ack 1678 win 64162
19:57:10.006300 IP 1.2.3.4.4068 > 192.168.234.8.554: F 970:970(0) ack 1678 win 64162
19:57:10.007693 IP 192.168.234.8.554 > 1.2.3.4.4068: . ack 971 win 7504
Если открыть новую сессию - все снова начиниает работать и через ~45 сек отваливается. Почему? Да кто ж его знает... Никакие настройки камеры не повлияли на ситуацию. Могу, конечно, допустить, что проблема в работе NAT на маршрутизаторе, за которым стоит камера или в работе IDS (система защиты от вторжений, управляю ей не я, проверить/посмотреть ничего не могу) в сети, откуда я подключаюсь.
РЕШЕНИЕТак, прошу прощения за долгое вступление. Теперь про решение проблемы. Оказывается, камера DCS-2130 умеет отдавать поток RTSP в режиме туннелирования через HTTP. Т.е. UDP не используется вообще, весь обмен данными с точки зрения транспортного уровня идет внутри одной сессии TCP, которую устанавливает программа, запросившая видео (в моем случае VLC). Т.е. достаточно сделать DNAT (проброс извне) на маршрутизаторе для протокола TCP:80 и все должно заработать. Из минусов - увеличивается время задержки между событием и его отображением (у меня в режиме RTSP-over-HTTP задержка около 5 секунд, при использовании нормального RTSP - 1-2 сек) и несколько возрастает трафик.
Итак, в примере использовался 2-ой профиль, настроенный на камере:
CAM: DCS-2130 Firmware Version: 1.00.00
VIDEO: H.264, 640x360, 15fps, constant bitrate 512k
(дада, у меня Stream ((( )AUDIO: G.711
(имхо, он вообще работает гораздо лучше и стабильнее)Был сделан проброс в маршрутизаторе ASUS WL-500gP (там Linux с iptables) с внешнего порта TCP:8082 на внутренний TCP:80:
iptables -t nat -A VSERVER -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.234.8:80
Еще некоторое время было потрачено на поиск софта, который бы умел работать с RTSP-over-HTTP. Что нашлось:
1. "H.264 WebCam Deluxe v3.91" - весьма продвинутая программа для работы с камерами, DViewCam тихо плачет в углу. Платная. В исключительно демонстрационных целях выложена на rutr-сами-знаете-где.org. Настройка: кнопка Channel -> берем любой канал, настройки: "Net", Net Address - внешний адрес камеры (c DDNS отлично работает), галку на "IP Camera", Model "General", соседняя выпадающая строка "General IP Camera RTSP Stream Mode". Далее жмем на на кнопку с тремя точками рядом с "General IP Camera RTSP Stream Mode", открывается подменю: Access Name - "live2.sdp" (я использую второй профиль), RTSP Port "8082", RTSP Mode "HTTP". Все сохраняем, закрываем - и должно уже заработать.
2. "VideoLAN VLC". Берем свежий (у меня 2.0.1), запускаем обязательно(!) с параметрами
--rtsp-http --rtsp-http-port=NNNN, где NNNN - ваш внешний TCP-порт. Потом "Медиа", открыть URL, вбиваем RTSP адрес.
У меня полная строка запуска (сделал ярлык) такая:
vlc --rtsp-http --rtsp-http-port=8082
rtsp://xxxxxxxx.homeip.net/live2.sdpНадеюсь, кому-то поможет.
Дисклеймер:
Ко всему сказанному ранее в треде о "сырости" продукта полностью присоединяюсь - в текущем состоянии его внутреннего ПО пользоваться камерой на полную катушку (т.е. с записью на удаленные сервера, работой обратной свзяи и т.д.) можно только с большого горя. Никому его не рекомендую к приобретению в настоящий момент, а приведенную в этом комментарии информацию публикую как некий workaround для описанной проблемы.