アストラ:最初の連絡

当初、IPTV放送では、サーバーと複数の衛星受信機で大量のsasc-ng(閉じたチャンネルの復号化)とgetstream(再多重化と放送)を使用しました。 約2年前、getstreamは精製を開始しました。主な目標は、高価な受信機を交換し、不安定なsasc-ngを削除することです。 時間が経つにつれて、このプロジェクトはgetstream_a84として知られるようになりました(a84-bitbucket.orgでの私のアカウントの名前でしたが、この名前から始まりました)。

アプリケーションは、sasc-ngとは異なり、dvbloopbackをインストールする必要がなく、DRE-CryptおよびIrdeto条件付きアクセスシステムで安定して動作する、非常に機能的であることが判明しました。

約1年前、getstreamに代わるものを開発する必要がありました。 主な理由は、getstreamアーキテクチャでは新しい機能を簡単に追加できないことです。 既存のコードを更新することでさえ、多くの問題でした。 新しいプロジェクトはAstraと呼ばれます。



プロジェクトは非常に成功したことが判明しました。モジュラーアーキテクチャとLuaの組み合わせにより、アプリケーションの実行中に柔軟な構成を作成し、さまざまなアクションを実行できます。

Astraコアは、さまざまなアプリケーションを開発するためのフレームワークとして使用できます。 カーネルには以下が含まれます。





最終的なアプリケーションの機能は、一連のモジュールとプロトコル(モジュール間の相互作用を記述する一連の機能)によって決まります。

将来的には、Astraコアを別のプロジェクトに分離する予定ですが、現時点では、IPTVのフレームワーク内でのみ開発が行われています。 機能のアストラは、getstream_a84などを完全に置き換えることができます。

hetstreamに対するAstersの主な利点:





Astraの機能の小さなデモ-DVBを使用したネットワーク上でのブロードキャスト、いくつかのチャネル:

#!/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 }, })
      
      







すべてのロジックは、Luaスクリプトで説明されています。 この例では、make_stream関数(require "base"から接続)を使用し、必要なパラメーターを使用してモジュールをロードし、モジュール間の接続を確立します。 ロードされたモジュールのインスタンスは、後で使用するためにテーブルに保存されます(さらに、モジュールインスタンスに変数が割り当てられていない場合、ガベージコレクターはそれをアンロードします)。

たとえば、Webインターフェイス(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



All Articles