Home

Awesome

ISDBScanner

Screenshot

受信可能な日本のテレビチャンネル (ISDB-T/ISDB-S) を全自動でスキャンし、スキャン結果を EDCB (EDCB-Wine)・Mirakurunmirakc の各設定ファイルや JSON 形式で出力するツールです。

お使いの Linux PC に接続されているチューナーデバイスを自動的に検出し、全自動で受信可能なすべての地上波・BS・CS チャンネルをスキャンします。
実行時に --exclude-pay-tv オプションを指定すれば、CS と BS の有料放送をスキャン結果から除外することも可能です。
さらに PC に接続されている対応チューナーを自動的に認識し、Mirakurun / mirakc のチューナー設定ファイルとして出力できます。

地上波では、13ch 〜 62ch までの物理チャンネルをすべてスキャンして、お住まいの地域で受信可能なチャンネルを検出します。
BS・CS では、BS・CS1・CS2 ごとに1つの物理チャンネルのみをスキャンし TS 内のメタデータを解析することで、他のチャンネルスキャンツールよりも高速に現在放送中の衛星チャンネルを検出できます。

[!NOTE]
日本のテレビ放送は、主に地上波 (ISDB-T) と衛星放送 (ISDB-S) の2つの方式で行われています。
さらに、衛星放送は BS (Broadcasting Satellite) と CS (Communication Satellite) の2つの方式があります。
各放送媒体を区別するため、各媒体には一意なネットワーク ID が割り当てられています。

地上波放送では、居住地域によって受信可能な放送局が異なる特性上、放送局ごとにネットワーク ID が割り当てられています。
BS 放送では、すべて同じネットワーク ID (0x0004) が割り当てられています。
CS 放送では歴史的経緯から、CS1 (0x0006: 旧プラット・ワン系) と CS2 (0x0007: スカイパーフェクTV!2系) で異なるネットワーク ID が割り当てられています。
具体的には、物理チャンネル ND02 / ND08 / ND10 内で放送されているチャンネルは CS1 ネットワーク、それ以外は CS2 ネットワークになります。現在両者の表面的な違いはほとんどありませんが、技術的には異なるネットワークとして扱われています。

BS・CS (衛星放送) では、同一ネットワークに属するすべてのチャンネルの情報が、放送波の MPEG-2 TS 内の NIT (Network Information Table) や SDT (Service Description Table) というメタデータに含まれています。
そのため、BS・CS1・CS2 の各ネットワークごとに1つの物理チャンネルをスキャンするだけで、そのネットワークに属するすべてのチャンネルを一括で検出できます。

さらに NIT に含まれる「現在放送中の BS/CS 物理チャンネルリスト」の情報を元にチャンネル設定ファイルを出力するため、将来 BS 帯域再編 (トランスポンダ/スロット移動) が行われた際も、再度 ISDBScanner でチャンネルスキャンを行い、出力されたチャンネル設定ファイルを反映するだけで対応できます。

[!NOTE]
地上波の物理チャンネルのうち 53ch - 62ch はすでに廃止されていますが、依然として一部ケーブルテレビのコミュニティチャンネル (自主放送) にて利用されているため、スキャン対象に含めています。

[!IMPORTANT]
検証環境がないため、ISDB-T の C13 - C63ch (周波数変換パススルー方式) と、ISDB-C (トランスモジュレーション方式) で放送されているチャンネルのスキャンには対応していません。

対応チューナー

px4_drv / smsusb (Linux カーネル標準ドライバ) 対応チューナー以外での動作は検証していませんが、おそらく動作すると思います。

[!IMPORTANT]
DVB 版ドライバを利用するには、ISDBScanner v1.1.0 / recisdb v1.2.2 以降が必要です。
recisdb v1.2.0 以前のバージョンは DVB 版ドライバの操作に対応していません。

chardev 版ドライバ

DVB 版ドライバ

動作検証は smsusb + VASTDTV VT20 のみ行っています。
ほかの PX-S1UD 同等品 (Siano SMS2270 採用チューナー) シリーズであれば同様に動作するはずです。

ISDB-T / ISDB-S 対応であれば smsusb 以外のドライバ (PT1・PT2 / PT3 の DVB 版ドライバや dddvb など) でも動作するはずですが、検証はできていません。

対応出力フォーマット

ISDBScanner は、引数で指定されたディレクトリ以下に複数のファイルを出力します。
出力されるファイルのフォーマットは以下の通りです。

[!NOTE]
--exclude-pay-tv オプションを指定すると、Channels.json を除き、すべての出力ファイルにおいて有料放送チャンネルの定義が除外されます。
なお、Channels.json に限り、BS 放送のみ常に有料放送チャンネルも含めた結果が出力されます (CS 放送はチャンネルスキャン処理自体が省略されるため出力されない) 。

インストール

ISDBScanner は、チューナー受信コマンドとして recisdb を利用しています。
そのため、事前に recisdb のインストールが必要です。

[!NOTE]
recisdb は、旧来から chardev 版ドライバ用チューナー受信コマンドとして利用されてきた recpt1 と、標準入出力経由で B25 デコードを行う arib-b25-stream-test / b25 (libaribb25 同梱) のモダンな代替として開発された、次世代の Rust 製チューナー受信コマンドです。

