В начале 2016 года сервис для организации трансляций «Линия» подвергся неожиданному испытанию на прочность. А все благодаря событиям в сафари-парке, где в одном вольере жили самые распиаренные в стране тигр и козел. 31 декабря 2015 года в эфире национального телевидения было объявлено о начале прямой трансляции, которая была организована с помощью нашего сервиса. Практически сразу после этого не выдержал нагрузки как сайт парка, так и наши серверы.

В течение пары часов трансляция была восстановлена, добавлены необходимые мощности для более чем 2 500 000 подключений к IP-камерам. За следующую неделю в сервис были добавлены серверы в Голландии и США, разработана функция защиты трансляции. В общем, мы сделали все, чтобы наш сервис выдерживал любой объем желающих посмотреть популярную трансляцию. В этом конкретном примере аудитория составила более 10 млн человек.



С тех пор популярность этой услуги только растет. Мало того, что это прекрасный маркетинговый инструмент, который можно применить абсолютно в любом бизнесе, так еще и приносит приятные бонусы в виде улучшения поведенческих характеристик сайта и повышения доверия к компании, продукту или услуге.

Помимо Амура и Тимура, на нашей практике есть множество интересных примеров. Это и сеть цветочных магазинов, и стационар в клинике для домашних животных, и спортивные события. В общем, для бизнеса это просто кладезь идей, которые мы рассмотрели подробно и с примерами в этой статье.

От идеи к реализации. Как все организовать максимально выгодно

Потоки камер «из коробки» не предназначены для трансляции на сайте, поэтому лучше использовать программное обеспечение для видеонаблюдения. У тех, кто ранее установил такую систему, лишних затрат будет по минимуму или вообще не будет.

Остальным можно воспользоваться бесплатной демоверсией программы для видеонаблюдения «Линия» для Linux. Для трансляции понадобится только камера, с которой мы будем забирать поток и видеосервер на Linux.

Причем физический сервер – совсем не обязательный элемент. Можно установить «Линию» на VPS. Выбрать подходящий виртуальный сервер поможет множество обзоров как на Geektimes и Habrahabr, так и в других источниках.

Настройка трансляции возможна с помощью клиента «Линия» для Windows. Даже в демоверсию программного обеспечения мы заложили много полезных фишек, в том числе возможность оповещения при пропаже сигнала с камеры.

Размещение трансляции на сайте

После установки и проверки всех компонентов системы можно размещать трансляцию на вашем сайте. Создать собственный дизайн плеера можно, используя возможности html5 video + css.

API cистемы видеонаблюдения «Линия» позволяет получить как текущий кадр, так и H.264 поток (hls, flv).

Но идеального решения для всех платформ не существует. Так, Internet Explorer может проигрывать только flv, Chrome в последнее время активно блокирует flash, в iOS не работает hls.js.

Решить это можно, написав обработчик на JavaScript или PHP, или использовать наше готовое решение — a.devline.ru/html5.



Безопасность превыше всего

Рассмотрим ситуацию, в которой ваша идея трансляции «выстрелила», и теперь тысячи людей со всего света заходят на ваш сайт ежечасно. Некоторые из них совсем не с добрыми намерениями, поэтому необходимо защититься от хотлинка, скрыть данные авторизации и IP-адрес сервера, настроить кеширование и так далее.

Тут на помощь приходит nginx, прописываем пару строк в конфиге, и сервер будет давать доступ только по ссылке следующего вида:

http://demo.devline.ru:3333/O0deKdmC0j2xLqRqM490Mw/1504967831/streaming/0/sub.m3u8

