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

    Всем привет.

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


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


    Статья публиковалась в песочнице, реакции не последовало, поэтому по просьбе автора решил разместить от своего имени. Соответственно, на комментарии будет отвечать (по мере возможности) сам автор от моего имени.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    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.