Внедрение программы передач (EPG) в DVB-C

Давненько не писал в блог. Разработок за последние месяцы было достаточно много и описывать каждую, — значит не оставить свободного времени вообще) Недавно успешно внедрил систему для создания и воспроизведения DVB-таблиц (EIT) на базе тулза CherryEPG. Концепция следующая: есть база данных с программой передач на текущую неделю для интересуемых каналов; кормлю её в CherryEPG, затем с её же помощью вещаю сформированный транспортный поток на цифровую станцию Teleste Luminato; в последней подмешиваю этот поток для каждого QAM-а, в котором заблаговременно настроен пропуск PID 18.

Установка CherryEPG на сервер Debian

cpan DVB::Epg DVB::Carousel
cpan DBI DBD::SQLite Digest::CRC
cd /usr/src
wget http://conture.by/cherryepg/cherryepg.tar.gz
tar xvzf cherryepg.tar.gz

cd cherryepg/packages/Digest-CRC-0.18
perl Makefile.PL
make; make test; make install

cd cherryepg/packages/DVB-Carousel-0.22
perl Makefile.PL; make; make test; make install

cd cherryepg/packages/DVB-Epg-0.50
perl Makefile.PL; make; make test; make install

Установка закончена, при желании папку packages можно удалить — нужды в ней больше нет.

Формирование файла .CSV с программой передач
Скрипт cherryEPG.pl принимает файл с программой передач в формате CSV, имеющий следующую структуру:

"метка_канала","дата_время",продолжительность_сек,"название_передачи","описание_передачи_если_есть"

Каждая запись должна быть в конце дополнена символом перевода строки «\n». Кодировка файла — ISO 8859-5 — для корректного отображения кириллических символов на телевизоре(приставке) абонента. Посмотреть непосредственно сам файл для 20-ти каналов можно по этой ссылке. Данный файл был сформирован на базе информации полученной с сайта programma[dot]tv. Её использование в коммерческих целях как-бы запрещено, поэтому мы будем рассматривать её в ознакомительных целях. С другой стороны, программа этого сайта лишена описания большинства программ, что, согласитесь, не есть гуд. Более того, нельзя быть застрахованным от того, что синтаксис ответов от этого сервиса всегда будет стабильным и корректным. Если вы заинтересованы в коммерческом использовании, — обращайтесь и получите полную версию скрипта.

UPDATE(24/11/2014). PROGRAMMA(dot)TV потеряла свою актуальность ввиду отсутствия программы на многих телеканалах. Гораздо удобнее стало использовать готовый файл CSV с сайта EPG.BY, или брать xmltv формирующийся со спутника на https://dvb.by/epg. Более того, сайт DVB.BY умеет самостоятельно генерировать кастомные xmltv и поток для EPG.

Но всё-же… Для примера рассмотрим скрипт для парсинга programma[dot]tv. Этот архив необходимо поместить в любую директорию веб-сервера. К примеру, у меня это /var/www/epg. В архиве два файла:

1. reload.php — выполняет три задачи: парсит программу для нужных каналов, формирует вывод в формате CSV, а также перезаписывает файл /usr/src/cherryEPG.pl
2. cherryEPG.tmp — шаблон файла cherryEPG.pl, в котором выражения <includeEITreq> и <includeIFreq> будут заменены на строки, сгенерированые в соответствии с параметрами вашей сети.

Автозапуск cherryEPG
В папке с cherryepg есть два шеллника:
parseepg.sh — запускаем каждый день, например ночью (в случае использования приобретённой у меня программы — раз в неделю — в воскресенье около 22-00)
playepg.sh — запускаем каждые 5 минут для обновления таблиц. Если не обновлять, программа всё-равно будет транслироваться, но некоторые телевизоры при нажатии на кнопку INFO будут показывать, что в настоящий момент идёт программа, шедшая в момент запуска вами скрипта playepg.sh.

Автозапуск назначаем с помощью крона. Для этого в файле /etc/crontab дописываем такие строки:

*/5 * * * * root /usr/src/cherryepg/playepg.sh # каждые 5 минут
15 4 * * * root /usr/src/cherryepg/parseepg.sh # каждый день в 04:15:00
05 22 * * 7 root /usr/src/cherryepg/parseepg.sh # каждое воскресенье в 22:05:00

Рестартуем крон:

service cron restart

Если всё сделано правильно, то в скрине должен будет висеть процесс EPG как на рисунке ниже

 

Ловим ts-поток в люминате

Кое-что напоследок… В соответствии со спецификацией EIT передаваемая информация не может быть более 255 (0xFF) символов. Эта информация состоит из «название_программы» + «описание_программы». Более того, из них 6+3+3=12 байт зарезервировано под спец символы определения кодировки. Поэтому не удивляйтесь, если увидите такое:

 

Запись опубликована в рубрике Linux, PHP, Базы данных, Программирование, Телевидение с метками , , , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий