Jump to content
Cesbo Community
Abram

Astraconf - генератор конфигурации для Astra

Recommended Posts

Всем доброго времени суток.

 

Пишу для себя вебморду-конфигуратор для astra-ы (под 4 версию).

 

Лежит на https://bitbucket.org/abramm/astraconf , внутри - php и Yii Framework. На даный момент сырое, но у меня уже свои функции (генерацию и разливку конфигов на два сервера) вполне себе выполняет.

 

Чего умеет:

  • DVB-S/S2
  • DVB-T/T2
  • Ввод из кастомного URL
  • SoftCAM, втч. несколько SoftCAM на поток
  • Несколько серверов
  • Импорт из вывода scan
  • Автоподстановка матраса
  • Формирование плейлиста (пока только для моего Stalker-а, m3u будет на днях)
  • Мозаика из каналов (необходимо установить avconv).
Чего не умеет, но должна (в планах):
  • ГОТОВО Ввод НЕ из DVB
  • ГОТОВО Несколько входных потоков с резервированием, в том числе - из разных адаптеров/серверов (будет использоваться промежуточный экземпляр Astra-ы)
  • ГОТОВО Настройка :). Большинство параметров забиты в коде.
  • Переводы, как минимум на украинский и английский языки.
  • Просмотр потока
Установка

1. Стянуть:

https://abramm@bitbucket.org/abramm/astraconf
2. Ткнуть Апач в astraconf/webroot

3. Создать базу, залить из protected/data/schema.mysql.sql

4. Перейти в директорию config (в корне исходников), сделать ./copyDistConfig.php, поправить реквизиты доступа в создавшемся файле db.php и остальные настройки в common.php.

5. На всякий случай из директории protected сказать

./yiic migrate
6. Задать права доступа для папок:

chmod a+rw webroot/mosaic webroot/assets protected/runtime
Обновление

1. Обновить код

hg pull -u
2. Из директории protected обновить структуру базы

./yiic migrate
Импорт из вывода scan

cd protected
./yiic import importFromScan --serverIp=1.2.3.4 --filename=/tmp/scan_result --adapterNum=10
serverIp - IP-адрес сервера, используется для поиска и/или создания сервера в astraconf.

filename - файл с выводом scan.

adapterNum - номер адаптера в системе, используется для поиска и/или создания адаптера в astraconf.

 

Для работы мозаики необходимо дополнительно установить в системе avconv.

Share this post


Link to post
Share on other sites
  • Несколько входных потоков с резервированием, в том числе - из разных адаптеров/серверов (будет использоваться промежуточный экземпляр Astra-ы)
Реализовано.

Работает.

Офигенно, я тащусь.

 

В качестве доп. фишки - можно принимать поток на одном сервере, а отдавать пользователем - на другом.

Edited by Abram

Share this post


Link to post
Share on other sites

Кто-нибудь уже пробовал? Есть конструктивная (или не очень) критика?

Мне правда интересно.

 

Добавил в планы: сделать мозаику.

Share this post


Link to post
Share on other sites

Че-то не получается сайт выдает

 CDbConnection failed to open the DB connection.

 

лог 

