CATVデジタルチューナーT230を使う

 ケーブルテレビはVHFローバンド1~3ch(93~105MHz)、ミッドバンドC13~C22ch(111~167MHz)、VHFハイバンド4~12ch(173~219MHz)、スーパーハイバンドC23~C63ch(225~465MHz)、UHFローバンド13~34ch(473~599MHz)、UHFハイバンド35~62ch(605~767MHz)の93~767MHzで配信されている。
 地デジはケーブルテレビで配信している周波数帯で配信されているので、チャンネルが異なる場合はあるけれど、ケーブルテレビの地デジ再配信がパススルー方式の場合は、ISDB-Tに対応した地デジチューナーで受信できるが、トランスモジュレーション方式の場合は、ISDB-Cに対応したCATVデジタルチューナーでなければ受信できない。
 BSデジタルはそもそもケーブルテレビで配信している周波数帯と異なるので、パススルー方式は使えない上、パススルー方式(17Mbps)だとBSデジタル(24Mbps)がそのまま配信できないので、ケーブルテレビでBSデジタル再配信を行っている場合は、64QAMで変調したトランスモジュレーション方式(30Mbps)を使っている(より効率の良い256QAMを使う例もある模様)。
 PCで使えてTS抜きが出来るISDB-T対応の地デジチューナー(PLEX PX-S1UD等)のように、ISDB-C対応のCATVデジタルチューナーは見かけないが、海外のCATV規格であるDVB-CのシンボルレートをISDB-Cで使っている値に変更すれば、実質的に使えると知ったのでDVB-C対応CATVデジタルチューナーのMyGica DVB-T2 HDTV USB Stick T230を購入して使ってみた。
 今回はAliExpressのMYGICA Official Storeから2,782円でT230を購入した。台湾からの発送のようで注文から配達まで2週間ちょいかかった。PX-S1UDのようにアンテナ端子部分にPALコネクタ→F型コネクタ変換が付いてないので別途用意する必要がある。

f:id:nyanonon:20200919004022j:plain

LinuxRaspberry Pi OS)で使う

 PX-S1UDと同じようにファームウェアさえ配置しておけば取り付けるだけでDVBデバイスとして使える。ファームウェアはOpenELECのdvb-firmwareに含まれている。取り付けたら、DVBデバイスのアダプタ番号も確認しておく。

sudo apt-get install -y git
git clone https://github.com/OpenELEC/dvb-firmware.git
sudo cp dvb-firmware/firmware/dvb-demod-si2168-b40-01.fw /lib/firmware/
sudo cp dvb-firmware/firmware/dvb-tuner-si2158-a20-01.fw /lib/firmware/
ls /dev/dvb/

 出荷時はSupported delivery systemsがDVB-T(DVBT)に設定されているので、DVB-C(DVBC/ANNEXA)に変更する。この設定は電源が切れても反映されたままの模様。尚、DVBC/ANNEX_Aを指定したチャンネルリストを使う場合は、別に設定を変更しなくても使える模様。DVBデバイスのアダプタ番号が0以外の場合は-aオプションを適切に修正する。

sudo apt-get install -y dvb-tools
dvb-fe-tool -a0
dvb-fe-tool -a0 -d DVBC/ANNEX_A

 チャンネルリストは要はVHF 1~12ch、UHF 13~62ch、CATV C13~C63chの中心周波数をMHz未満切り捨てで、シンボルレート5.274Mbaud、伝送方式をDVBC/ANNEX_Aで指定するだけなので以下のようにスクリプトで作成した。

cat << 'EOT' > mkchconf.sh
#!/bin/sh
for ch in `seq 1 3`; do
	fr=`expr \( $ch - 1 \) \* 6 + 93`
	echo "[${ch}]"
	echo "\\tFREQUENCY = ${fr}000000"
	echo "\\tSYMBOL_RATE = 5274000"
	echo "\\tDELIVERY_SYSTEM = DVBC/ANNEX_A"
	echo ""
