назад к заметкам

Создание EPG для DVB-C на сервисе DVB.BY в три шага!
В то время, когда крупные и не очень компании пытаются "впарить" за бешеные деньги кабельщикам различного рода услуги по электронному телегиду (EPG) - сервис DVB.BY предоставляет такой инструмент бесплатно. А учитывая, что здесь же находится одна из крупнейших баз данных по программе передач - использование сервиса является "манной небесной".
Итак, пользование разделом Мои EPG предоставляется всем зарегистрированным пользователям без исключения! Регистрация, собственно, тоже бесплатная и ни к чему не обязывающая (хоть тут повезло)! Были реализованы интересные фишки в EPG, например ЖАНРЫ и ВОЗРАСТНОЕ ОГРАНИЧЕНИЕ - в популярном бесплатном cherryepg Вы такого не найдёте!



Если о сервисе в двух словах, то сервер DVB.BY генерирует для вашей сети файл EIT.TS, который вы скачиваете и транслируете в мультиплексор, например в Luminato, либо в MPTS Astra когда в качестве модулятора RESI FSM.

1. Создание файла на сайте DVB.BY

Заходим в Инструменты -> EPG, жмём кнопку "Мои EPG" и нажимаем "Создать файл".



После того, как мы корректно создали новый файл, его мы сможем увидеть в перечне с соответствующим набором опций. Здесь стоит отметить, что если новые идентификаторы для всех файлов не подходили под формат ONID:TSID:PNR, то опция "скачать eit.ts" будет недоступна, т.к. понятое дело, генерить нЕчего, ибо иденты для канала отсутствуют.



2. Установка плеера у себя на сервере.
Мне известно как минимум с десяток способов как раскрутить файлы со служебной информацией EIT. Надеюсь и Вам тоже))) Любой более-менее толковый язык программирования даёт возможность по работе с сокетами. Однако, рекомендовать стану только лучшее. Perl подходит для этой задачи очень даже хорошо. Посмотрите на код ниже, что может быть проще.. К тому же интерпретатор языка устанавливается в 99% случаев на сервера Linux.
#!/usr/bin/perl

use Socket;
use Time::HiRes qw(usleep);
use POSIX qw(ceil);

my $hash = "CHANGE_HASH_IN_PLAYER"; # hash 351e6cd5fcb04e42eeb2da944f714820 in the dvb.by
my $host = "127.0.0.1"; # route add -host 239.1.1.50 gw 192.168.1.20
my $port = 10001; #multicast port

socket( my $target, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die( "Error opening udp socket: $!");
my $ipaddr = inet_aton( $host);
my $portaddr = sockaddr_in( $port, $ipaddr);
my $filename = "$hash.ts";
system( "rm ./$filename");
system( "wget https://dvb.by/ru/epg/my/$hash.ts -O $hash.ts.gz");
system( "gunzip ./$hash.ts.gz");
my $size = -s "$filename";
my $mtsCount = $size / 188;
my $gap = ceil( 4170 / $mtsCount * 7 * 1000);  # 7 пакетов в 1 мкс

while( 1){
    my $buffer;
    open my $file, '<', $filename or die "Cannot open file $!\n";
    while(read $file, $buffer, 188) {
        send( $target, $buffer, 0, $portaddr);
        usleep( $gap);
    }
    close $file;
}
Если вы совсем не сильны в Perl-е - это не проблема. Обратите внимание на выделенные строки, значения в которых необходимо поменять на свои.

Возможно, на данном этапе у Вас появится вопрос. Где взять этот $hash? Ответ: из линка, созданного выше файла на DVB.BY.



Плеер работает в фоновом режиме в screen-е (apt-get install screen). Конечно, можно запустить его и через systemd или monit - это уже кому как больше нравится. Важным условием является его перезапуск каждые 5 минут, т.к. на некоторых телевизорах (в частности Samsung) может не отображаться текущая передача (команду перезапуска добавляем в cron). Да и к тому же, бывает так, что программа меняется среди недели и регулярное обновление с dvb.by будет способствовать повышению её точности. Ниже копипаст для быстрой установки...

cd /usr/src
wget https://dvb.by/download/files/epgplayer.tar.gz
tar xvzf ./epgplayer.tar.gz

mcedit ./epgplayer/player.pl # не забываем вписать свой HASH потока 

sed -i '/^.*run.sh/d' /etc/crontab
echo "*/5 * * * * root /usr/src/epgplayer/run.sh" >> /etc/crontab  # и записываем в /etc/crontab


3. Добавляем поток в мультиплексор
Одной из базовых функций мультиплексора, является пропуск пидов через mpts. В нашем случае, pid 18. На рисунке ниже показано, как добавить созданное EPG в Астре (cesbo). По работе с другими модуляторами обращайтесь к их мануалам.



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

   P.S. Мне пришло сообщение, почему я не рассказал о кастомной генерации XMLTV ? Извиняюсь, что сей функционал проигнорил и, честно сказать, подумав, даже не знаю что о нём писать. Да, в разделе МОИ EPG можно генерировать XMLTV. Да, можно менять названия каналов и идентификаторы на свои. Вроде всё на этом)))