Мониторинг в Astra4

Многие операторы отказываются от использования Astra4 из-за отсутствия в бесплатной версии мониторинга, — привожу пример LUA-конфига способный исправить это настроение.

#!/usr/local/bin/astra4bin/astra_5

logfile = "/var/log/astra_5.log"
os.remove(logfile)
log.set({ filename = logfile })
pidfile("/var/run/astra_5.pid")

channels = {
{ name = "Strana", input = {"dvb://rad_11665_5#pnr=6&no_analyze"}, output = {"udp://[email protected]:1234"}},
{ name = "Russkiy roman", input = {"dvb://rad_11665_5#pnr=3&no_analyze"}, output = {"udp://[email protected]:1234"}},
{ name = "Nauka 2.0", input = {"dvb://rad_11665_5#pnr=2&no_analyze"}, output = {"udp://[email protected]:1234"}},
{ name = "Moya planeta", input = {"dvb://rad_11665_5#pnr=1&no_analyze"}, output = {"udp://[email protected]:1234"}},
{ name = "Sarafan", input = {"dvb://rad_11665_5#pnr=5&no_analyze"}, output = {"udp://[email protected]:1234"}},
}

-- declare
_an = {}
local hostname = utils.hostname()
local content = ""
local _t = 10 -- timer start signal

-- settings tuner
local tune_conf = {
    name = "rad_11665_5",
    type = "S",
    adapter = 5,
    lnb_sharing = true,
    frequency = 11665,
    polarization = "V",
    symbolrate = 44922,
    lof1 = 9750,
    lof2 = 10600,
    slof = 11700,
    modulation = "QPSK",
    device = 0,
    budget = false,
    fec = "AUTO",
    enable = true,
    callback = function(data)
      _t = _t + 1
      if(_t == 15)then
        content = "type=dvb&stream=rad_11665_5&adapter=5&server=" .. hostname .. "&signal=" .. data.signal .. "&snr=" .. data.snr .. "&status=" .. data.status .. "&ber=" .. data.ber .. "&unc=" .. data.unc
        send_monitor(content)
        _t = 0
      end
    end
}

rad_11665_5 = dvb_input(tune_conf)

function send_monitor(content)
  http_request({
    host = "192.168.234.241",
    path = "/tv_monitor_stat.php",
    method = "POST",
    content = content,
    port = 80,
    headers = {
        "User-Agent: Astra v." .. astra.version,
        "Host: " .. hostname,
        "Content-Type: application/x-www-form-urlencoded",
        "Content-Length: " .. #content,
        "Connection: close",
    },
    callback = function(s,r)
    end
  })
end

for q,item in pairs(channels)do
  local output = item.output[1]
  make_channel(item)
  _an[q] = {i = {}, a = {}, t = 20}
  _an[q].i = udp_input(item.output[1])
  _an[q].a = analyze({
        upstream = _an[q].i:stream(),
        name = "_" .. item.name,
        callback = function(data)
          if(_an[q].t==30 and data.total)then
            local scram = 0
            local onair = 0
            if(data.total.scrambled==true) then
              scram = 1
            end
            if(data.on_air==true) then
              onair = 1
            end
            content = "type=channel&server=" .. hostname .. "&adapter=" .. tune_conf.adapter .. "&channel=" .. item.name .. "&stream=" .. tune_conf.name .. "&scrambled=" .. scram .. "&bitrate=" .. data.total.bitrate .. "&cc_error=" .. data.total.cc_errors .. "&pes_error=" .. data.total.pes_errors .. "&ready=" .. onair
            send_monitor(content)
            _an[q].t = 0
          end
          _an[q].t = _an[q].t + 1
        end
  })
end

Данные конфиги формирует скрипт на PHP собственной системы управления.

Хочется добавить, что данный пример является альтернативой мониторинга в бесплатной Astra ver.4.xx. Для устойчивой работы системы и своевременной технической поддержки всё-таки рекомендуется приобретение расширенной версии. За цену в 1000$ вы получаете в пожизненное пользование: собственно стример каналов, анализатор и прокси-сервер для вещания в http. Всё это дополнено удобным веб-интерфейсом управления.

На рисунках ниже приведён собственный мониторинг для Astra 4, построенный по аналогии с мониторингом от altlc:

 

Запись опубликована в рубрике Программирование, Разное, Телевидение с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий