Модуль Iptv предназначен для организации платных телевизионных трансляций в режиме групповых рассылок Multicast.
Модуль Iptv обеспечивает автоматическую блокировку/разблокировку доступа клиентов к платным телевизионным трансляциям. С этой целью на сетевых коммутаторах, к которым непосредственно подключены клиенты, устанавливаются фильтры 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 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
$ 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
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
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
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
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}
В системе сделан контроль доступа абонентов к услугам сервиса телевидение. контроль осуществляется в зависимости от:
Для контроля доступа используются данные подключения абонента Порт, Коммутатор из сервиса 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
Модуль работает с v 4.8.42 версией stalker middleware. Работа производиться напрямую с базой данных и для корректной работы нужно размещать базу данных Stalker на том же сервер что и ABillS. Для работы с удалённым сервером Stalker нужно использовать модуль взаимодействия с API
Возможности:
Дополнительные параметры
$conf{IPTV_STALKER_DB}='stalker_db'; | База STALKER |
---|---|
$conf{STALKER_TP_ID}=1000; | Нумерация экспортированных тарифных планов будет начинаться с заданного числа |
Система → Телевидение → Каналы
Внизу под таблицей есть кнопка «Экспорт Stalker» которая импортирует все каналы с базы данных stalker'a.
В config.pl нужно добавить обязательный параметр:
$conf{STALKER_TP_ID}=10400; | Нумерация экспортированных тарифных планов будет начинаться с заданного числа (В этом примере это 10400). |
---|
Система → Телевидение →Тарифные планы
Перед экспортом тарифных планов нужно сначала экспортировать каналы с базы Stalker(см. раздел «Экспорт каналов с Stalker'a»)
После экспорта каналов, внизу под таблицей тарифных планов жмем кнопку «Stalker Экспорт тарифных планов»:
Система → Телевидение →Тарифные планы → Добавить
Заполняем форму и нажимаем кнопку добавить.
Тарифный план создан.
Для активации тарифного плана нужно создать пакет каналов, для этого нужно зайти в интервалы выбранного тарифного плана:
и нажать кнопку каналы :
в открывшимся списке каналов отметить нужные каналы и нажать кнопку изменить:
Для изменения каналов в выбранном тарифном плане нажимаем кнопку интервал:
и нажать кнопку каналы :
в открывшимся списке каналов отметить нужные каналы и нажать кнопку изменить:
→ Клиенты
Выбираем нужного пользователя.
В правом меню выбираем пункт Телевидение:
В открывшейся форме выбираем поля Тарифный план, а также Set-top box(MAC адрес оборудования которое нужно привязать к этому пользователю):
После чего, нажимаем кнопку активации. При повторном заходе в данное меню, под формой будет отображаться таблица с доступными каналами. Количество каналов зависит от установленного тарифного плана.
Выбираем нужного пользователя.
В правом меню выбираем пункт Телевидение или
Клиенты → Логины → Информация → Сервисы → Телевидение
Если пользователь активирован(выбран тариф. план телевидения и привязан Set-top box)
то отправить сообщение можно при помощи кнопки:
откроется форма, в которую нужно ввести текст сообщения и нажать кнопку отправить:
Установка
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/
Данное меню разрешает просматривать данные с middleware и экспортировать их в биллинг
При заведении тарифных планов в middleware Stalker обязательно укажите external_id так как по этому полю будут синхронизироваться ТП с MIddleware Stalker.
Для экспорта тарифных планов в билинг нужно выбрать под меню Тарифные планы (/ Настройка / Телевидение/ Stalker/
) и нажать на кнопку добавить нужного тарифного плана.
# /usr/abills/libexec/billd stalker_online
Данный агент контролирует состояние Stalker и управляет аккаунтами абонентов заведёнными в middleware.
Возможности
Данную программу стоит запускать через cron с интервалом 5 минут
/etc/crontab
*/5 * * * * root /usr/abills/libexec/billd stalker_online