Iptv

Модуль Iptv предназначен для организации платных телевизионных трансляций в режиме групповых рассылок Multicast.

Модуль Iptv обеспечивает автоматическую блокировку/разблокировку доступа клиентов к платным телевизионным трансляциям. С этой целью на сетевых коммутаторах, к которым непосредственно подключены клиенты, устанавливаются фильтры IGMP-сообщений.

Возможности

  • Доступ клиентов только к подписанным каналам средством фильтрации IGMP на управляемых коммутаторах
  • Ведение абонентских счетов
  • Установка количества каналов на определённую тарифную модель
  • Выбор Тарифных моделей абонентом.
  • Включение дополнительных каналов из пользовательского интерфейса
  • Возможность установки цены на каждый отдельный канал

Как работает

Установка

Заведение таблиц

# mysql -D abills < abills/db/Iptv.sql

подключение модуля
abills/libexec/config.pl

@MODULES = (
            'Iptv'
            );

Настройка

abills/libexec/config.pl

$conf{IPTV_ALLOW_GIDS}='1,23,56'; Разрешить использование сервиса только определённым группам пользователей.
$conf{IPTV_CLOSE_PERIOD}=1; Снимать месячную абон. плату только после установки флага период закрыт.
Флаг устанавливается в меню / System configuration/ Television/ Closed Period/
$conf{IPTV_USER_CHG_TP}=1; Изминение тарифного плана на следующий учётный период
$conf{IPTV_USER_CHG_CHANNELS}=1; Выбор каналов из интерфейса пользователя. Администратор может назначать дневную и месячную цену за просмотр каналов.
$conf{IPTV_USER_EXT_CMD}='iptv_access_ctl.pl %LOGIN%'; Внешняя программа которая выполняется при добавлении и изменении данных по сервису для пользователя
Программе передаются следующие данные:
%LOGIN%
%TP_ID%
%CID%
%STATUS%

Работа с системой

Каналы

(/ System configuration/ IPTV/ Channels/)
Заведение каналов

Number: Номер канала
Name: Название канала
Port: Порт трансляции потока
Disable: Отключить
Describe: Описание канала

Тарифные планы

(/ System configuration/ IPTV/ Tarif plans/)
заведение тарифных планов

# Ид тарифного плана
Name: Название тарифного плана
Alert: Предупреждение об исчерпании баланса
Day fee: Дневная абон. плата
Month fee: Месячная абон. плата
Activation: Сумма активизации ТП
Change: Сумма изменения ТП
Age (Days): Время существования сервиса
Payment type: Тип оплаты

(/ System configuration/ Television/ Tarif plans/ Intervals/)
Заведение временных интервалов использования сервиса и каналов предоставляемых пользователям.
Также указывается месячная и дневная плата за предоставление каналов.

Флаг закрытия периода

При использовании данной функции абон. плата снимается с аккаунтов только после его установки. (Данный флаг можно использовать только при включении опции $conf{IPTV_CLOSE_PERIOD}=1;) При установке влага система оповещает что следующее действие будет снятие абон. платы, а после снятия в поле статус заноситься дата снятия абон. платы.

Пользователи

( / Customers/ Logins/ Information/ Services/ Television/ ) Активизация пользовательских сервисов

Tarif plan: Тарифный план
Filter-ID: ИД фильтра
Disable: Отключить

Каналы - Выбор каналов абонента. администратор может назначить каналы немедленно или включить в расписание измнение каналов на следующий учётный период. Для модуля Iptv учётный период, кроме периода 1 день, всегда считается с начало до конца месяца и не учитывается дата активизации.

# Статус канала. Текущий и если стоит расписание то тот что после применения расписания.
Number Номер канала
Name Название канала
Description Описание канала
Month Price Месячная абон. плата
Day Price Дневная абон. плата
Port Порт, если используется Iptv.

VLC

Установка VLC 1.0.5

cd /usr/ports/multimedia/vlc

make WITH_DEBUG=yes WITHOUT_QT4=--disable-qt4 DEBUG=--enable-debug DEBUG=--enable-release WITH_AALIB=--enable-aa WITH_FAAC=--with-ffmpeg-faac WITHOUT_DBUS=--disable-dbus WITHOUT_NLS=--disable-nls WITHOUT_GNOMEVFS=--disable-gnomevfs WITHOUT_SKINS=--disable-skins2 WITH_WIN32_CODECS=--enable-loader WITH_REMOTE_OSD=--disable-remoteosd WITHOUT_PULSEAUDIO=--disable-pulse WITHOUT_HAL=--disable-hal WITHOUT_AVAHI=--disable-bonjour WITHOUT_CDPARANOIA=--disable-cdda WITHOUT_CDPARANOIA=--disable-cddax WITHOUT_DVBPSI=--disable-dvbpsi WITHOUT_DVDNAV=--disable-dvdnav WITHOUT_FLAC=--disable-flac WITH_FRIBIDI=--enable-fribidi WITHOUT_DIRAC=--disable-dirac WITHOUT_SCHROEDINGER=--disable-schroedinger WITH_LUA=--enable-lua WITHOUT_CACA=--disable-caca WITHOUT_DTS=--disable-dca WITHOUT_VLC_MOZILLA_PLUGIN=yes WITH_SHOUT=--enable-shout WITHOUT_TAGLIB=--disable-taglib  WITHOUT_MODDEMUX=--enable-mod WITHOUT_MPCDEMUX=--enable-mpc WITHOUT_SAMBA=--disable-smb WITHOUT_XOSD=--disable-xosd WITHOUT_V4L=--disable-v4l WITHOUT_V4L=--disable-dvb WITHOUT_X11=--disable-x11 && make install

UDP-unicast

На сервере
$ cvlc -vvv /usr/home/test/Amon_Amarth.avi --sout '#std{access=udp,mux=ts,dst=192.168.0.1:1234}'

или *.avi

$ cvlc -vvv /usr/home/test/Amon_Amarth.avi --sout   '#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128
,channels=2,samplerate=44100}:std{access=udp,mux=ts,dst=192.168.0.1:1234}
На клиенте

Открываем Медиа/открыть URL/ Выбираем Протокол UDP, вводим наш IP адрес, Порт 1234

Пример 192.168.0.1:1234

NVOD

На сервере

1. С управлением и выбором файлов через веб интерфейс

$ cvlc -vvv --extraintf http --http-host 192.168.0.1:8080

Войдя в веб интерфейс выбираем VLM interface > broadcast Name имя Enable Loop Input: избираем файл Output: UDP адрес из которого будем пересматривать, порт не задаем НАЖИМАЕМ PLAY

*.mp4

#transcode{vcodec=mp2v,vb=128,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234}
#transcode{vcodec=mp4v,vb=256,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234}  очень плохо
#transcode{vcodec=DIV2,vb=256,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234} очень плохо
#transcode{vcodec=DIV3,vb=256,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234} очень плохо
#transcode{vcodec=WMV1,vb=256,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234} плохо
#transcode{vcodec=WMV2,vb=256,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234} очень плохо
#transcode{vcodec=MJPG,vb=256,scale=1}:std{access=udp,mux=ts,dst=192.168.0.1:1234} квадратики

2. Из конфигурационного файла

$ cvlc -vvv -I telnet --telnet-password "12345" --vlm-conf=/usr/home/test/vlc.streaming2.conf
$ vim /home/vlc/vlc.streaming2.conf
new Amon broadcast enabled 
  setup Amon input file:////usr/home/test/Amon_Amarth.avi loop
  setup Amon output #rtp{access=udp,mux=ts,dst=192.168.0.1,port=1234}