チューナーからの放送波の受信と B25 デコード、さらに信号レベルの確認 (checksignal) をすべて recisdb ひとつで行えます。
さらに recpt1 と異なり BS の物理チャンネルがハードコードされていないため、将来 BS 帯域再編 (トランスポンダ/スロット移動) が行われた際も、recisdb を更新することなく ISDBScanner でのチャンネルスキャンと各設定ファイルの更新だけで対応できます。

以下の手順で、recisdb をインストールしてください。
下記は recisdb v1.2.2 時点でのインストール手順です。

# Deb パッケージは Ubuntu 20.04 LTS / Debian 11 以降に対応

# x86_64 環境
wget https://github.com/kazuki0824/recisdb-rs/releases/download/1.2.2/recisdb_1.2.2-1_amd64.deb
sudo apt install ./recisdb_1.2.2-1_amd64.deb
rm ./recisdb_1.2.2-1_amd64.deb

# arm64 環境
wget https://github.com/kazuki0824/recisdb-rs/releases/download/1.2.2/recisdb_1.2.2-1_arm64.deb
sudo apt install ./recisdb_1.2.2-1_arm64.deb
rm ./recisdb_1.2.2-1_arm64.deb

[!NOTE]
アンインストールは sudo apt remove recisdb で行えます。

ISDBScanner 自体は Python スクリプトですが、Python 3.11 がインストールされていない環境でも動かせるよう、PyInstaller でシングルバイナリ化した実行ファイルを公開しています。
下記は ISDBScanner v1.2.0 時点でのインストール手順です。

# x86_64 環境
sudo wget https://github.com/tsukumijima/ISDBScanner/releases/download/v1.2.0/isdb-scanner -O /usr/local/bin/isdb-scanner
sudo chmod +x /usr/local/bin/isdb-scanner

# arm64 環境
sudo wget https://github.com/tsukumijima/ISDBScanner/releases/download/v1.2.0/isdb-scanner-arm -O /usr/local/bin/isdb-scanner
sudo chmod +x /usr/local/bin/isdb-scanner

使い方

Screenshot

ISDBScanner は、引数で指定されたディレクトリ (デフォルト: ./scanned/) 以下に複数のファイルを出力します。
出力される各ファイルのフォーマットは 対応出力フォーマット を参照してください。

[!TIP] ISDBScanner v1.2.0 以降では、--lnb オプションを指定すると、衛星放送受信時にチューナーからアンテナに給電できます(動作未確認)。
--lnb 11v--lnb 15v の両方を指定できますが、px4_drv 対応チューナーには --lnb 15v のみ指定できます。
明示的に LNB 給電を無効化するには、--lnb low を指定します。何も指定されなかったときは LNB 給電を行いません。

PC に接続されている利用可能なチューナーのリストを表示

Screenshot

isdb-scanner --list-tuners と実行すると、PC に接続されている、利用可能なチューナーのリストが表示されます。
チューナーが現在使用中の場合、チューナー情報の横に (Busy) と表示されます。

PC に接続したはずのチューナーが認識されていない場合は、チューナードライバのインストール・ロード状態や、チューナーとの物理的な接続状況を確認してみてください。

[!NOTE]
チューナーは chardev 版デバイスが先に認識され、DVB 版デバイスは後に認識されます。
chardev 版デバイスと DVB 版デバイスが同時に接続されている場合、chardev 版デバイスの方を優先してチャンネルスキャンに使用します。

チャンネルスキャンを実行

地上波・BS・CS すべてのチャンネルをスキャンする際は、isdb-scanner と実行してください。
出力先ディレクトリを指定しない場合は ./scanned/ に出力されます。

地上波と BS の無料放送のみをスキャン結果に含めたい場合は、isdb-scanner --exclude-pay-tv と実行してください。

<img align="center" width="49%" src="https://github.com/tsukumijima/ISDBScanner/assets/39271166/d54dd1c9-0ad8-40a0-9678-60f5a1ea8fc6"> <img align="center" width="49%" src="https://github.com/tsukumijima/ISDBScanner/assets/39271166/59368ddb-38b4-40fe-9c7f-7aee39828d13"> <br><br>

チャンネルスキャン中は、検出されたトランスポートストリーム / チャンネル (サービス) のリストとスキャンの進捗状況が、リアルタイムでグラフィカルに表示されます。
チャンネルスキャンに使おうとしたチューナーが現在使用中の際は、自動的に空いているチューナーを選択してスキャンを行います。
もし地上波で特定のチャンネルが受信できていない場合は、停波中でないかや受信状態などを確認してみてください。

なお、チャンネルスキャンには地デジ・BS・CS のフルスキャンを行う場合で 6 分程度、地デジ・BS の無料放送のみをスキャンする場合で 5 分半程度かかります。
コマンドを実行した後は終わるまで放置しておくのがおすすめです。

[!IMPORTANT]
地上波で複数の中継局の電波を受信できる地域にお住まいの場合、同一のチャンネルが重複して検出されることがあります。
この場合、ISDBScanner は同一のチャンネルを放送している各物理チャンネルごとに信号レベルを計測し、最も受信状態の良い物理チャンネルのみを選択します。動作確認はできていないけどおそらく動くはず…?

[!NOTE]
出力される Mirakurun / mirakc のチューナー設定ファイルには、現在 PC に接続中のチューナーのみが記載されます。
接続しているはずのチューナーが記載されない (ISDBScanner で認識されていない) 場合は、カーネルドライバのロード状態や、物理的なチューナーの接続状態を確認してみてください。

注意事項

License

MIT License