Большинство современных ip-камер умеют отдавать потоковое видео двумя основными способами:
1) по протоколу http: в виде потока jpeg-ов (Motion JPEG)
- поддерживается почти любым софтом - Motion, Zoneminder, AVReg ...
2) по протоколам rtsp:(управление), rtp:(транспорт) и сжатием - mpeg4 (обычно)
- поддержка захвата по rtsp недавно заявлена только у Zoneminder,
однако работает ли и как работает - я не проверял,
если кто пользовал - напишите в комментах.
Прим.: речь НЕ про фирменный платный или бесплатный софт, поставляемый
в комплекте с ip-камерой, а про универсальный софт видеонаблюдения,
не завязанный на конкретного производителя или даже модели сетевых видеокамер.
Однако есть небольшое количество камер, которые:
1) могут отдавать видео только по rtsp, например D-Link DCS-950;
или
2) по http могут отдавать только одиночные кадры JPEG (snapshot mode или still image),
что создаёт лишнюю нагрузку на сеть (при http/1.0) и не позволяет получить
высокую и стабильную скорость захвата (условно выше 10fps)
Примеры: D-Link DCS-2000+, DCS-2100, DCS-3230, DCS-5300.
Прим.: модельный ряд D-Link-а выбран исключительно из за распространённости,
а также потому, что у других уважаемых производителей моделей с подобными
функциональными ограничениями лично я не встречал.
Ниже предлагаю вариант сопряжения подобных устройств с выше обозначенным софтом.
Важное замечание: серьёзными недостатками этого метода являются последствия
дополнительного лишнего декодирования (из mpeg4) и кодирования видео (в jpeg):
1) существенная нагрузка на процессор (+20% на 2.4ГГц Intel-е, поток 640x480@25fps);
2) потеря в качестве изображения.
Итак, к делу - SYNOPSIS.
% vlc --intf dummy rtsp://x.x.x.x:554/mpeg4/media.amp --no-sout-audio \
--sout '#transcode{vcodec=MJPG}:standard{ \
access=http{mime=multipart/x-mixed-replace;boundary=myboundary}, \
mux=mpjpeg,dst=:8050/video.mjpg}'
VLC media player 0.8.6h Janus
[00000289] dummy interface: using the dummy interface module...
[00000306] main private: creating httpd
Где, vlc - это vlc, x.x.x.x:554 - адрес и rtsp порт сетевой камеры,
8050 - порт http, с которого можно забирать живой поток с камеры в виде Motion JPEG.
Ниже привожу детали для конкретно заинтересованных.
% sudo netstat -atunp -l | grep vlc
tcp 0 0 x.x.x.x:60868 x.x.x.x:554 ESTABLISHED 7719/vlc
# это комп<->камера rtsp
udp 0 0 0.0.0.0:50750 0.0.0.0:* 7719/vlc
udp 0 0 0.0.0.0:50751 0.0.0.0:* 7719/vlc
udp 0 0 0.0.0.0:48576 0.0.0.0:* 7719/vlc
udp 0 0 0.0.0.0:48577 0.0.0.0:* 7719/vlc
# это транспортные соединения rtp для аудио и видео потоков
tcp 0 0 0.0.0.0:8050 0.0.0.0:* LISTEN 7719/vlc
# а вот он и желаемый результат - http-сервер, с которого мы будем забирать MJPEG
Проверяем доступность httpd.
% HEAD http://localhost:8050/video.mjpg
200 OK
Cache-Control: no-cache
Content-Length: 0
Content-Type: multipart/x-mixed-replace;boundary=myboundary
Client-Date: Fri, 04 Sep 2009 11:43:37 GMT
Client-Peer: 127.0.0.1:8050
Client-Response-Num: 1
Ну и наконец смотрим.
% ffplay http://localhost:8050/video.mjpg
Примечание: ffplay (из пакета ffmpeg) - единственный плеер в Debian 5.0 Lenny,
который отобразил этот поток.
Проверяли мы с камерой Axis,
только видео - rtsp://192.168.53.90:554/mpeg4/media.amp/trackID=1
Настройки Axis:
Video Stream:
* Maximum frame rate: Unlimited
MPEG4(MP4V-ES):
* Variable bit rate
* GOV length: 12
* Maximum bit rate: limited, 3000 kbit/s
* Variable bit rate
Поток получался 640x480@25fps.
|