рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЖрдИрдкреАрдЯреАрд╡реА рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдФрд░ рдХрдИ рдЙрдкрдЧреНрд░рд╣ рд░рд┐рд╕реАрд╡рд░реЛрдВ рдкрд░ sasc-ng (рдмрдВрдж рдЪреИрдирд▓реЛрдВ рдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди) рдФрд░ рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо (рд░реАрдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕рд┐рдВрдЧ рдФрд░ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд▓рдЧрднрдЧ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо рдиреЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдорд╣рдВрдЧреЗ рд░рд┐рд╕реАрд╡рд░реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдЕрд╕реНрдерд┐рд░ sasc-ng рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╣реИред рд╕рдордп рдХреЗ рд╕рд╛рде, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ getstream_a84 рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдиреА рдЬрд╛рдиреЗ рд▓рдЧреА (a84 - bitbucket.org рдкрд░ рдореЗрд░реЗ рдЦрд╛рддреЗ рдХрд╛ рдирд╛рдо рдерд╛, рдЬрд╣рд╛рдВ рд╕реЗ рдпрд╣ рдЕрдЯрдХ рдЧрдпрд╛)ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдлреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд┐рдХрд▓рд╛, sasc-ng рдХреЗ рд╡рд┐рдкрд░реАрдд, DVbloopback рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рдиреЗ DRE-Crypt рдФрд░ Irdeto рд╕рд╢рд░реНрдд рдПрдХреНрд╕реЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рджреГрдврд╝рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред
рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рднрдЧрджрдбрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЧреЗрдЯрд╕реНрдЯреНрд░реАрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдиреЗ рдЖрд╕рд╛рдиреА рдХреЗ рд╕рд╛рде рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реБрдИред рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрд╕реНрдЯреНрд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рд╕рдлрд▓ рд░рд╣реА, рд▓реБрдЖ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдореЙрдбреНрдпреВрд▓рд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЖрдкрдХреЛ рд▓рдЪреАрд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрд╕реНрдЯреНрд░рд╛ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдШрдЯрдирд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдкреЛрд▓, рдХреЗрдХреНрдпреВ рдФрд░ рдкреЛрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
- рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рдЯрд╛рдЗрдорд░ (рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
- рдореЙрдбреНрдпреВрд▓ рдЖрд░рдВрднреАрдХрд░рдг
- рд▓реЙрдЧрд┐рдВрдЧ
- рд▓реБрдЖ
рдЕрдВрддрд┐рдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдПрдХ рд╕рдореВрд╣ (рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореИрдВ рдПрд╕реНрдЯреНрд░рд╛ рдХреЛрд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдИрдкреАрдЯреАрд╡реА рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╣реА рд╡рд┐рдХрд╛рд╕ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдПрд╕реНрдЯреНрд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ getstream_a84 рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред
рдПрд╕реНрдЯрд░реНрд╕ рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн рд╣реЗрдЯрд╕реНрдЯреНрд░реАрдо рдкрд░:
- рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛
- рдХрдо рд╕реАрдкреАрдпреВ рд▓реЛрдб
- рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- рдирд┐рдпрдВрддреНрд░рдг, рд╡рд┐рдиреНрдпрд╛рд╕, рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдорд╣рд╛рди рдЕрд╡рд╕рд░
- рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ
рдПрд╕реНрдЯреНрд░рд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░рджрд░реНрд╢рди - рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рдг, рдбреАрд╡реАрдмреА, рдХрдИ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде:
#!/usr/bin/env astra require "base" cam_1 = newcamd({ name = "Reader:0.01", host = "card-server.local", port = "40001", username = "user", password = "****", key = "0102030405060708091011121314", }) dvb_1 = { adapter = 1, type = "S2", tp = "12149:h:27500", lnb = "10750:10750:10750" } s1 = make_stream({ name = "Stream 1", dvb = dvb_1 }, { { name = "Channel 1", pnr = 23150, cam = cam_1, addr = "239.255.1.1", analyze = true }, { name = "Channel 2", pnr = 23010, cam = cam_1, addr = "239.255.1.2", analyze = true }, })
рд╕рднреА рддрд░реНрдХ рд▓реБрдЖ рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдореЗрдХрд╕реНрдЯреНрд░реАрдо рдлрд╝рдВрдХреНрд╢рди ("рдЖрдзрд╛рд░" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдкреНрд▓рд╕, рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдПрдХ рдЪрд░ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдЗрд╕реЗ рдЕрдирд▓реЛрдб рдХрд░реЗрдЧрд╛)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (http: // server: 8000 /):
function stat_cb(self, data) if type(data) == 'table' then local dvb_stat = s1.dvb:status() local html = "<html><head><title>Stat</title></head><body><pre>" html = html .. "<b>DVB</b> adapter:" .. s1.config.dvb.adapter .. " lock:" .. tostring(dvb_stat.lock) .. " signal:" .. tostring(dvb_stat.signal) .. "%" .. " snr:" .. tostring(dvb_stat.snr) .. "%\n" for _,ch in pairs(s1.channels) do local ch_stat = ch.analyze:status() html = html .. " <b>" .. ch.config.name .. "</b>" .. " ready:" .. tostring(ch_stat.ready) .. " bitrate:" .. tostring(ch_stat.bitrate) .. " scrambled:" .. tostring(ch_stat.scrambled) .. "\n" end html = html .. "</pre></body></html>" self:send({ code = 200, message = "OK", headers = { "Server: Astra " .. astra.version(), "Content-Type: text/html; charset=utf-8", "Content-Length: " .. #html, "Connection: close" }, content = html }) end end stat = http_server({ port = 8000, callback = stat_cb })
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдкреНрд░рд▓реЗрдЦрди:
https://bitbucket.org/cesbo/astraрдлреЛрд░рдо:
http://cesbo.com/forum