Вы едете в лифте. Перед вами экран с информацией. Присмотримся к нему повнимательнее. Для начала проверим, куда идёт кабель. Если открыть люк сверху, то можно увидеть, что прямо на крыше лифта лежит системный блок в специальном исполнении с некоторой дополнительной защитой. И без вентиляторов. Там стоит какая-нибудь довольно простая Windows (возможно — embedded-версия, поставленная ещё на заводе) и Wi-Fi модуль. Где-то неподалёку в шахте найдётся и роутер, подключённый кабелем к локальной сети.
В кабине лифт может быть ещё и камера, картинка с которой обрабатывается специальным софтом. Что, в свою очередь, позволяет распознать если не лицо, то по крайней мере, пол и возраст зашедшего, а затем выбирать и показывать информацию с учетом этих данных.
Это — часть системы дистрибуции контента. Конкретно этот узел может ездить вместе с лифтом во Владивостоке, а админить его может человек, сидящий где-то далеко, например, в Москве.

Но начнём сначала
Сначала все расписания и объявления делались на бумаге. Максимальную интерактивность обеспечивал стенд со специальным кармашком, куда можно было вставить новую бумажку. Если нужно было поменять что-то в расписании пар, например, то человек из деканата подходил и правил карандашом.
Понятно, что это очень мешало делать что-то более-менее регулярно обновляющееся, вроде табло с расписанием прибытия поездов. Следующим шагом эволюции систем оповещения стало появление табло с меняющимися числами и буками (листающимися карточками), которые управлялись достаточно простыми схемами или вообще вручную.
Сейчас используются экраны, плазменные панели, светодиодные табло и подобные штуки, которые могут показывать что угодно. И они стали настолько распространёнными, что возникла другая проблема: нужно было перестать бегать с болванками и флешками от экрана к экрану, а построить централизованную сеть управления информацией на них и распределении данных.

Как это работает?
Итак, представьте, что вы банк с кучей отделений, розничная сеть с магазинами по всей стране, аэропорт, вокзал, ВУЗ или что-то ещё. У вас есть куча панелей, видеостен и экранов, на которые выводится разная информация.
Каждый экран снабжается либо простой железкой с возможностью приёма информации и декодирования картинок-видео, либо почти обыкновенным системным блоком с Win на борту и установленной сетевой картой или Wi-Fi модулем. Этот компьютер умеет несколько вещей:
- Принимать контент;
- Декодировать разные форматы изображений и видео (иногда — даже флеш);
- Показывать всё это на экране в зависимости от скриптов и расписания;
- Обновлять виджеты по запросам к источникам в базах данных в сети или на локальном диске;
- Отправлять специальные отчёты о неполадках;
- Ну и просто работать как Win-машина, когда админ подключается для настройки или других работ.
Если на устройстве несколько видеовыходов, то оно может работать с таким же количеством близко расположенных экранов.

Для чего это вообще бывает нужно?
Это интерактивная навигация (особенно важная на конференциях, в торговых центрах и так далее), это расписания, разные рекламные ролики и другие штуки, плюс информация, которая просто интересна пользователям — например, у нас в офисе около лифтов показывается погода и уровень пробок, а ещё истории успеха по выполненным проектам, видеоролики о системах, которые мы внедряем и тому подобное. Ещё такие системы умеют показывать дни рождения сотрудников, порядок очереди в банках и многое другое. Но чаще всего речь идёт о рекламном видео или анимации.
Если вы были в киевском метро или ездили в маршрутках с собственным телевидением в Москве, то, наверное, видели эти экраны, на которых крутится развлекательная информация и реклама. Они тоже часть такой системы.
Понятно, что это просто удобнее бумаги, но есть ещё ряд плюсов. Например, проводились исследования для розничных сетей (источник – отчёт компании Nielsen), по которым 77% людей обращают внимание на динамическую информацию (это куда больше, чем в случае со статикой), а продаж с такой рекламы от 3 до 10 раз больше.
Более редкие возможные использования — передача персональной информации, например, напоминание о текущих задачах после распознавания конкретного сотрудника. Мы уже разрабатывали для одного банка систему персонализированной рекламы, когда экраны показывали именно те предложения, которые потенциально интересны подходящим к ним людям (софт анализировал данные с камеры и передавал выводы про пол и возраст).