new channel2 broadcast enabled 
  setup channel2 input file:////usr/home/test/Six_Feet_Under-Deathklaat.m2v loop
  setup channel2 output #rtp{access=udp,mux=ts,dst=192.168.0.1,port=1234}
control Amon play
control channel2 play

Также для есть возможность задавать график Для этого заходим в schedule

На клиенте

Открываем Медиа/открыть URL/ Выбираем Протокол UDP, вводим IP адрес из которого будет прием : порт тот что на сервере избрали или 1234/ имя файла

Пример 192.168.0.1:1234/Amon

VOD

На сервере

1. Из конфигурационного файла

$ cvlc -vvv --vlm-conf=конфигурационный файл --rtsp-host ИР сервера:порт

пример

$ cvlc -vvv --vlm-conf=/usr/home/test/VOD.conf --rtsp-host 192.168.0.2:5554 --rtsp-caching=3000

2. Из веб интерфейса Убедимся что наша внешняя ИР есть в /usr/local/share/vlc/http/.hosts

$ cvlc -vvv --extraintf http --http-host 10.0.0.1:8080 --rtsp-host 10.0.0.1:5554 --rtsp-caching=3000

3. Из конфигурационного файла + добавление вручную через telnet

$  cvlc -vvv --color -I telnet --telnet-password "12345" --vlm-conf=/usr/home/test/vlcVOD.conf --rtsp-host 192.168.0.3:5554 --rtsp-caching=3000

Конфигурационный файл

vim /usr/home/test/vlcVOD.conf
new Amon_Amarth vod enabled
   setup Amon_Amarth input Amon_Amarth.avi
   setup Amon_Amarth
new Moonspell vod enabled
   setup Moonspell input Moonspell.mpg
   setup Moonspell
new Six_Feet_Under-Deathklaat vod enabled
   setup Six_Feet_Under-Deathklaat input Six_Feet_Under_Deathklaat.m2v
   setup Six_Feet_Under-Deathklaat
new Spineshank vod enabled
   setup Spineshank input Spineshank.mpeg
   setup Spineshank

new Alice_Cooper_Poison.avi vod enabled

   setup Alice_Cooper_Poison.avi input Alice_Cooper_Poison.avi
   setup Alice_Cooper_Poison.avi
На клиенте

Открываем Медиа/открыть URL/ Выбираем Протокол RTSP вводим наш IP адрес : порт тот что на ВОД сервере выбрали / имя файла

Пример 192.168.0.3:5004/Moonspell

HTTP

На сервере

1. Из веб интерфейса

$ cvlc -vvv --extraintf http --http-host 10.0.0.1:8080

Войдя в веб интерфейс выбираем VLM interface > broadcast Name имя Enable Loop Input: выбираем файл Output: HTTP адрес сервера, порт больше 1024 например 8082

2. Из конфигурационного файла

$ cvlc -vvv --vlm-conf=/usr/home/test/httpbroadcast.conf
$ vim /usr/home/test/httpbroadcast.conf
new channel1 broadcast enabled
  setup channel1 input Moonspell.mpg
  setup channel1 output #standard{mux=ts,access=http,url=10.0.0.1:8082/stream1}
new channel2 broadcast enabled
  setup channel2 input Amon_Amarth.avi
  setup channel2 output #standard{mux=ts,access=http,url=10.0.0.1:8082/stream2}
control channel1 play
control channel2 play
На клиенте

Открываем Медиа/открыть URL/ Выбираем Протокол HTTP вводим IP адрес сервера : порт тот что на HTTP сервере выбрали

Пример 10.0.0.1:8082

MULTICAST

На сервере

1. Из веб интерфейса

$ cvlc -vvv --extraintf http --http-host 10.0.0.1:8080 --rtsp-host 10.0.0.1:5554 --rtsp-caching=3000 --ttl=12
$ cvlc -vvv /usr/home/test/Amon_Amarth.avi --sout '#std{access=udp,mux=ts,dst=239.255.1.1:1234}' --ttl=12
 --udp-caching=3000

2. Из командной сроки

$ vlc -vvv /usr/home/test/Amon_Amarth.avi --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128,deinterlace}:
rtp{mux=ts,dst=239.255.12.42,port=1234,sap,name="TestStream"}' --ttl=12 

3. Из конфигурационного файла

$ cvlc -vvv --vlm-conf=/usr/home/test/test --ttl=12
vim /home/test/test
new channel1 broadcast enabled
  setup channel1 input /usr/home/test/Amon_Amarth.avi
  setup channel1 output #rtp{mux=ts,dst=239.255.1.1,sap,name="Channel1"}
new channel2 broadcast enabled
  setup channel2 input /usr/home/test/Amon_Amarth.avi
  setup channel2 output #rtp{mux=ts,dst=239.255.1.2,sap,name="Channel2"}
control channel1 play
control channel2 play
setup channel1 loop
setup channel2 loop
На клиенте

запускаем vlc выбираем «Настройки» → «Настройки» → раскрываем «Выведение потока», а там ищем «Модули вывода», в поле «Интерфейс выведения Ipv4 multicast» пишем IP-адрес который прописан на вашей сетевой карте ( что смотрит в сторону сервера того, которое вещает поток), жмем «Сохранить»

После того, как выполнили настройки: «Файл» →«Открыть URL» в строке MRL пишем: udp:@239.255.1.1 (что бы посмотреть видео из файла file_1.avi) или udp:@239.255.1.2 (что бы посмотреть видео из файла file_2.avi соответственно)

Трансляция на веб странице в флеш плеере

Нужно установить Flowplayer в папку вебсервера и создать страничку примерно как эта

vim /usr/local/www/apache22/data/web/webvlc.html


  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
      <title>test</title>
      <script type="text/javascript" src="flowplayer-3.1.4.min.js"></script>  
      <!-- some minimal styling, can be removed -->
      <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
      <center>
              <!-- this A tag is where your Flowplayer will be placed. it can be anywhere -->
              <a href="http://192.168.0.3:8082/stream.flv"
                       style="display:block;width:320px;height:256px"
                       id="player">
              </a>
              <!-- this will install flowplayer inside previous A- tag. -->
              <script>
                      flowplayer("player", "flowplayer-3.1.5.swf");
              </script>
      </center>
</body>
</html>

1. Из веб интерфейса

$ cvlc -vvv --extraintf http --http-host 192.168.0.3:8080 --rtsp-host 192.168.0.3:5554 --rtsp-caching=3000 --ttl=12

Войдя в веб интерфейс выбираем VLM interface > broadcast Name имя Enable Loop Input: избираем файл Output: HTTP адрес сервера, порт больше 1024 например 8082

#transcode{vcodec=FLV1,acodec=mp3,sameplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=192.168.0.3:8082/stream.flv}
#transcode{vcodec=FLV1,acodec=mp3,vb=200,deinterlace,fps=25,samplerate=44100,ab=32}:
std{access=http,mux=ffmpeg{mux=flv},dst=192.168.0.3:8082/stream.flv}

Контроль доступа и управление абонентов

В системе сделан контроль доступа абонентов к услугам сервиса телевидение. контроль осуществляется в зависимости от:

  1. тарифного плана (предоплата/послеоплата) и сумы на счету абонента
  2. Статуса абонента (активно, блокировано, приостановлено )
  3. Разрешенных каналов

Для контроля доступа используются данные подключения абонента Порт, Коммутатор из сервиса IP/DHCP, сами коммутаторы заводятся в секции / Система / Сервера доступа /. Для серверов достпа обязательно нужно указывать данные управления ими: IP Доступа, логин или пароль в зависимости от типа управления оборудованием. Данные о разрешённых пользователю портах, IP адресах серверов вещания берутся из настроек тарифного плана абонента


