Pull to refresh

Организация видеотрансляции на сайте

Reading time 4 min
Views 19K
Всем привет.

Боремся с пробками вместе


В рамках этого проекта в г. Красногорск, мы решили установить пару сетевых камер и сделать удобным просмотр потокового видео. Забегая вперед, результат можно посмотреть на нашем сайте или с мобильного телефона по wap www.ventumnet.ru/camera



Был какой-то опыт с камерами Axis, которые, безусловно, являются флагманами индустрии, но мы остановились на более бюджетном варианте — сетевыми камерами DCS-2102 от D-Link.
Стоят они в районе 4000 рублей. За эти деньги Вы получаете сносную картинку и битрейт, а самое главное — доступ по протоколу RTSP, причем сразу с настроенным профилем для просмотра на мобильных телефонах имеющих на борту плеер 3gp, в нашем случае это был T650i от Sony Ericsson.

Реализация


Для удобства просмотра в вебе решили конвертировать видео в онлайне в flv с помощью vlc, запущенного в режиме vlm.
Делается это так:
  1. cvlc -I telnet --telnet-password your_password --rtsp-caching=1200 --video --no-sout-audio --udp-caching=30000 --http-caching=5000

    Все параметры кеширования подобраны опытным путем, в вашем случае они могут быть другими.
    В принципе, с камер также идет звук, но нам он не нужен, поэтому --no-sout-audio.
  2. Подготавливаем конфиг /home/vlc/playlist.txt:

    new kamera4 broadcast enabled
    setup kamera4 input "rtsp://ip_address:554/mp4"
    setup kamera4 output #transcode{vcodec=FLV1,vb=2048,acodec=mp3,samplerate=22050}
    :std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8084/stream4.flv}
    new kamera3 broadcast enabled
    setup kamera3 input "rtsp://ip_adress2:554/mp4"
    setup kamera3 output #transcode{vcodec=FLV1,vb=2048,acodec=mp3,samplerate=22050}
    :std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8083/stream3.flv}
    control kamera4 play
    control kamera3 play


    Обратите внимание на dst, порты встроенного в vlc вебсервера — разные, на одинаковых запустить не удалось, хоть это и странно, и наверняка в следующих релизах vlc станет возможным отличать потоки только по второй части url, типа /stream1.flv /stream2.flv ..etc.
    Камеры настроены соответствующим образом, отдают 2 мегабита.

  3. # telnet localhost 4212
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Password:
    Welcome, Master
    > load /home/vlc/playlist.txt
    > exit
    Connection closed by foreign host.

  4. Проверяем, слушает?

    # netstat -an | grep 808
    tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8084 0.0.0.0:* LISTEN


  5. Можно wget'нуть.

    # wget "http://localhost:8084/stream4.flv"
    --2009-01-26 11:03:14-- localhost:8084/stream4.flv
    Распознаётся localhost... 127.0.0.1
    Устанавливается соединение с localhost|127.0.0.1|:8084... соединение установлено.
    Запрос HTTP послан, ожидается ответ... 200 OK
    Длина: нет информации [video/x-flv]
    Сохраняется в каталог: `stream4.flv'.

    [ <=> ] 1 114 847 85,8K/s ^C

  6. В качестве плеера использовали JW FLV Player
    Для получения статических картинок, а не потокового видео, пришлось подписывать NDA с D-Link'ом, чтобы получить доступ к камерам по http. Из соображений NDA ссылку мы приводить не будем, она просто вида kamera/cgi-bin/dai_mne_kartinuku_plz.cgi
  7. Попутно делаем wap-сайт, на котором можно либо смотреть картинки, либо прямо перейти по ссылке rtsp:// сразу на камеру. Заодно берем с gismeteo.ru погоду в /tmp/temp и оверлеем ее с помощью

    convert $IMAGE_PATH/cam2_new.jpg -fill yellow -pointsize 22 -gravity "South" -dr
    aw "text -230,310 'Сейчас `cat /tmp/temp`°C'" $IMAGE_PATH/cam2_new.jpg


    Картинка 160х120, битрейт 256 килобит/c, 5 fps, вполне себе смотрится через GPRS.
  8. Размещаем камеры на google maps.
  9. Посмотреть вживую можно на http://www.ventumnet.ru/live и через wap на www.ventumnet.ru/camera


Недостатки:


  • На данный момент существует какая-то проблема в сочетании adobe flash player 10, jw flv player'а 4.1.6 и конкретно нашего потокового видео. В adobe flash player 9 проблем не наблюдается.Проблема побеждена, решилась дополнительным инициализационным параметром start для jw flv player'а, который отвечает за то, с какого фрейма начинать воспроизводить видео. Очень помог пост отсюда, большое спасибо автору!
  • Камеры виснут раз в месяц, иногда чаще. Они доступны через http но перестают отдавать rtsp. С обновленной недавно прошивкой они стали работать лучше, но проблема сохранилась. Все камеры ломаются одновременно, т.е. тут роль играет время. В новой прошивке, кстати, добавилась поддержка ночного режима, теперь даже при свете фар что-то видно.
  • VLC тоже может упасть если долгое время поток недоступен.
  • Все мобильные телефоны напрямую обращаются к камерам, что, безусловно, создает на них нагрузку. Производителем обещано до 10 одновременных мобильных клиентов, на практике, нужно, конечно, со временем и ростом нагрузки, переложить функцию доставки мобильного видео также на vlc.
  • Погоду хочется брать не из открытых источников, а с сетевых датчиков влажности/температуры, подскажите, есть такие в продаже?
  • Необходимо решить задачу записи видео, пробовали zoneminder, не понравилось, еще варианты?


Статья публиковалась в песочнице, реакции не последовало, поэтому по просьбе автора решил разместить от своего имени. Соответственно, на комментарии будет отвечать (по мере возможности) сам автор от моего имени.
Tags:
Hubs:
+65
Comments 73
Comments Comments 73

Articles