Как это всё управляется?
В центре «паутины» — менеджмент-сервер, на котором стоит приложение, позволяющее загружать и раскидывать контент по всей сети, составлять расписание, управлять виджетами и так далее. Конкретных реализациий софта несколько сотен, из более-менее готовых для использования в нормальной крупной инфраструктуре — десятки точно. В зависимости от задачи выбирается конкретное решение. Кому-то нужно «один раз настроил, загружаешь новые ролики — и показывает», а кому-то хочется сложных скриптов и тонкой настройки. Также уровень системы зависит от количества узлов — например, на 1000 и более нужен софт, позволяющий удобно работать с группами и политиками.
Грубо говоря, основная задача менеджмент-сервера — передавать контент и его источники каждому узлу. Вторичная задача — сообщать о неполадках и вести мониторинг в целом.
Как правило, для менеджмент-сервера не нужно какое-то специальное железо: например, задача переконвертации форматов почти не стоит. Поставщики контента загружают видео уже в нужном формате и разрешении.
Также менеджмент-сервер и его софт умеют решать разные сервисные задачи, плюс, например, выключать узлы на ночь для экономии питания.
Как это связывается с другими системами?
Поскольку все данные на экранах могут быть интерактивными, достаточно просто указать в качестве источника вывод какого-нибудь датчика или базу данных, куда складываются какие-то данные. Например — показывать план на день сотруднику, прошедшему через турникет (и авторизовавшему по своей личной карте), детализировать информацию по мере приближения человек к экрану и так далее.