Для управления абонентами используется программа iptv_access_ctl.pl, программа является универсальной, может вызывать внешние программы контроля доступа.

Параметры:

ACTION действие
up - Поднять интерфейс
down - опустить интерфейс
LOGIN Логин для контроля
NAS_ID Сервер доступа (В большинстве случаев єто коммутатор к которому подключён абонент)
TP_ID Тарифный план
UP_CMD= Внешняя команда для предоставления доступа
DOWN_CMD= Внешняя команда для блокирования доступа
DEBUG=… Режим отладки
ROWS=.. Количество строк
help Меню помощи

Внешним программам передаются следующие параметры.

# iptv_access_ctl.pl UP_CMD="/usr/abills/Abills/modules/Iptv/enable up NAS_IP=%NAS_IP% NAS_PORT=%NAS_PORT% TP_ID=%TP_ID%" \
  DOWN_CMD="/usr/abills/Abills/modules/Iptv/enable down NAS_IP=%NAS_IP% NAS_PORT=%NAS_PORT% TP_ID=%TP_ID%"

список параметров

%LOGIN% Логин абонента
%TP_ID% Тарифный план
%NAS_IP% IP коммутатора к которому подключён абонент
%NAS_LOGIN% Пароль доступа к коммутатору
%NAS_PASSWORD% Пароль доступа к коммутатору
%NAS_TYPE% Пароль доступа к коммутатору
%NAS_PORT% Порт подключения абонента.

Информация о оборудовании к которому подключён абонент берётся с сервиса IP/DHCP

MIDDLEWARE STALKER

http://i-s.od.ua/stalker/index.html


Модуль работает с v 4.8.42 версией stalker middleware. Работа производиться напрямую с базой данных и для корректной работы нужно размещать базу данных Stalker на том же сервер что и ABillS. Для работы с удалённым сервером Stalker нужно использовать модуль взаимодействия с API

Возможности:

  • Регистрация Set-top box в билинге
  • Определение незарегистрированных
  • Отключение по признаку баланса или статуса акаунта или сервиса
  • Управление каналами в тарифном плане
  • Управление дополнительными каналами абонентов
  • Отправка сообщений через биллинг абонентам
  • Оповещение о израсходованном депозите (в разработке)

Дополнительные параметры

$conf{IPTV_STALKER_DB}='stalker_db'; База STALKER
$conf{STALKER_TP_ID}=1000; Нумерация экспортированных тарифных планов будет начинаться с заданного числа

Настройка STALKER MIDDLEWARE

Экспорт каналов с Stalker'a

Система → Телевидение → Каналы

Меню

Внизу под таблицей есть кнопка «Экспорт Stalker» которая импортирует все каналы с базы данных stalker'a.

кнопка "Экспорт Stalker" которая импортирует все каналы с базы данных stalker'a

Добавление каналов

Система → Телевидение → Каналы

Заполняем форму добавления канала:

Форма добавление канала

Канал успешно добавлен.

Редактирование канала

Нажимаем на кнопку редактировать:

Кнопка редактирования канала

Редактируем нужные данные и жмем кнопку изменить:

Форма редактирования канала

Удаление канала

Возле нужно канала жмем кнопку удалить:

Кнопка удаления канала

Экспорт тарифный планов с базы данных Stalker

В config.pl нужно добавить обязательный параметр:

$conf{STALKER_TP_ID}=10400; Нумерация экспортированных тарифных планов будет начинаться с заданного числа (В этом примере это 10400).

Система → Телевидение →Тарифные планы