location / {
    rewrite /([a-zA-Z0-9_\-]*)/([0-9]*)/([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)\.(.*)$ /$3/$4/$5.$6?secl=$1&sect=$2&secq=$4&secm=$3;

    secure_link $arg_secl,$arg_sect;
    secure_link_md5 devline$arg_secq$arg_sect$remote_addr;
    if ($secure_link = "") { return 403; }
    if ($secure_link = "0") { return 404; }

    if ($arg_secm = "image") {rewrite /([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)\.(.*)$ /cameras/$2/$1 break;}
    rewrite /([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)\.(.*)$ /cameras/$2/$1/$3.$4 break;

      proxy_pass http://127.0.0.1:9786;
      proxy_set_header Authorization "Basic YWRtaW46";
}

Пример генерации ссылки на PHP:
$camid = "0";
$secret = 'devline';
$time_expires = time() + 90800; //life 24 hours
$key = str_replace("=", "", strtr(base64_encode(md5($secret.$camid.$time_expires.getenv("REMOTE_ADDR"), TRUE)), "+/", "-_"));
echo "/$key/$time_expires/streaming/$camid/sub.m3u8";
?>

Мы все сделали за вас

Все вышеперечисленное можно не делать самому, а просто воспользоваться нашим готовым решением — rtsp.me. Для работы сервиса не нужно быть пользователем программного обеспечения «Линия», достаточно иметь IP-камеру или DVR, поддерживающий RTSP-потоки. Оборудование должно быть со статическим IP-адресом и проброшенными портами.



Вы получаете защищенную трансляцию с поддержкой звука, возможность переключения между первым и вторым потоком. Посетители сайта не увидят реального логина и пароля от вашего видеосервера, ретранслятор продублирует видео, если смотрящих больше, чем один.

А наличие небольшого логотипа внизу плеера позволяет предоставлять услуги бесплатно. Лого можно убрать, выбрав один из платных тарифов.

Также пользователям сервиса доступна функция Timelapse — видео из серии кадров с вашей камеры видеонаблюдения. Десять дней с циклической записью, каждый кадр делается раз в десять минут. Файл создается раз в 24 часа, битрейт выходного видео ? 2 Мб/с. Существует платная версия с неограниченной глубиной архива в оплаченный период, а также с индивидуальными настройками периодичности создания кадров, времени создания записи, битрейта видео.

Какой вариант организации трансляции вы бы выбрали? Может быть, у вас уже есть трансляция на сайте? О чем она и во сколько вам обходится?

Комментарии (12)


  1. DEM_dwg
    02.10.2017 22:16

    А задержка какая?


    1. devlineman Автор
      03.10.2017 16:41

      Задержка может быть от 2 секунд в зависимости от качества и возможностей канала связи. Сетевым клиентам сервер отдает без задержки.


  1. xsash
    03.10.2017 07:43

    По Timelapse
    — хотелось бы настраивать временной отрезок… Например, для стройки некого здания/дачи — 1 кадр в 10 минут будет нормально, а для других, более динамичных действий — уже слишком долго
    — так же, задавать временной отрезок для создания Timelapse, например, исключить темное время суток


    1. devlineman Автор
      03.10.2017 16:54

      Можно сделать все что захотите, обговаривается индивидуально, но только в платном варианте услуги.


  1. vp7
    03.10.2017 10:06

    У вас очень оригинальный способ установки ПО «Линия» на Linux системы — скачиваем некий файл и запускаем его из под рута.
    Если эта выделенная только для вашего ПО виртуалка, то вариант пусть и спорный, но с некоторой натяжкой допустимый, иначе… ну вы сами понимаете :)

    Сделайте установщик через .rpm / .deb пакеты или версию с поставкой в docker контейнере.
    И вам меньше головной боли с ошибками установки и клиентам поддерживать такое решение будет значительно проще.


    1. devlineman Автор
      03.10.2017 16:47

      Весь мир пользуется коммерческим софтом без исходников под админом или рутом, комбинируя установку на одном сервере, это конечно вопрос больше дискуссионный. Наша компания и ПО Линия на рынке более 13 лет и нам экономически не целесообразно портить имидж продукта каким-то бэкдором или другим не желательным воздействием на систему где ставится Линия.
      Для пользователей осваивающих Linux платформу, предлагаем скачать исполняемый файл и произвести его установку наиболее легким способом. Вы можете скачать инсталлятор и в ручную распаковать его архиватором tar в корень системы.


  1. Stronix
    03.10.2017 10:49

    Я так понимаю, для перекодирования используется ffmpeg, как насчёт соблюдения GPL?


    1. devlineman Автор
      03.10.2017 16:47

      Трансляция на сайт при использовании наших серверов ретрансляции (Линия Облако + RTSP.me) осуществляется при использовании не модифицированного ffmpeg с официального репозитория без нарушения GPL лицензирования.


  1. Phil_itch
    03.10.2017 11:38

    Немножко гиковости, все-таки гиктаймс https://geektimes.ru/post/285342/


    1. devlineman Автор
      03.10.2017 16:51

      Хорошая статья, дополняющая техническими подробностями данную тему.
      Стоит отметить, что человеку пришлось изобретать «велосипед», «копия» которого не у всех «поехала» по разным «дорогам» =)
      Мы предлагаем готовый сервис трансляции сделанный на основе HTML5 и оптимизированный для трансляции под все популярные браузеры и мобильные клиенты. Всем гикам уже имеющим свои реализации можем рекомендовать сравнить как это сделали мы, а тем кто не готов делать свою реализацию предлагаем удобный\быстро реализуемый\бесплатный механизм.


  1. Paradoxalniy
    03.10.2017 12:42

    Благодарю, весьма полезно. Также заценил ваш сервис и теперь могу точно быть уверенным, что если возникнет желание транслировать свой участок с фруктовым садом и двумя большими огородами — обязательно воспользуюсь вашей услугой!


    1. devlineman Автор
      03.10.2017 16:40

      Спасибо большое за доверие! Надеемся, что наш сервис вас полностью устроит.