Что с негомогенностью железа?
Экраны разные, и софт это должен учитывать. На практике для каждого разрешения делаются собственные версии отображения. Если речь о видео — записывается отдельный файл, оптимизированный под конкретное разрешение, если речь об информационном контенте — верстается специальная версия именно под такие экраны. Плюс важно учитывать не только разрешение, но и физические размеры экрана: под разные диагонали тоже можно накатывать разные версии контента, чтобы на маленьких экранах текст не казался мелким, к примеру. Когда мы внедряем такие штуки у заказчиков, то всегда делаем измерения — удобно ли с конкретных мест, где будут стоять зрители, читать данные на экране.
Сами «железки» на местах тоже бывают разные. Если есть возможность, мы предпочитаем ставить небольшие системники с пассивным охлаждением, защищённые от вибрации, влажности и так далее. Они прячутся за панели потолка и т.п. Сейчас появляется много подходящих под эти задачи небольших устройств, например, на Андроид, стоимостью до 100 долларов, которые будут очень полезны в этой сфере в ближайшем будущем.
Что делает админ?
Админ один раз настраивает систему распределения контента (что, когда, кому, по каким правилам). Это же делается при внедрении, то есть можно полностью аутсорсить управление на внешний саппорт. Если речь о стандартных задачах, то чаще раза в несколько месяцев никакие настройки не требуются, главное — научить пользователей самостоятельно грузить контент или указывать источники.
Админ нужен в момент тревоги мониторинга: чаще всего кто-то перенастраивает сеть и забывает об этом уведомить (падает связка с менеджмент-сервером), железо выходит из строя и так далее. Всё что связано со стандартным администрированием решается удалённо, но если вышло из строя оборудование — нужно звонить на место и просить сделать замену, с чем справляются службы АХО.
Какие самые масштабные примеры Digital Sisgnage бывают?
Пожалуй, это розница, которая крутит рекламные ролики по всей стране, крупные компании с информационными стендами на каждом этаже, аэропорты и вокзалы, а также, конечно, банки, которые имеют представительства по всей стране. При этом, например, всей банковской системой доставки контента управляет всего один админ, что очень и очень удобно.
Собственно, вот и всё, что я хотел рассказать про эту, казалось бы, достаточно очевидную тему, в которой, при хорошем таком масштабировании, всё же, есть масса нюансов. Если у вас остались вопросы по технике – с удовольствием отвечу в комментариях или по почте RTarabrin@croc.ru. На вопросы о стоимости, внедрении и подобным вещам ответит мой коллега Алексей AVolkov@croc.ru.
Лично я являюсь разработчиком digital-signage системы. Не буду спорить самый крупный клиент не такой уж и крупный — всего 300 плееров (в 200 офисах). Но должен признать, что статья написана… понятным языком. Если будет интересно, то могу выложить подноготную (техническую сторону) сих систем в отдельной статье.
// сей коммент опубликован от имени друга
Очень интересны технические детали конечных точек:
какие мониторы, какие плееры к ним? Какие есть сейчас альтернативы не на виндовс?
как организуется связь?
данные запрашиваются конечными точками или распихиваются сервером?
Ну, я не разработчик, но пользователь. Могу сказать так: мультикаст вещание никто не отменял, винда тут вообще никаким боком не нужна и скорее даже вредна (я даже не представляю, как без костылей на ней что-то сделать), нужен embedded linux с какой-нибудь libvlc допиленной — и всё. В рамках одного сегмента сети при желании система создаётся с 0 группой сисадминов, знающих PHP, Linux и немного программирования для создания связок и интерфейса управления, ибо ничего специфического для неё не надо. Хотя если использовать винду, то придётся попотеть, наверно.
Для удалёнки нужен сервер в каждом сегменте, который будет получать и обрабатывать контент, вещая его по мультикасту на приставки. В принципе, каждый девайс при наличии винча может быть одновременно сервером сам для себя. А если на девайсе не нужно ничего хранить, то вообще LTSP и бездисковая загрузка с централизованным хранилищем конфигураций. Девайс сгорел — воткнул вместо него другой и вперёд.
Итого: покупаем какую-нибудь платформу для ПК в компактном корпусе и с HDMI выходом, ставим туда любой дистр линукса и vlc, пишем обвязочку для удалённого управления vlc, пишем интерфейс и обвязочку для сервака — в простейшем случае всё. Хотим всякие бегущие строки — придётся попариться с несколькими слоями контента, но это опять же не проблема, только чуть больше работы.
Такое покатит, если крутить надо в своём офисе.
Если же речь идёт о распределённой сети, то вот несколько пунктов:
1. «покупаем какую-нибудь платформу для ПК в компактном корпусе и с HDMI выходом» — не подойдёт! Важен аптайм! Повисший плеер перегрузить будет некому, если он за тысячи км от вас. Плеер должен отвечать промышленным требованиям.
2. Дополнительные фичи: gprs/3g-модем или ещё чего… К какой-нибудь платформе просто так не прикрутишь.
4. Условия эксплуатации — важнейший факт, который сильно влияет на конструктив и начинку.
3. Тезисы из п.1 касаются и embedded софта. Повышенные требования к разработке, отладке и тестированию. Впрочем, это зачастую касается любого встраиваемого софта. «Группа сисадминов знающих php» — здесь не справится. Да и причём здесь вообще php? Нужны разработчики с опытом разработки встраиваемых решений.
И да, на борту Linux embedded. Хотя я не вижу особых проблем, при большом желании реализовать подобное на Windows CE или Windows Embedded Compact.
Если речь идёт о коммерческом решении, то просто крутить по расписанию нельзя. Нужно точно знать что, когда, сколько раз и в какие моменты времени проигрывалось. За это с клиентов берутся деньги.
Каскадируемый сервер сбора-раздачи (контент, расписание, логи), плюс app-сервер с веб-мордой для управления всем этим хозяйством.
Зачем тут админ, я не понимаю. Чего там админить, всё и так работает. А грузить контент в систему, управлять расписанием и т.п. — не админское это дело.
У нас так:
>Очень интересны технические детали конечных точек: какие мониторы, какие плееры к ним? Какие есть сейчас альтернативы не на виндовс?
В качестве мониторов клиент выбрал телевизоры LG 42" — те предложили интересные условия и у LG был ящик, которым можно управлять по RS-232 (вкл/выкл, уровень звука, переключение на HDMI, контроль того, что он работает и показывает сигнал с нужного HDMI-порта)
Плееры в промышленном исполнении сделали мы.
>как организуется связь?
gprs/3g-каналы. Но есть возможность подключать шлангом через Ethernet или вафлей. Плееры можно каскадировать: мастер забирает контент с расписанием (себе и детям, как правило они идентичны), с него младшие получают свои порции по эзернету.
>данные запрашиваются конечными точками или распихиваются сервером?
Запрашиваются конечными точками. Плеер выходит на связь периодически (раз в час), сигнализирует о своей работоспособности. Раз в сутки сеанс связи для обновления контента и правил его показа, а также в этот момент он сбрасывает на сервер логи о прошедших сутках. Последний сеанс обычно проводится ночью — в этом время сотовые сети свободнее.
По внутренним правилам, утверждённое расписание ротации всегда есть на ближайшую неделю.
ой, сколько людей занимается тем же самым.
у меня — самописная система поверх libvlc — в Linux/Windows
год писал, вот уже год сопровождаю.
недавно на самый свежий Libvlc перешел.
была задумка статью написать про железо используемое и про приколы с интеграцией libvlc в WPF, WinForms и в Qt, руки не доходят.
ну libvlc это только видео. А Digital Signage это не только видео. Это куча всего — текст, изображения, форматирование данных из БД, прозрачности, эффекты, распределение контента и т.д…
да это-то понятно, но оно все довольно просто реализуется, а вот видеопоток проще чем-то готовым. причем надо-то с поддержкой всех возможных кодеков, клиенты конвертировать форматы не умеют. перепробовал кучу компонент, лучше libvlc ничего не нашел.
а еще есть довольно сложная штука — синхронизация видео на всех устройствах.
у меня время задает специальный сервер воспроизведения, а устройства, получив с него текущее время видео, корректируют текущее воспроизведение с учетом средней задержки на общение с сервером. плюс периодически во время воспроизведения проверяет на случай лагов (диск тормознул — рассинхронизация пошла).
и опять же, кроме Libvlc отмотать время видео с необходимой точностью у меня ничем не получалось.