done
for ch in `seq 4 12`; do
	if [ $ch -lt 8 ]; then
		fr=`expr \( $ch - 4 \) \* 6 + 173`
	else
		fr=`expr \( $ch - 8 \) \* 6 + 195`
	fi
	echo "[${ch}]"
	echo "\\tFREQUENCY = ${fr}000000"
	echo "\\tSYMBOL_RATE = 5274000"
	echo "\\tDELIVERY_SYSTEM = DVBC/ANNEX_A"
	echo ""
done
for ch in `seq 13 62`; do
	fr=`expr \( $ch - 13 \) \* 6 + 473`
	echo "[${ch}]"
	echo "\\tFREQUENCY = ${fr}000000"
	echo "\\tSYMBOL_RATE = 5274000"
	echo "\\tDELIVERY_SYSTEM = DVBC/ANNEX_A"
	echo ""
done
for ch in `seq 13 22`; do
	if [ $ch -lt 22 ]; then
		fr=`expr \( $ch - 13 \) \* 6 + 111`
	else
		fr=`expr \( $ch - 22 \) \* 6 + 167`
	fi
	echo "[C${ch}]"
	echo "\\tFREQUENCY = ${fr}000000"
	echo "\\tSYMBOL_RATE = 5274000"
	echo "\\tDELIVERY_SYSTEM = DVBC/ANNEX_A"
	echo ""
done
for ch in `seq 23 63`; do
	if [ -n "$1" -a $ch -gt 23 -a $ch -lt 28 ]; then
		fr=`expr \( $ch - 24 \) \* 6 + 233`
	else
		fr=`expr \( $ch - 23 \) \* 6 + 225`
	fi
	echo "[C${ch}]"
	echo "\\tFREQUENCY = ${fr}000000"
	echo "\\tSYMBOL_RATE = 5274000"
	echo "\\tDELIVERY_SYSTEM = DVBC/ANNEX_A"
	echo ""
done
EOT
chmod +x mkchconf.sh
./mkchconf.sh > channels.conf
sudo mkdir /usr/local/etc/t230
sudo cp channels.conf /usr/local/etc/t230/

 作成したチャンネルリストをイニシャルファイルとして指定して、チャンネルスキャンを行うと、カレントディレクトリにスキャン結果のチャンネルリストのdvb_channel.confが作成される。DVBデバイスのアダプタ番号が0以外の場合は-aオプションを適切に修正する。

dvbv5-scan -C JP -a 0 -N /usr/local/etc/dvbconf/dvbv5_channels_t230_dvbc.conf

 スキャン結果のチャンネルリストに通常と異なるC24~C27の周波数が含まれているかを確認する。

grep 'FREQUENCY = 233000000' dvb_channel.conf
grep 'FREQUENCY = 239000000' dvb_channel.conf
grep 'FREQUENCY = 245000000' dvb_channel.conf
grep 'FREQUENCY = 251000000' dvb_channel.conf

 含まれていたら、先程のスクリプトに適当な引数(-c)を指定して通常と異なるC24~C27の周波数を含むチャンネルリストを再度作成する(J:COM神戸など)。

./mkchconf.sh -c > channels.conf
sudo cp channels.conf /usr/local/etc/t230/

 Mirakurunのチャンネル設定を作成するために自前でチャンネルスキャンを行う。まずは、1~62、C13~C63を4秒ずつ録画する。

cat << 'EOT' > catvrec.sh
#!/bin/sh
for ch in `seq 1 62`; do
	dvbv5-zap -C JP -a 0 -c /usr/local/etc/t230/channels.conf -r -P ${ch} -t 4 -o ${ch}.ts
done
for ch in `seq 13 63`; do
	dvbv5-zap -C JP -a 0 -c /usr/local/etc/t230/channels.conf -r -P C${ch} -t 4 -o C${ch}.ts