2013/10/28 10:36:04 [error] [exception.CDbException] SQLSTATE[28000] [1045] Access denied for user 'astraconf'@'localhost' (using password: YES)
2013/10/28 10:36:04 [error] [exception.CDbException] exception 'CDbException' with message 'CDbConnection failed to open the DB connection.' in /home/ktv/as$
Stack trace:
#0 /home/ktv/astraconf/yii/db/CDbConnection.php(330): CDbConnection->open()
#1 /home/ktv/astraconf/yii/db/CDbConnection.php(308): CDbConnection->setActive(true)
#2 /home/ktv/astraconf/yii/base/CModule.php(387): CDbConnection->init()
#3 /home/ktv/astraconf/yii/base/CApplication.php(450): CModule->getComponent('db')
#4 /home/ktv/astraconf/yii/db/ar/CActiveRecord.php(634): CApplication->getDb()
#5 /home/ktv/astraconf/yii/db/ar/CActiveRecord.php(2361): CActiveRecord->getDbConnection()
#6 /home/ktv/astraconf/yii/db/ar/CActiveRecord.php(411): CActiveRecordMetaData->__construct(Object(Adapter))
#7 /home/ktv/astraconf/yii/db/ar/CActiveRecord.php(79): CActiveRecord->getMetaData()
#8 /home/ktv/astraconf/protected/components/MyActiveRecord.php(41): CActiveRecord->__construct('search')
#9 /home/ktv/astraconf/protected/controllers/AdaptersController.php(7): MyActiveRecord->__construct('search')
#10 /home/ktv/astraconf/yii/web/actions/CInlineAction.php(49): AdaptersController->actionIndex()
#11 /home/ktv/astraconf/yii/web/CController.php(308): CInlineAction->runWithParams(Array)
#12 /home/ktv/astraconf/yii/web/filters/CFilterChain.php(133): CController->runAction(Object(CInlineAction))
#13 /home/ktv/astraconf/yii/web/filters/CFilter.php(40): CFilterChain->run()
#14 /home/ktv/astraconf/yii/web/CController.php(1145): CFilter->filter(Object(CFilterChain))
#15 /home/ktv/astraconf/yii/web/filters/CInlineFilter.php(58): CController->filterAccessControl(Object(CFilterChain))
#16 /home/ktv/astraconf/yii/web/filters/CFilterChain.php(130): CInlineFilter->filter(Object(CFilterChain))
#17 /home/ktv/astraconf/yii/web/CController.php(291): CFilterChain->run()
#18 /home/ktv/astraconf/yii/web/CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#19 /home/ktv/astraconf/yii/web/CWebApplication.php(282): CController->run('index')
#20 /home/ktv/astraconf/yii/web/CWebApplication.php(141): CWebApplication->runController('adapters/index')
#21 /home/ktv/astraconf/yii/base/CApplication.php(180): CWebApplication->processRequest()
#22 /home/ktv/astraconf/webroot/index.php(26): CApplication->run()
#23 {main}
REQUEST_URI=/index.php?r=adapters/index
HTTP_REFERER=http://192.168.1.222/index.php?r=servers/index

Share this post


Link to post
Share on other sites

 

Че-то не получается сайт выдает

 CDbConnection failed to open the DB connection.

 

Было подобное, установил php5-mysql - заработало.

 

 

  • Импорт из вывода scan

Не совсем понятно как импорт сделать?

Share this post


Link to post
Share on other sites

Access denied for user 'astraconf'@'localhost' (using password: YES)

Неправильно указаны логин-пароль к базе.

Не совсем понятно как импорт сделать?

Пардон, не описал.

cd protected
./yiic import importFromScan --serverIp=1.2.3.4 --filename=/tmp/scan_result --adapterNum=10
serverIp - IP-адрес сервера, используется для поиска и/или создания сервера в astraconf.

filename - файл с выводом scan.

adapterNum - номер адаптера в системе, используется для поиска и/или создания адаптера в astraconf.

 

Там есть еще ./yiic import importUAinet - не обращайте внимания, это импорт из моего исторически сложившегося формата. В скором времени уберется вообще.

Share this post


Link to post
Share on other sites
cd protected
./yiic import importFromScan --serverIp=1.2.3.4 --filename=/tmp/scan_result --adapterNum=10
serverIp - IP-адрес сервера, используется для поиска и/или создания сервера в astraconf.

filename - файл с выводом scan.

adapterNum - номер адаптера в системе, используется для поиска и/или создания адаптера в astraconf.

 

Там есть еще ./yiic import importUAinet - не обращайте внимания, это импорт из моего исторически сложившегося формата. В скором времени уберется вообще.

 

 

Спасибо. 

 

В output вещание формируется по http, udp можно как то сделать?

Share this post


Link to post
Share on other sites

Спасибо. 

В output вещание формируется по http, udp можно как то сделать?

Ага. Посмотрел только что в код:

    public function getExternalCastUrl()
    {
        //TODO: select HTTP or UDP
        return 'http://'.$this->server->ip.':'.(8000+$this->num).'/'.$this->num;
    }
