アプリケーションは、sasc-ngとは異なり、dvbloopbackをインストールする必要がなく、DRE-CryptおよびIrdeto条件付きアクセスシステムで安定して動作する、非常に機能的であることが判明しました。
約1年前、getstreamに代わるものを開発する必要がありました。 主な理由は、getstreamアーキテクチャでは新しい機能を簡単に追加できないことです。 既存のコードを更新することでさえ、多くの問題でした。 新しいプロジェクトはAstraと呼ばれます。
プロジェクトは非常に成功したことが判明しました。モジュラーアーキテクチャとLuaの組み合わせにより、アプリケーションの実行中に柔軟な構成を作成し、さまざまなアクションを実行できます。
Astraコアは、さまざまなアプリケーションを開発するためのフレームワークとして使用できます。 カーネルには以下が含まれます。
- イベント処理。 現在、epoll、kqueue、およびpollをサポートしています
- ネットワークソケットで動作する
- タイマー(イベントハンドラーを中断することで機能します)
- モジュールの初期化
- ロギング
- ルア
最終的なアプリケーションの機能は、一連のモジュールとプロトコル(モジュール間の相互作用を記述する一連の機能)によって決まります。
将来的には、Astraコアを別のプロジェクトに分離する予定ですが、現時点では、IPTVのフレームワーク内でのみ開発が行われています。 機能のアストラは、getstream_a84などを完全に置き換えることができます。
hetstreamに対するAstersの主な利点:
- モジュール性
- より少ないCPU負荷
- 安定して動作します
- 制御、構成、管理の大きな機会
- 新しい機能を開発するのに便利
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