Возникла интересная задачка: вывести манагерам (и себе) разные данные на 42" телек. Ключевой подвох - данные разные. ВНИМАНИЕ! Перед тем, как начать что-то делать, прочитайте до конца и подумайте, а надо ли оно вам?.. ВНИМАНИЕ!
Для начала, решил определиться с мат.частью. Если с телеком всё было очень просто: находим более-менее приличное что-то за 10к руб. (было от Супры), то вот отдельную пеку заряжать под вывод картинки - роскош. Решено было заказывать с алишки stick-PC. Поиски довольно быстро явили мне изделие с Atom`ным сердцем от конторы BBEN. Почему они так себя назвали - хз. HDMI, 2 порта usb, питание через micro-usb (но нужен БП; есть в комплекте), wifi и даже слот для micro-SD -карточек - всё, что нужно для уверенного старта в неизвестность (как обычно). Ах, да: при заказе можно выбрать, что тебе туда с завода засетапят: винды или бубунту. Я выбрал бубунту. Итого где-то 18 килорублей, не считая бенза для поездить.
МАТ.ЧАСТЬ
Подождав недельки полторы, я заполучил на почте заветный пакет. Внутри была скромная коробочка, которую "почта россии" даже не сломала. Коробочка сделана добротно, нашла своё применение как нычка под кофейные пакетики 3-в-1. А пока...
1. Анбоксинг. Пока что всё стильно, но скромно. В самый раз!
Девайс палёным пластиком не воняет, на ощупь норм.
На устройстве всего одна кнопка. Больше ему, в принципе, и не надо. Есть отверстия под вентиляцию. Но ожидать форсажных характеристик от этого гномика - не стоит.
3. В комплекте так же идёт удлинитель HDMI (пригодился), БП и паспорт качества на китайском. К счастью, язык системы они выставили по-дефолту английский.
Увы, клава и мышь блютусные не успели приехать в срок. И приехали несколько позже. Однако, мне не терпелось запустить дивайс.
4. Процесс пошёл!
Я уже опущу, что пришлось для железки прокидывать 220V - это очень просто, если вы заморочились задачкой такого уровня - 100% умеете электрику намутить. Да, ещё пришлось докупить eth-to-usb -адаптер, ибо вафля там плохо тянула, видео с такими раскладами фризится или лаг великоват. Да, кстати, там есть кулер! Я серьёзно! -в этом гноме есть маленький крутилятор и он тихонечно жужжит. Короче, потом я уехал в отпуск, потом болты и прочие метизы разных калибров... в общем, допилил я задачку только сейчас. А она оказалась занятной!
И, да, когда комплект клава+мышь приехал... они оказались такими шлаковыми... в общем, лучше б клаву с тачем от логитеха купил за 1,5к. Она хоть красивая...
ПОСТАНОВКА ЗАДАЧИ
Вкратце, что же надо было сделать: есть два стула видеорегистратора, оба умеют отдавать поток в rtsp. Нужно вывести камеры на экран. Есть Яндекс.Метрика, нужно вывести недельную статистику и хиты за месяц со счётчика на экран. И есть [экспериментально, ещё внедряю] гуглотабличка с объектами, на которых ведутся работы. Тоже, как вы понимаете - вывести на...
VENI, VIDI...
Собственно, для начала я решил забодать камеры. В качестве платформы размещения решил использовать гуглохром. Ибо в браузерах теперь можно многое. Но беда в том, что я не прогер. Я всего лишь любопытный и упёртый упоротый админ. Опять же, имело смысл пободаться. Узнал, что такое iframe. Прикольно. Запихнул самое простое: jpeg-поток (с автообновлялкой) от старой камеры, которую для теста поставил себе дома. Чтобы было веселее, да.
Но у меня rtsp. Его нужно неким образом в плеер пихнуть. Разбираться со стримером типа red5 или wowza мне не хотелось и времени не было. Да и не надо. Ага, вы мне ещё hls предложите... После двух неправильных вариантов с nginx и ffmpeg был найден простой и правильный варик на ffserver + ffmpeg. То есть, я сделал рестример. Анон, не делай так!
Вкратце о том, как это работает (и перейдём к конфигу):
Ниажидал, да? -нам ещё пека понадобится. Ну или виртуалка :))
Отвлекусь, чтобы обозначить парочку немаловажных моментов: у нас в конторе стоят регики RVi. У них есть нормальные DVR, где указываешь при записи ссылки на канал admin:password, а есть ненормальные, где логин:пароль (именно через двоеточие) нужно шифровать в base64. Я заманался догадываться, что это было. Но узнал и узрел. В мане - ни слова, предполагается, что админ дебил и будет использовать дефолтные admin:admin. Пздц... >_<
Я использовал дебиан на виртуалке. Самый сок для данной задачи. Естественно, без гуя. В общем, тебе понадобятся пакеты ffmpeg и lighttpd. Начнём с них. Как установить их в своём , ты, скорее всего, знаешь. Далее, лезем в /etc/ffserver.conf (засейвив старый и сделав пустой новый) и пишем там всякое:
# Порт, на котором будет работать ffserver Port 12345 # Адрес, на котором будет работать ffserver. # Если указать 0.0.0.0 то будут использованы все доступные адреса BindAddress 0.0.0.0 # Максимальное количество обслуживаемых соединений MaxHTTPConnections 2000 # Максимальное количество клиентов MaxClients 1000 # Максимальная используемая полоса (в килобитах) MaxBandwidth 1000 # Файл журнала. Формат подобен формату лога apache CustomLog /var/log/ffserver-access.log # Описываем источник
# Временный файл для хранения промежуточных данных File /tmp/webcam.ffm # Максимальный размер файла с промежуточными данными FileMaxSize 3M # Команда для запуска источника. # Адрес для отправки данных источником автоматически будет добавлен в конец этой строки Launch ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 # С каких адресов может обращаться источник ACL allow 127.0.0.1 ACL allow 192.168.xxx.1 255.255.255.0
# Описываем первый поток. Это будет поток в формате flv
# Источник потока Feed webcam.ffm # Используемый формат Format flv # Используемый кодек VideoCodec flv # Частота кадров VideoFrameRate 30 # Размер буфера VideoBufferSize 80000 # Битрейт VideoBitRate 200 # Минимальное и максимальное качество VideoQMin 1 VideoQMax 5 # Размер видео. Дожно совпадать с размером видео на источнике VideoSize 640x480 # Время ожидания перед началом отправки данных клиенту (в секундах) PreRoll 1 # Звук мы транслировать не будем NoAudio
# Второй поток. Это SWF-файл с FLV-потоком внутри # Всё остальное по аналогии
# При обращении к индексной страницы ffserver будем отображать текущий статус сервера
Format status
Камеры ты сюда напишешь свои, тут всё просто элементарнейше. Запускается вся эта балалайка командой ffserver -f /etc/ffserver.conf Лайф-хак: поскольку ффсервер - это не служба, его надо как-то держать запущенным и вообще запускать при старте тачки. Через rc.d он у меня "не взлетел". Где наша не пропадала? -написал в кронтаб 5-минутную пиналку. Сразу две задачи решаем: запуск через 5 минут после загрузки ОСи + поддержание работоспособным процесса, если тот вдруг соизволит уйти в отвал. Если проц запущен и работает - он просто продолжит работу дальше. Изи, ваще... Кстати, у ффсервера есть веб-мордочка:
5. Веб-морда ffserver`а. Служит для мониторинга и подключения к файлам-источникам.
Вы уже поняли, да, что теперь нужен плеер? -в качестве наиболее простого и понятного решения был выбран flv-mp3. Здесь можно собрать и скачать, а вот тут инструкция. Код плеера вставляется iframe`ом. Но об этом - чуточку ниже, у нас же ещё метрика!..
...BELLUM...
Нет! Нельзя просто взять и сделать кнопочку "сгенерировать код для вставки"! Нееет, яндекс - это же русская компания. Значит, его клиенты должны страдать. Ребят, серьёзно: вам нужен ещё и веб-сервер, который будет держать пыхоскрипты для работы с метрикой и отрисовки графиков. А ты-то думал, зачем же ставить лайти?!.
Сваяем первый пыхоскрипт, который показывает разную активность на сайте, вроде визитов, просмотров и посетителей. За неделю.
HTML; //endНу, вот ты сделал пыхоскрипты. Надеюсь, они у тебя работают. Шучу, не работают. Потому, что надо пыху поставить и cgi. Пыха сейчас 7я актуальна. Как пыху поставить в своём дистрибе ОС, думаю, вы знаете. Как проинициализировать модули, думаю, найдёте в гугле. И службу лайти перезапусти! Собственно, пихаете пыхоскрипты в веб-корень сервера /var/www/html и пытаетесь их запустить через http:///myscript.php, чтобы что-то отрисовалось. Ну, да, отрисовывает. Оси. А знаешь, почему? -потому, что ты тупо скопипастил код. А там есть важные пометочки. Вооот, балда, теперь давай ниже читай...
Для начала, вот раз и два маны по метрике. Официальные. Там много всякого говна, из него нужно знать только как создать токен и вообще зарегать своё приложение, а так же - как токен активировать вручную. При регистрации важна одна деталь: Callback URL. Это адрес пыхоскрипта вида http:///myscript.php. Просто заполни это поле сразу, чтобы потом волов не сношать. Если вы прошли кружок ада с регистрацией, добро пожаловать в активацию. Для этого понадобится ID, который выдали при регистрации (это циферки). Его надо подпихнуть вот в сюда:
и зайти туда браузером. Да, кстати, при реганье надо было ввести колбэк-юэрэл. Ты же сделал это, да? ;) В результате, яндекс в ответке выдаст токен (он для каждого пыхоскрипта должен быть свой) и вообще, наконец-то, покажет наполненный смыслом болью и тленом низкой посещаемости график. Да-да-да, если у тебя, как у меня, два графика и разные скрипты под них - будь добр, регни два приложения. А ниже я расскажу, где токены нужны. Шучу, не ниже они нужны. А выше, смотри кодЪ.
И, да, имейте в виду, яндекс - это русская компания и не все её решения можно объяснить логически. У токенов есть expiration time. То есть, они протухают. ... Зочем? -во славу Сотоны, конечно! :D
6. Кумамон одобряэ!
...VICI!
А теперь вкусняшки! Лезем в онлайн-редактор, ибо поставить notepad++ тебе западло и ваяем с мгновенной отрисовкой результата желаемое. Я код покажу для скриншота, который ниже. Но, как уже понятно, это будет не конец...
Всё это надо сохранить в хтмл-страницу и её сунуть в корень сайта.
Как видишь, ничего сложного. Почти. А знаешь, почему? -потому, что в офф.мане гугла не написано, что параметр chrome=false задается через &, а widget=false& становится фолсом именно так и как в мане не работает. Почему? -да шут их знает!.. Да, совсем забыл, мы ж гуглотабличку вставили. И ячейки замерджили вертикально. Если ты ещё не понял, тут таблица зафигачена, как структурообразующая основа. Вооот!..
7. Ура!
Но на скриншоте ты только что упустил одну очень важную деталь. Где интерфейс? -подсказываю хак: гугл надо запускать в режиме инкогнито и киоска
Зачем: чтобы не сохранялись данные сеанса и можно было скриптом грузить при запуске оболочки. Вот, кстати, об оболочке! Чтобы не сношаться с консолью, пытаясь прописать что-то в автозагрузку, вызови это:
# sudo gnome-session-properties &
Там можно спокойно присать команду запуска гугла. А ещё нужно поставить плагин, который будет автообновлять страничку, скажем. каждые 5 минут, во избежание фризов видео. Искать в расширениях по слову autorefresh. Чтобы корректно её настроить, запусти google-chrome --inkognito http://192.168.xxx.xxx/твоя_страничка.html и сетапь плагин. Так же, не обойди вниманием и надоедающее сообщение про связку ключей. Открывай консоль, вводи seahorse, далее действуй по мануалу.
Что называется, "я кончил и закурил" (с). Как тут не вспомнить "Арию Пимена" из "Бориса Годунова" (который опера), где он изрекает "Окончен труд, завещанный от Бога...". Так что, дорогой читатель, специально для тебя я мало того, что написал ман, я ещё и ссылочек собрал. Так что, тебе не придётся тратить человеко-часы, чтобы повторить всё это. Гордись, что либо подписан на меня, либо умеешь искать инфу яндексом/гуглом.
P.S.: не шикуйте с кэшем видосов, виртуалка может и повеситься. И гипервизор повесить. Если платформа слабая. Да, это всё - велосипед на костылях. Но работает же!