Особое внимание на TODO :-D.

 

Сделал.

Обновитесь, в конце protected/config/main.php установите 'useHTTPForOutput' => false .

Share this post


Link to post
Share on other sites

Abram а нет ли желания рассмотреть мою модель управления астрой и может быть реализовать ее?

 

Я к сожалению так и не осилил как нормально делать всякие сложные GUI-элементы в yii потому в своей разработке

использую ajaxphpcrud и DHTMLX ( dhtmlx.com )

 

у меня по архитектуре на данный момент на каждом приёмнике с астрой стоит lighthttpd  и подсистема вызовов-скриптов на питоне,

таких как "отсканировать каналы на адаптере" , "назначить такой-то транспондер на такой то адаптер"   , "считать актуальное  EPG с адаптера" и так далее.

 

Сама по себе база данных содержит

-провайдеры-вещатели ( в этой же таблице параметры подключения cam соответствующие каждому )

-транспондеры ( частота , символрейт,  ссылка-привязка к провайдеру )

-фидеры ( по сути номер пассивного разветвителя на котором нужно обеспечивать единую поляризацию при настройке адаптеров )

-привязка приёмников / адаптеров к фидерам и транспондерам ( любой транспондер одной операцией может быть назначен на любой приёмник/адаптер где будет автоматом сформирован конфиг с всеми включенными каналами )

-источники ( хранит отсканированные названия, наши модицифированные названия, url куда вещать , привязку к транспондеру,  сведения о кодеках видео и аудио, битовую маску вхождения в группы источников , привязку к "медиаканалу")

-медиаканалы - тут хранятся фактические телепрограммы ( например "Первый", "НТВ", "ТНТ" ) у каждого медиаканала всегда более одного источника  ( с разных провайдеров-вещателей, транспондеров , резервных вводов )

 

Соответственно когда формируется "плейлист" для мидлваре,   то он формируется по таблице "медиаканалов"  с учетом тех групп которые помечены как активные к экспорту ,   а вот URL  к этим медиаканалам берется из таблицы источников , согласно тому какой источник назначен "активным".

 

( Так было раньше, сейчас уже активно тестирую схему когда для абонента каждому медиаканалу соответствует фиксированный IP и в этот IP вещает промежуточная astra-4 балансировщик ,  у которой в свою очередь в качестве нескольких input прописаны все активные "источники")

 

Вобщем суть такая что я не могу выложить эту систему в общий доступ, но могу делится обкатанными в эксплуатации идеями и фишками.

Share this post


Link to post
Share on other sites

Ага. Посмотрел только что в код:

    public function getExternalCastUrl()
    {
        //TODO: select HTTP or UDP
        return 'http://'.$this->server->ip.':'.(8000+$this->num).'/'.$this->num;
    }
Особое внимание на TODO :-D.

 

Сделал.

Обновитесь, в конце protected/config/main.php установите 'useHTTPForOutput' => false .

 

А может кнопочку добавить " Сканировать адаптеры" после  ставим галки что будем брать , куда отправлять, какой сервер использовать для ключей и т.д. ? 

Share this post


Link to post
Share on other sites

LostSoul,

Спасибо.

Я, правда, EPG беру в другом месте, да и просканировать мне не лень вручную :). Поэтому обратной связи с "вещателями" у меня нет.

 

А может кнопочку добавить " Сканировать адаптеры" после  ставим галки что будем брать , куда отправлять, какой сервер использовать для ключей и т.д. ?

Вот только не надо наглеть, а? :)

Share this post


Link to post
Share on other sites

Abram - ну так обьект "вещатель" он главным образом служит для задания параметров CAM , объединенных понятным названием.

что типа например вещатель "ntv" это свой локальный оскам, ip такой-то, порт такой, логин такой-то.  , "ntv-hd" это к примеру IP шары, порт шары, логин-пароль шары.

 

счас вот транспондер с виасат закодировали - я одним движением поменял для транспондера "провайдера" в GUI, нажал "перезапустить" и там сгенерился новый конфиг для астры с учетом измененного "провайдера",

 