done
EOT
chmod +x catvrec.sh
./catvrec.sh

 4秒ずつ録画したTSファイルからチャンネル名などを抽出して出力する。TSファイルからチャンネル名を抽出するために自作プログラムのtschputを使っている。

sudo apt-get install -y gcc nkf
wget http://www.areanine.gr.jp/~nyano/archives/nikki/tschput.c
gcc tschput.c -o tschput
cat << 'EOT' > chlist.sh
#!/bin/sh
for ch in `seq 1 62`; do
	if [ -f ${ch}.ts ]; then
		./tschput ${ch}.ts | nkf --ic=CP932 | sed -e "s/^ */${ch}\t/;s/  */\t/g"
	fi
done
for ch in `seq 13 63`; do
	if [ -f C${ch}.ts ]; then
		./tschput C${ch}.ts | nkf --ic=CP932 | sed -e "s/^ */C${ch}\t/;s/  */\t/g"
	fi
done
EOT
chmod +x chlist.sh
./chlist.sh > channels.txt

 チャンネル名などを抽出して出力したテキストファイルを元にMirakurunのチャンネル設定ファイルを作成する。地デジやBSデジタルの再配信は別にしたいけれど、他のチューナーとの併用も考えて放送波種別はとりあえずSKYにしている。

cat << 'EOT' > mkchyml.sh
#!/bin/sh
lch=""
while read ch onid tsid sid scramble type channel; do
        if [ ! "$ch" = "$lch" ]; then
                echo "- name: $channel"
                echo "  type: SKY"
                echo "  channel: '${ch}'"
                echo ""
        fi
        lch="$ch"
done
EOT
chmod +x mkchyml.sh
./mkchyml.sh < channels.txt > channels.yml
test ! -f /usr/local/etc/mirakurun/channels.yml.orig && sudo cp /usr/local/etc/mirakurun/channels.yml /usr/local/etc/mirakurun/channels.yml.orig
sudo cp channels.yml /usr/local/etc/mirakurun/channels.yml

 Mirakurunのチューナー設定ファイルを作成する。

cat << EOT > tuners.yml
- name: T230
  types:
    - SKY
  command: dvbv5-zap -C JP -a 0 -c /usr/local/etc/t230/channels.conf -r -P <channel>
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b25-stream-test
EOT
test ! -f /usr/local/etc/mirakurun/tuners.yml.orig && sudo cp /usr/local/etc/mirakurun/tuners.yml /usr/local/etc/mirakurun/tuners.yml.orig
sudo cp tuners.yml /usr/local/etc/mirakurun/tuners.yml

これでMirakurunを再起動すれば、以降はEPGStationBonDriver_Mirakurunを使ってTVTest等でも使うことが出来る。

明石ケーブルテレビとJ:COM神戸の配信状況

 明石ケーブルテレビは地デジをパススルーのみで再配信しており、トラモジでの再配信は行っていない。BSはトラモジで再配信しており、WOWOWも含まれているので契約しているB-CASカードがあれば視聴できる。尚、BS12 トゥエルビは含まれていない。
 J:COM 神戸は地デジをパススルーとトラモジで再配信しており、エリア外のテレビ大阪と、独自チャンネルのJ:COMテレビ、J:COMチャンネルが含まれている。BSはトラモジで再配信しており、WOWOWも含まれているので契約しているB-CASカードがあれば視聴できる。尚、BS12 トゥエルビは含まれておらず、CSで放送されている。CSは契約しているC-CASカードが必要になるが、ショップチャンネルQVC、ジャパネットchDXは4Kチャンネルもすべてノンスクランブルで放送されている。
 今回は集合住宅のアンテナが明石ケーブルテレビになっていて契約していない環境と、J:COM神戸を契約している環境でホームターミナルを使わずに、T230を使って地デジ、BS、CSが受信できることを確認した。