地デジチャンネルの NID (network_id / ネットワーク ID) が同じかどうかで判断できる。
たとえば、TOKYO MX1 と TOKYO MX2 は同じ NID (32391) で放送されている。
また、地デジチャンネルの SID (service_id / サービス ID) をビット演算することでも判断できる。
service_id に 0x0187 を AND 演算すると、ARIB TR-B14 第五分冊 第七編 9.1 で示されている通り、サービス番号以外がビットマスクされるため、service_id からサービス番号だけを抽出できる。
0x0187 はビット単位に直すと 0b0000000110000111 になるので、service_id に対しての AND 演算でビットマスク(1以外のビットを強制的に0に設定)すると、サービス種別とサービス番号だけが取得できる。
ビットマスクした値のサービス種別が 0(テレビ型)でサービス番号が 0(プライマリサービス)であればメインチャンネルと判定できるし、そうでなければサブチャンネルだと言える。
一方、BS は NID (network_id / サービス ID) が 4 で固定されている。
さらに、サブチャンネル扱いではいけないチャンネル(それぞれのチャンネルでまったく別の内容を放送している WOWOW・スターチャンネル・放送大学)もある。
そうなると、NHKBS1 〜 BSフジ までを特別扱いするほかない。
Mirakurun の API は物理チャンネルも取ることができる。 BS の概ねチャンネルごとに別れているように見えるが、実際はスターチャンネル2と3が同じ物理チャンネルに同居しているので無理。
今のところ、KonomiTV ではこのようなコードで判定している。
民放に割り当てられたサービス ID は、上2桁が形式上の事業者番号を示している。
たとえば NHK は 10、BS日テレは 14、BS11 は 21、BS12 は 22 になる。 ただBSデジタルテレビジョン放送に割り当てられているのは 00x ~ 29x までなので、BSスカパー範囲のチャンネルも1事業者1サービスで割り当ててしまうと容易に枠が不足する。