"Не лень вручную"  становится сильно более лень при числе источников более 500.

У меня на Радуге, НТВ+ , Триколор и Телекарте ( неполной) их уже 601)

Share this post


Link to post
Share on other sites

Abram - ну так обьект "вещатель" он главным образом служит для задания параметров CAM , объединенных понятным названием.

что типа например вещатель "ntv" это свой локальный оскам, ip такой-то, порт такой, логин такой-то.  , "ntv-hd" это к примеру IP шары, порт шары, логин-пароль шары.

 

счас вот транспондер с виасат закодировали - я одним движением поменял для транспондера "провайдера" в GUI, нажал "перезапустить" и там сгенерился новый конфиг для астры с учетом измененного "провайдера",

 

"Не лень вручную"  становится сильно более лень при числе источников более 500.

У меня на Радуге, НТВ+ , Триколор и Телекарте ( неполной) их уже 601)

"Вещателями" я называю сервера, на которых запущена Астра.

А CAM-ы у меня так же приблизительно сделаны, только прибиваются к потоку, а не к трансподеру.

В общем - те же яйца, только в профиль.

 

Сейчас у меня около 100 источников. Будет хотя бы 300 - подумаю над сканированием из гуя :).

Share this post


Link to post
Share on other sites

Ясно. За все время что я занимаюсь астрой я не заметил чтобы хоть раз параметры кодирования для разных каналов одного транспондера отличались. Хотя такое конечно бывает ( даже два вещателя на один фактический поток )

 

но у тех операторов что использую я - не было.

про "вещатели" = "стримеры/приёмники" - это у вас гелеоцентрическая картина мира)))

 

 

А по поводу сканирования - самое главное тут не из GUI ( кнопки "сканировать " у меня тоже нету, запускаю через URL скрипт с параметрами )

Самое главное тут устранение человеческого фактора.

Начинал тоже как вы , парсил вывод scan.

потом стало получатся что или транспондер не так затюнился или ещё какие траблы но вобщем в базе стала получатся каша.

ещё большая каша стала возникать когда появилась потребность сканировать обновления, не трогая уже созданные записи....

То есть ключевые качества функции "сканировать" -

1) она сама тюнится именно на тот транспондер, который назначен на этот адаптер в таблице привязок, без ошибок и путаницы адаптеров и приёмников.

2) она проверяет transport_stream_id на соответствие ожидаемому согласно таблице транспондеров

3) только после этого она сканирует список каналов

4) каналы без ошибки сохраняются в базу с привязкой именно к нужному транспондеру автоматом

 

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

Share this post


Link to post
Share on other sites

LostSoul,

Спасибо.

Я, правда, EPG беру в другом месте, да и просканировать мне не лень вручную :). Поэтому обратной связи с "вещателями" у меня нет.

 

Вот только не надо наглеть, а? :)

Я и не налегаю , просто у меня есть железка с веб управлением, там это делается так : Сканируем > ставим галки что берем > редактируем названия пиды и т.д. > запускаем готовые потоки.

Share this post


Link to post
Share on other sites

Я и не налегаю , просто у меня есть железка с веб управлением, там это делается так : Сканируем > ставим галки что берем > редактируем названия пиды и т.д. > запускаем готовые потоки.

 

У меня по текстовым названиям каналов ещё и производится их автоматическое сопоставление в один "медиаканал"  , при совпадении.

А ещё названия каналов используются в поле "event" при генерации asta.conf ,  например "Европа плюс ТВ (raduga 127040V)"   - "Название из базы ( вещатель транспондер )"

Share this post


Link to post
Share on other sites

У меня по текстовым названиям каналов ещё и производится их автоматическое сопоставление в один "медиаканал"  , при совпадении.

У меня тоже.

Я уже понял, что у Вас есть Вещь, но никто её, кроме Вас, пока что не видел, так что давайте всё-таки вернемся к обсуждаемой теме.

Share this post


Link to post
Share on other sites

Не видел, потому что я не вольный стрелок, а делаю это вещь за зарплату работодателя.

Если она будет открыта для сообщества , вам будет интересно обьединить усилия или будете свой велосипед пилить?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×