Mirakurunのチューナー設定(さんぱくん外出 US-3POUTを使う場合)

 さんぱくん外出(US-3POUT)は無改造でLinuxから扱えるが、DVBデバイスとしては使えず、専用の録画コマンドで扱うことになる。

udevルールの作成

 US-3POUTのデバイスファイルを録画コマンドのrecfsusb2nで扱えるように、videoグループの所有としてパーミッションを適切に設定するudevルールを作成した後、再起動して適用する。

echo 'SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0045", MODE="0664", GROUP="video"' | sudo tee /etc/udev/rules.d/91-tuner.rules
sudo reboot

libaribb25のインストール

 録画コマンドのrecfsusb2nでスクランブル解除を行うためのライブラリであるlibaribb25(libarib25では無い)のソースを取得、ビルド、インストールする。ソースの取得やビルドおよび動作に必要なgit、make、gcc、g++、pkg-config、libpcsclite-dev、pcscdは予めインストールしておく。

sudo apt-get install -y git make gcc g++ pkg-config libpcsclite-dev pcscd
git clone https://github.com/epgdatacapbon/libaribb25
cd libaribb25
make
sudo make install
cd ..

recfsusb2nのインストール

 US-3POUTに対応した録画コマンドのrecfsusb2nKTV-FSUSB2等で使う同名のコマンドとは異なるので注意)のソースを取得、CATVチャンネルのC13~C63に対応させるためにutils.c書き換え、BS11のチャンネルの誤りの修正とBS1_0~BS9_2をrecpt1と同じBS01_0~BS09_2となるようにrecfsusb2n.confを書き換えた後、B25=1(スクランブル解除対応)を指定してビルド、インストールを行う。

git clone https://github.com/epgdatacapbon/recfsusb2n
cd recfsusb2n/src
sed -i -e 's/^\t\tc = atoi(ptr);$/\t\tif(ptr[0] != '\''C'\'') {\n\t\t\tc = atoi(ptr);\n\t\t}else{\n\t\t\tc = atoi(ptr + 1);\n\t\t}/' utils.c
sed -i -e 's/^\tif(13 <= c && c <= 62) {$/\tif(ptr[0] != '\''C'\'' \&\& 13 <= c \&\& c <= 62) {/' utils.c
sed -i -e '/^\t}else if(101 <= c && c <= 150) {$/i\\t}else if(ptr[0] == '\''C'\'' && 13 <= c && c <= 21) {\n\t\t//# CATV (13, 14, .., 21)\n\t\targs->freq = (c -  13) *  6000 +  111143;\n\t}else if(ptr[0] == '\''C'\'' && c == 22) {\n\t\t//# CATV (22)\n\t\targs->freq = (c -  22) *  6000 +  167143;\n\t}else if(ptr[0] == '\''C'\'' && 23 <= c && c <= 63) {\n\t\t//# CATV (23, 24, .., 63)\n\t\targs->freq = (c -  23) *  6000 +  225143;' utils.c
sed -i -e '/^BS11_/s/110/111/' recfsusb2n.conf
sed -i -e 's/^BS\([0-9]\)_/BS0\1_/' recfsusb2n.conf
make B25=1
sudo make install
cd ../..

※libaribb25ではなく、libarib25を使う場合は、Makefileとdecoder.hでaribb25とある箇所とarib25に書き換える。

Mirakurunのチューナー設定

 name:でチューナー名を任意に設定し、types:で地デジが受信できるならGR、BSが受信できるならBS、110度CSが受信できるならCSを設定、command:で録画コマンドのrecfsusb2nに--b25オプションでスクランブル解除を指定、最後にチャンネルを指定、続く「-」は録画秒数を無制限にする指定、末尾の「-」は録画先を標準出力にする指定。必要に応じて--b25でスクランブル解除せずに、decoder:でスクランブル解除コマンドを設定しても良い。
 デバイスファイルを--dev /dev/bus/usb/001/002のように直接指定しても良いが、USBデバイスは毎回デバイスファイルの番号が変わる恐れがあるので指定していない。

cat << 'EOT' | sudo tee /usr/local/etc/mirakurun/tuners.yml
- name: US-3POUT-1
  types:
    - BS
    - CS
    - GR
  command: recfsusb2n --b25 <channel> - -
EOT

 スクランブル解除コマンドが必要な場合、libaribb25のb25コマンドを使うシェルスクリプトを作成すると「decoder: arib-b25-stream」のように指定して使うことが出来る。

cat << 'EOT' | sudo tee /usr/local/bin/arib-b25-stream
#!/bin/sh
sh -c cat | b25 -v 0 /dev/stdin /dev/stdout | cat
EOT
sudo chmod +x /usr/local/bin/arib-b25-stream