Перед экспортом тарифных планов нужно сначала экспортировать каналы с базы Stalker(см. раздел «Экспорт каналов с Stalker'a»)

После экспорта каналов, внизу под таблицей тарифных планов жмем кнопку «Stalker Экспорт тарифных планов»:

кнопка "Stalker Экспорт тарифных планов"

Заведение тарифного плана

Система → Телевидение →Тарифные планы → Добавить

Меню добавления тарифного плана

Заполняем форму и нажимаем кнопку добавить.

Форма добавления тарифного плана

Тарифный план создан.

Для активации тарифного плана нужно создать пакет каналов, для этого нужно зайти в интервалы выбранного тарифного плана:

 Кнопка "интервалы"

и нажать кнопку каналы :

Кнопка каналы

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

в открывшимся списке каналов отметить нужные и нажать кнопку изменить

Изменение пакета каналов для тарифного плана

Для изменения каналов в выбранном тарифном плане нажимаем кнопку интервал:

 Кнопка "интервалы"

и нажать кнопку каналы :

Кнопка каналы

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

в открывшимся списке каналов отметить нужные и нажать кнопку изменить

Активация телевидения у пользователя

→ Клиенты

Выбираем нужного пользователя.
В правом меню выбираем пункт Телевидение:

В правом меню выбираем пункт Телевидение

В открывшейся форме выбираем поля Тарифный план, а также Set-top box(MAC адрес оборудования которое нужно привязать к этому пользователю):

В открывшейся форме выбираем поля **Тарифный план**, а также **Set-top box**

После чего, нажимаем кнопку активации. При повторном заходе в данное меню, под формой будет отображаться таблица с доступными каналами. Количество каналов зависит от установленного тарифного плана.

Отправка сообщений пользователю

Выбираем нужного пользователя.
В правом меню выбираем пункт Телевидение или
Клиенты → Логины → Информация → Сервисы → Телевидение

Если пользователь активирован(выбран тариф. план телевидения и привязан Set-top box) то отправить сообщение можно при помощи кнопки:

Отправить сообщение

откроется форма, в которую нужно ввести текст сообщения и нажать кнопку отправить:

Форма отправки сообщений

Stalker API

Установка

 cp Stalker_api.pm /usr/abills/Abills/Modules/Iptv/
 

Параметры настройки
config.pl

$conf{IPTV_STALKER_API_LOGIN}='stalker';
$conf{IPTV_STALKER_API_PASSWORD}='secret_pass';
$conf{IPTV_STALKER_API_HOST}='192.168.1.5/stalker_portal/api/';
$conf{IPTV_STALKER_DEBUG}=0;

Включение на Stalker API
server/config.ini

[server_api]
enable_api = true
api_auth_login = stalker
api_auth_password = secret_pass
enable_api_log = true

узнать версию портала можно в файле

stalker_portal/c/version.js

переменная

var ver = '4.8.57';

Экспорт данных с Stalker

/ Настройка / Телевидение/ Stalker/

Данное меню разрешает просматривать данные с middleware и экспортировать их в биллинг

Экспорт тарифных планов

При заведении тарифных планов в middleware Stalker обязательно укажите external_id так как по этому полю будут синхронизироваться ТП с MIddleware Stalker.

Для экспорта тарифных планов в билинг нужно выбрать под меню Тарифные планы (/ Настройка / Телевидение/ Stalker/) и нажать на кнопку добавить нужного тарифного плана.

Агент контроля Stalker

# /usr/abills/libexec/billd stalker_online

Данный агент контролирует состояние Stalker и управляет аккаунтами абонентов заведёнными в middleware.


Возможности

  • Получает данные о активных приставках и сообщает об этом биллингу (журнал / Мониторинг / Телевидение).
  • Выключает не зарегистрированные в билинге приставки
  • Привязывает мак адреса приставок к аккаунтам абонентов при первом подключении
  • Отключает на middleware Stalker абонентов отключенных в биллинге
  • Следит за состоянием счета абонента и отключает должников
  • Устанавливает дату окончания пакета при первом подключении приставки
  • Отключает абонентов с истекшим пакетом

Данную программу стоит запускать через cron с интервалом 5 минут

/etc/crontab

 */5 * * * * root  /usr/abills/libexec/billd stalker_online