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

    Всем привет.

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


    В рамках этого проекта в г. Красногорск, мы решили установить пару сетевых камер и сделать удобным просмотр потокового видео. Забегая вперед, результат можно посмотреть на нашем сайте или с мобильного телефона по 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, не понравилось, еще варианты?


    Статья публиковалась в песочнице, реакции не последовало, поэтому по просьбе автора решил разместить от своего имени. Соответственно, на комментарии будет отвечать (по мере возможности) сам автор от моего имени.
    Share post

    Comments 73

      +1
      «переложить функцию доставки мобильного видео на vlc» это жестоко. Для этого есть стриминг-серверы. Например опенсорсный эппловский Darwin Streaming Server.
        +1
        спасибо, будем пробовать.
          0
          Кстати а почему жестоко  ? вроде как vlc себя так и позиционирует, как не только медиа проигрыватель.
            0
            Потому что делать стриминг для него — не проблема, но, есил я верно помню, на большом количестве клиентов его производительность может резко падать. А DSS, будучи предназначенным исключительно для этого, показывает вполне неплохие результаты.
          0
          Включить ретранслятор и все виды потоков для клиентов через него отдавать и будет отлично
          • UFO just landed and posted this here
              +1
              Наша локальная сеть — полностью маршрутизируемая, мы можем подать на любой управляемый порт нужный vlan. Таким образом, у всех камер реальные ip-адреса.
              Стриминг-сервер находится в «дата-центре», у него тоже реальный адрес, он берет потоки по rtsp и выдает их на себе на 0.0.0.0:8081, например, далее отдельная машина с паблик веб-сервером, на котором jw плееру просто скармливаются ссылки со второго сервера. В общем, все это не принципиально, но спасибо за вопрос.
                0
                физически к инету та как подключили? а то в статье так и не раскрыто…
                • UFO just landed and posted this here
                +8
                Напишите в личку — поделюсь инвайтом для автора статьи.
                  +6
                  Спасибо :) Сбылась мечта.
                • UFO just landed and posted this here
                    0
                    Поправили, спасибо.
                      0
                      На самом деле, не совсем. Осталось закрыть <img /> :)
                        +1
                        ага, thx!
                    0
                    Пока подобного сервиса ни у одного «гиганта» по предоставлению информации о пробках типа смилинка или яндекса не видел. Проект можно сделать и вкусно продать. Источником видео информации могут являться камеры проекта Безопасный Город Москва.
                      0
                      Автор принимал участие в этом проекте в Тимирязевском районе г. Москвы с 900 аналоговыми камерами. В качестве софта использовали itv.ru
                      0
                      Так, кто это у нас ездит каждый день ровно в 13:00 на черном мерсе с затонированными стеклами…
                      :-)
                        +2
                        ура! спасибо! сейчас эйфория пройдет и смогу сам отвечать на все вопросы.
                          +1
                          очень боюсь «хабраэффекта» :)
                            0
                            для записи видео есть такая штука www.lavrsen.dk/twiki/bin/view/Motion/WebHome
                            только она под linux, но то что вы описали и там заработает
                            вроде умеет сразу в flv писать
                              +1
                              да, видел, еще очень давно, старый проект — motion.
                              хочется чего-то большего, не использовать статические картинки вообще, писать, допустим, маленькими блоками, но видео, при этом на уровне плеера делать что-то вроде индексированного плейлиста по минутам, надеюсь, идея понятна.

                              если все пройдет удачно, выложу статью про то, как мы записываем мультикастный поток iptv и интегрируем с программой передач, так, что можно посмотреть конкретную передачу по конкретному каналу за последние несколько дней. а тут, по сути, практически то же самое, но дискретность повыше.

                              всем спасибо за ответы, пойду спать. до завтра, если доживет :)

                                0
                                что касается картинок, то motion и без картинок работает — может тянуть MJPEG поток с камеры.
                                ну а iptv это совсем про другое
                              0
                              160х120, битрейт 256 килобит/c, 5 fps — что-то сильно жирно для такого битрейта.
                              20-50кбит еще можно поверить.
                                0
                                Тфу, сильно жирно для такого разрешения и fps
                                0
                                круто… надо будет попробовать реализовать
                                  0
                                  Посоветуйте кто-нить что-то кроме пафосных axis, подешевле. Для счастья надо отправки по фтп, cron.
                                    0
                                    smartec-cctv.ru/news/internet-camera.htm вот такой вариант! программное обеспечение для удаленного наблюдения входит в комплект.
                                    0
                                    Xumepa, спасибо, офигенский сервис! Есть ли в планах камеры на Речной улице повесить, там тоже вечно стоит :(?
                                      +1
                                      Поставим со временем везде, где стоит. Спасибо за интерес.
                                      0
                                      Расскажите, плз, как вы разместили камеру на Google Maps?
                                        +1
                                        да, собственно, стандартными info bubble, конкретно эту часть делал другой человек из команды, появится, попрошу, чтобы отписался поконкретнее.
                                          +2
                                          При клике по ссылке в меню или маркеру на карте открывается InfoWindow (map.openInfoWindow), в котором запускается JW FLV Player через его javascript API. Стандартная иконка маркера в виде красной капли заменена на иконку вебкамеры, ориентированную в ту часть света, куда в реальности смотрит камера :)
                                            0
                                            Блин, я думал как-то попроще там ;) Спасибо
                                          0
                                          Блин, я давно думал как бы такое сделать =)
                                          У нас в офисе работает дурацкий videonet (уже в печенках сидит, оно конечно мощное но неповоротливое)

                                          Жаль нельзя использовать уже эти карты…

                                          Остальное поспрашиваю с утра, щас спать повалился…
                                            0
                                            Спасибо за камеры! Теперь можно будет прикинуть сколько на дорогу отводить)) И за статью спасибо, весьма интересно!
                                              0
                                              А мне реально с гуглом понравилось, боюсь теперь всю ночь не усну пока не сделаю так же =)
                                              0
                                              Почему-то камера Ленина, 5 — NW всегда тормозит, а остальные работают как часы!
                                                +2
                                                камеры всю зиму стояли без кожухов, залитые герметиком, без корпуса даже. немного запотели, может, поэтому.
                                                некоторые камеры шатает ветром, и поэтому изображение размывается…
                                                  0
                                                  Странно как они без кожухов выжили…
                                                    +3
                                                    ну, решение изначально «бюджетное», поэтому вместо кожухов использовались пластиковые бутылки литровые, сами камеры разобраны до плат и залиты герметиком. :)
                                                    как-то выжили. иногда, бывает, конкретно запотевают, но потом, в солнечную погоду, все возвращается.
                                                      0
                                                      А что от можно посоветовать для уличного и не бюджетного решения?
                                                        0
                                                        а какая нужна камера? ip или аналоговая?
                                                          0
                                                          ip. Хотя у нас есть аналоговые, но они подключены уже к videonet.
                                                          Может кстати есть какая коробка которая их сможет сделать как сетевыми?
                                                            0
                                                            Просто думаю развести коаксиальный кабель терминалом, и пустить на два устройства.
                                                              0
                                                            0
                                                            mobotix.com IP камеры на Linux, матрица 3МП, умеют управлять светом/дверьми, звонить на телефон и много еще чего.
                                                            Но стоит около 1600 Ойро.
                                                    0
                                                    Респект за реализацию. Темболее что скоро переезжать в Красногорск ))
                                                      +2
                                                      Относительно погоды, рекомендую посмотреть в сторону погодных станций с датчиками, допустим
                                                      Oregon Scientific WMR928. Пример использования с выводом «наружу» можно посмотреть здесь.

                                                      К указанным выше компаниям не имею отношения, просто самому было интересно, искал решение, нашел.
                                                        +1
                                                        Супер, возможно, то что нужно. Спасибо!
                                                          0
                                                          а оно под какую ОС? Если под Win, если ли под linux?
                                                          +2
                                                          В принципе, кстати, с камер также идет звук, даже на мобильном телефоне слышно, если смотреть, надо попробовать его до flv догнать. Правда, кроме шума ветра, особо ничего там и не будет, но если камеру поставить в место поинтересней…
                                                            +3
                                                            Очень странно, конечно: в «песочнице» статья висела две недели, эффекта 0. При этом, насколько я вижу, сообществом тема воспринялась вполне дружелюбно. Это значит, что песочница себя не оправдывает, и наверняка кто-то сильно по этому поводу расстраивается. Нечестно.
                                                              0
                                                              Тема очень интересная. Я бы например одну бы камеру поставил дома, и тут возникает один вопрос.
                                                              Дома не у всех есть выделенный ip, ну или как вариант лень его оплачивать.
                                                              Да есть всякие dyndns, но как то криво и не красиво.
                                                              Но есть еще ряд людей, у которых есть сервера мощные в дата центрах :)
                                                              Можно каким то образом, направить поток на такой сервер? и с него уже выводить на корпоративном сайте камеру :D?
                                                                0
                                                                если вы живете в Красногорске, подключайтесь :)
                                                                Даже имея серый адрес вам никто не мешает перманентно настроить трансляцию по udp на любой внешний хост. Т.е. данные будут сами слаться. Там можно забирать и дальше вперед.

                                                                  0
                                                                  Нет в Москве =)
                                                                  а можно как то поподробнее? если не сложно.
                                                                  те один VLC должен передовать другому?
                                                                    0
                                                                    ну, грубо говоря, можно сделать так на вашей домашней машине так
                                                                    типа vlc поток_с_камеры --sout udp:real_ip --ttl 20 (текущее количество хопов до внешнего хоста), под windows это все делается через gui, не суть

                                                                    а на сервере забирать типа vlc udp://real_ip:port ну и дальше что нужно с ним делать, можно, как у нас, транскодить и дальше что-то делать.

                                                                    тут именно смысл в том, что трафик инициируется вашей домашней машиной, т.е. вы шлете сами, без запросов от сервера.
                                                                    полоса соответственно будет постоянно заюзана.

                                                                      0
                                                                      Как я писал выше, у нас есть камеры, думаю посмотреть устройство которое сможет их превратить в ip. (может вы такие знаете? ) и примерно какая нагрузка на преобразовании mpeg в flv?
                                                                      и сколько уходит на upload?
                                                                        0
                                                                        видеосервера axis не в счет?
                                                                        нагрузку оценить сложно, опыт показал, что если не измываться над исходным потоком — не менять особо битрейт, не ресайзить картинку и т.п., то нагрузка существенно меньше. кодек попроще, инкапсуляцию…
                                                                        про upload не понял, есть битрейт=полоса, умножаем на время, получаем трафик…
                                                                          0
                                                                          у axis регистратор как то не ахти. 1 кадр в секунду сказали маловато =)
                                                                          может знаете, что то получше? Хочется все же полностью автономную систему. (videonet задрал)
                                                                        0
                                                                        Кстати, тут пришла мысль сделать потоковую картинку с десктопа во flash =)
                                                                        Можно тогда через веб доступ мониторить ПС и помогать юзерам =) и полностью отказатся от vnc.
                                                                        Попробовал у себя на маке, понравилось =)
                                                                0
                                                                если кому интересно, благодаря хабре мы получили 40мегабит исходящего трафика. ~20 одновременных пользователей по 2 мегабита, получается. неплохо. всё выжило :)
                                                                  0
                                                                  А почему меня при щелчке на любой камере снабжают таким сообщением?
                                                                    0
                                                                    странно, у нас работает.
                                                                      0
                                                                      А камеры от ipls.ru когда будут работать?
                                                                        0
                                                                        да вот неудачно vlc обновили, теперь с транскодингом mms проблемы.
                                                                        можно их камеры пока смотреть в первоисточнике, на ipls.ru
                                                                          0
                                                                          Камера которая смотрит на Макдональдс наклонилась или её, что-то закрыло (
                                                                            0
                                                                            Только сейчас обратил внимание на ссылку «сообщить о проблеме с камерой» :)
                                                                    0
                                                                    Получается ужасная картинка: spline.ifmo.ru/cam2/
                                                                    Не подскажете, что может быть не так? Исползую FLV1, и есть подозрение, что какие-то проблемы с кодеком, именно в ОС (FreeBSD 7.1-RELEASE). Стоит ffmpeg-2008.07.27_10 из портов, vlc-0.9.9.a_1,3 — оба из портов. Битрейт пробовал разный — не влияет.

                                                                    Еще момент: я пробовал wget'ать

                                                                    wget localhost:8081/cam.flv
                                                                    Resolving localhost… 127.0.0.1
                                                                    Connecting to localhost|127.0.0.1|:8081… connected.
                                                                    HTTP request sent, awaiting response… 200 OK
                                                                    Length: unspecified [video/x-flv]

                                                                    — почему-то очень низкая скорость, 3.28K/s, 2.76K/s и т.д. Может тут проблема?

                                                                    Конфиг:
                                                                    setup kamera 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:8081/cam.flv,delay=1000}
                                                                      0
                                                                      а не в курсе с этих камер можно получить одиночный jpeg?
                                                                        0
                                                                        Мы запустили услугу распространения потокового (streaming) видео через CDN, можем дать вам попробовать.
                                                                          0
                                                                          У меня камера D-Link DCS-2100, видео отдает по IP/cgi-bin/video.vam
                                                                          Сделал все как написано в статье, не ругается, но wget ничего не скачивает, т.е. в flv ничего не жмется :(
                                                                            0
                                                                            А у кого нибудь получилось задействовать аудио выход камеры?
                                                                            Чтобы звук на неё уходил? (не из ПО в комплекте?)

                                                                            Only users with full accounts can post comments. Log in, please.