uscr 10.03.2013 19:28
Скрипты — Разворачиваем Midleware Stalker для приставок infomir MAG245. Или: пара скриптов, которые повышают моё ЧСВ.
Введение
В котором становится понятно, что я продался и задёшево пиарю IPTV приставки.
Здравствуйте! Понадобилось мне тут организовать портал для приставок MAG245 (не реклама, просто они и правда клёвые). Процесс внедрения не отнял у меня много времени, но захотелось поделиться опытом или дать подсказку тем, кто планирует внедрять STB, но не может определиться с моделью. Суть в том, что приставка сама по себе ничего не умеет. Её можно научить показывать IPTV, работать со всякими ютубами, но это скучно и долго. А выдавать приставки абонентам предполагается в ощутимых масштабах. Тут нам на помощь приходит производитель, который предоставляет свободное ПО под названием middleware stalker. По сути - это набор html, js и php файлов, которые приставка забирает с веб-сервера и получает список каналов, телепрограмму и вообще, формирует интерфейс, который отображает пользователю. То есть правкой конфига портала мы можем повлиять сразу на все пользовательские приставки - можем убрать пункт меню с запуском приложения для просмотра ютуба или запретить работать с флешками. Процесс разворачивания самого портала описан у производителя, да и сложного там ничего нет.
Хотя документация у них в жутком состоянии - всё разрозненно, что-то на вики, что-то на основном сайте... Если кто ткнёт в нормальную, приятную во всех отношениях документацию - буду рад.
Есть только вот одна проблема: базовый функционал - создание списка каналов, реализован...никак. Каналы предполагается добавлять руками. Я быстренько прикинул перспективу добавления 104 каналов руками и приуныл. Поборов уныние, я полез в БД. И нашёл там табличку itv, которая и хранит в себе список каналов. Запихнул туда тестовую строку и обломался - в админке канал виден, на приставке его нет. Почитал форум и обнаружил информацию о том, что наряду с itv необходимо помещать список каналов так же и в табличку ch_links. Проблема в том, что в ch_links описание канала привязано к ID в itv. Так родился не очень приятный, но рабочий алгоритм - проливаем каналы в itv, затем дропаем все записи из ch_links, делаем выборку из itv и инсертим всё, что нужно в ch_links. Плейлист обновляется не часто, так что дропать всю табличку при малейшем изменении плейлиста - не очень страшно (но очень не красиво, да).
Чуть ближе к сути
Тут внимательный читатель понимает, что ничего я не рекламирую, а просто заскучал и решил написать целый пост о двух простеньких скриптах.
Сам плейлист хранится в формате m3u, что вполне ожидаемо, так что нужно было придумать, как сделать его БАШчитаемым. Кроме того, необходимо сразу писать в базу ID канала в XMLке, которая содержит в себе программу передач (описание формата: http://vefire.ru/help/xmltv-tutorial). Так алгоритм принял окончательный вид: расковырять программу передач и плей-лист -> получить на выходе файлик в котором в одной строке будут содержаться необходимые сведения -> надругаться над базой. Всё это вылилось в два скрипта: playlist_cutter.sh и playlist_update.sh.
playlist_cutter
Для начала, дикая строка пропускает через себя XML и выдаёт в отдельный файл список вида: ID CHANNEL_NAME. Примерно так:
1 |
1 Первый канал
|
Затем, начинается "парсинг" m3u.
Плейлист выглядит примерно так:
Решено было идти по простейшему пути: файл читается построчно, скрипт прогоняет строку через фильтры. Если фильтр находит особую строку (имя канала, или адрес потока), то "поднимает флаг". То есть, если пришла строка с именем канала, то теперь уже последующие строки не будут обрабатываться фильтром имени канала, а сразу будут парсится на предмет адреса потока и так до тех пор, пока не будет обнаружена вся необходимая информация. На интерпрайз не тянет, но формат списка не меняется (потому что плейлист составляю лично я руками), так что всё работает гладко и чётко. После выуживания всех нужных сведений, имя канала ищется в списке, полученном после парсинга телепрограммы. Причём ишется как имя канала, так и имя канала, с удалёнными буквами "r" - есть у той иксемельки, что я использую такой вот косячёк. Итак, сам скрипт:
Для того, что бы упростить последующий разбор результата, в имени канала пробелы заменяются на символ "_".
Итак, получился такой вот файл:
Порядковый номер, Название, адрес потока, HD или нет (не знаю зачем, но в БД есть такой столбец), ID в xml с телепрограммой.
Теперь в дело вступает скрипт playlist_update.sh.
playlist_update
Скрипт осуществляет несложный разбор строки из файлика, полученного на предыдущем этапе и принимает решение о том, что делать с записью в базе. Для этого делается выборка записи, которая имеет тот же порядковый номер, что и обрабатываемый в настощий момент канал. Если такого номера в БД нет - инсеритм. Если есть, но адрес потока не совпадает - апдейтим запись, если номер и адрес совпадает - на всякий случай апдейтим имя канала (ну очепятку исправили в плей-листе, например). При этом проверяем, если в базе у канала нет ИД телепрограммы, то дописываем и этот ИД. Затем, как я и говорил, дропается содержимое ch_links и проливается заново. Заодно, удаляется информация о программе передач из таблички epg потому, что там привязка опять таки к ИП канала. И если мы изменим ИД канала, то программа передач на приставке будет отображаться неверно. После всего этого дёргаем php скрипт, который заполняет табличку с программами передач ("принудительное обновление epg" в админке). Данные для работы с БД берутся из конфига портала (типа фича).
Встречайте! Непревзойдённый playlist_update.sh:
Итак, последовательным запуском playlist_cutter.sh и playlist_update.sh мы получаем обновлённый плейлист, который затем подхватят приставки.
Собственно, приставки
Итак, плейлист мы обновлять научились, теперь можно выдавать тонны приставок абонентам. Перед выдачей нужно, всё таки, произвести первоначальную настройку: установить логотип компании там, где нужно, "натравить" её на адрес портала, установить режим видеовыхода. Приставки содержат в себе урезанный линукс, так что всё это можно сделать по SSH. Алгоритм такой: цепляем приставу к деплой-серверу, она получает айпишник, мы коннектимся к ней по SSH из скрипта, закручиваем нужные гаечки ( с помощью приставкоспецифичной утилиты fw_setenv), подменяем конфиг SSH и заливаем authorized_keys, ребутаемся. Теперь приставка настроена, а ssh вход по паролю запрещён, войти можно только по ключам, прописанным в authorized_keys. Так же скрипт пишет примитивные логи, что бы затем можно было найти концы, если что.
deploy
Такие дела. Как всегда, жду конструктивной критики по скриптам.
В простых случаях, если XML-ка достаточно стандартного вида, я ещё часто конечный автомат на awk использую, чтобы с XSLT не заморачиваться.
Ничо не понятно, но зато очень интересно вдруг узнать, чем люди на работе занимаются. :)
а насколько сложно пользователю подсунуть на приставку свой ключик?
Или: пара говноскриптов, которые повышают моё ЧСВ.
это такая ложная скромность? мне вот было интересно почитать. присоединяюсь к mealsforall, только "говно" уберите с главной :D
это такая ложная скромность
Разумеется. Внутри меня сидит пятнадцатилетняя девочка, которую никто не любит.
Хоть и не реклама, но спасибо за наводку на приставку :) давно присматриваю себе что-нибудь в качестве интернет-медиацентра, но всё какая-то хрень урезанная или дорогущая попадалась. А это - вроде то, что доктор прописал! Благодарю :)
Только купить её физлицу не просто, насколько я понимаю. А так - да. Мы ставили абонентам дорогущие и тупые приставки от Amino и сначала не верили, что эта приставка за такую цену покажет себя гораздо лучше.
А мне вот интересно, почему физлицу так сложно будет купить такую железяку? В чём проблема?
А где? Она позиционируется как операторская железка, у неё даже инструкция начинается со слов "ваш провайдер уже настроил доступ к порталу". Где она продаётся за наличные простым смертным - нагуглить не удалось.
Ну я бы начал с отдела продаж того же Инфомира (их мыло в подвале их же сайта есть). Представился бы разоботчиком, который желает получить образец для тестов и разроботки.
Образцы для тестов они не дают даже за деньги, на предмет покупки дали мыло человека, который продал одну приставку по безналу и пропал :)
Собственно, чёто я туплю. По безналу никто не мешает физлицу купить. Оплатить счёт в банке, да и всё. Могу поделиться контактами.
Собственно, чёто я туплю. По безналу никто не мешает физлицу купить. Оплатить счёт в банке, да и всё. Могу поделиться контактами.
Вот здесь есть - MAG 240 или MAG 250. Действительно, ничем, кроме номера на крышке ничем не отличаются ни по железу, ни по софту. Для частных лиц производителем выпускается Aura HD. Это та же самая MAG 250/245, только с предпрописанными ссылками на провайдеров TV OTT и онлайн-кинотеатры. Можно взять в версии light - Aura HD k8 или k10 c допами в виде обучаемого пульта (одновременное управление телевизором и приставкой) и кабелем HDMI. Извините за рекламу.
(из личного опыта)
Отличаются функцией перепрог. пульта (lirc) в удобном "user friendly interface".
Отличаются функцией перепрог. пульта (lirc) в удобном "user friendly interface".
Это она кстати. 250 ничем не отличается по железу от 245. И прошивки там идентичные.
Железо "изнутри", касаемо CPU,RAM все ок. А вот обвязка минимальная, гальваническая развязка, зашита(скромная , только HDI), моё личное мнение сделано с удовлетворением минимума.
И сам лично сдампил адреса каналов, через telnet|tcpdup, и юзаю HTPC через более привычный progdvб с заменой mac.
И сам лично сдампил адреса каналов, через telnet|tcpdup, и юзаю HTPC через более привычный progdvб с заменой mac.
Вечером ещё посмотрю подробнее.
P.S. В тегах запятые забыл.