Перейти к содержимому

EIT Stream

EIT Stream — это инструмент для преобразования файлов XMLTV в поток MPEG-TS с таблицами информации о событиях (EIT) для вещательных сетей, таких как DVB, ATSC, ISDB.

Просто скачайте один исполняемый файл и установите права на выполнение:

Окно терминала
curl -Lo /usr/bin/eit-stream http://cesbo.com/and/eit-stream
chmod +x /usr/bin/eit-stream

Создайте файл конфигурации /etc/eit-stream.conf с помощью любого текстового редактора. Пример:

xmltv = /opt/xmltv.xml
output = udp://lo@239.0.0.1:1234
onid = 8000
codepage = 5
eit-days = 1
eit-rate = 1500
[tdt-tot]
country = EST
offset = +120
# Первый мультиплекс
[multiplex]
tsid = 1
[multiplex/service]
pnr = 101
xmltv-id = discovery
[multiplex/service]
pnr = 102
xmltv-id = history
# Второй мультиплекс
[multiplex]
tsid = 2
xmltv = /opt/xmltv-2.xml
[multiplex/service]
pnr = 201
xmltv-id = euronews

Строки, начинающиеся с символа #, являются комментариями и игнорируются.

  • xmltv — путь к локальному файлу xmltv или http/https ссылка на xmltv или gzip xmltv файл. Этот параметр может быть переопределён в [multiplex] или в [multiplex/service]
  • output — целевой UDP-адрес
  • onid — идентификатор исходной сети
  • codepage — кодировка. Этот параметр может быть переопределён в [multiplex] или в [multiplex/service]
  • eit-days — количество дней в epg. По умолчанию 3
  • eit-rate — битрейт в кбит/с. По умолчанию 15 кбит/с на каждый сервис

Доступны следующие кодировки для текстового кодирования:

  • 0 — По умолчанию. Латиница (ISO 6937)
  • 1 — Западноевропейская (ISO 8859-1)
  • 2 — Центральноевропейская (ISO 8859-2)
  • 3 — Южноевропейская (ISO 8859-3)
  • 4 — Североевропейская (ISO 8859-4)
  • 5 — Кириллица (ISO 8859-5)
  • 6 — Арабская (ISO 8859-6)
  • 7 — Греческая (ISO 8859-7)
  • 8 — Иврит (ISO 8859-8)
  • 9 — Турецкая (ISO 8859-9)
  • 10 — Нордическая (ISO 8859-10)
  • 11 — Тайская (ISO 8859-11)
  • 13 — Балтийская (ISO 8859-13)
  • 14 — Кельтская (ISO 8859-14)
  • 15 — Западноевропейская (ISO 8859-15)
  • 21 — UTF-8

Секция [tdt-tot]:

  • country — код страны в формате ISO 3166-1 alpha-3
  • offset — смещённое время в минутах относительно GMT. Например, +120 — это GMT+2, а -300 — это GMT-5

Секция [multiplex]

  • tsid — идентификатор транспортного потока мультиплекса
  • name — необязательное поле для описания мультиплекса

Секция [multiplex/service]

  • pnr — номер канала/pnr
  • xmltv-id — идентификатор канала в xmltv
  • parental-rating — возрастное ограничение. Значение задаётся парами: страна и возраст. Например: parental-rating = EST 16 USA 14. Код страны в формате ISO 3166-1 alpha-3 (3 буквы). Возраст от 4 до 18 (включительно), 0 — без ограничений.

С помощью Astra вы можете добавить UDP-поток с EIT в MPTS. В настройках MPTS добавьте вход и укажите UDP-адрес, например, в приведённой выше конфигурации адрес — udp://lo@239.0.0.1:1234. В дополнительных настройках MPTS включите опцию “Pass EIT”. Используйте опцию no_eit на других входах, чтобы отключить EIT с других входов.

Зарегистрируйте сервис в systemd, чтобы запускать его в фоновом режиме и автоматически при старте системы. Создайте файл /etc/systemd/system/eit-stream.service:

[Unit]
Description=eit-stream service
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/eit-stream /etc/eit-stream.conf
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

Следующие команды можно использовать для управления сервисом:

  • запустить сервис: systemctl start eit-stream
  • остановить сервис: systemctl stop eit-stream
  • включить автозапуск: systemctl enable eit-stream
  • отключить автозапуск: systemctl disable eit-stream

Чтобы перезапускать сервис один раз за ночь, добавьте следующую строку в /etc/crontab:

0 2 * * * root systemctl restart eit-stream

XMLTV — это формат на основе XML для описания информации о телепрограммах. Он предоставляет механизм для хранения информации о каналах, расписания программ и связанной с ними метаданных.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv generator-info-name="Some tv generator">
<channel id="1">
<display-name lang="en">Channel 1</display-name>
<icon src="http://site.domain/1.png"/>
</channel>
<channel id="2">
<display-name lang="en">Channel 2</display-name>
<icon src="http://site.domain/2.png"/>
</channel>
<programme start="20180920140000 +0300" stop="20180920141500 +0300" channel="1">
<title lang="en">Program title 1</title>
<desc lang="en">Program description 1</title>
<date>Program release date 1</date>
<category lang="en">Category 1</category>
<category lang="en">Category 2</category>
</programme>
<programme start="20180920150000 +0300" stop="20180920141600 +0300" channel="1">
<title lang="en">Program title 2</title>
<desc lang="en">Program description 2</title>
<date>Program release date 2</date>
<category lang="en">Category 1</category>
</programme>
<programme start="20180920143000 +0300" stop="20180920141500 +0300" channel="2">
<title lang="en">Program title 3</title>
<desc lang="en">Program description 3</title>
<date>Program release date 3</date>
<category lang="en">Category 1</category>
<category lang="en"> Category 2</category>
</programme>
</tv>