以前に DD Max M4 を使って Linux で地上波を受信する記事を書きましたが、
BS、CS、CATVも受信できるようになったので構築方法をまとめておきます。
tetsu31415.hatenablog.com
環境
- OS: Arch Linux (6.1.59-1-lts)
- CPU: Intel(R) Core(TM) i3-8100
- チューナー: Digital Devices Max M4
- チューナーサーバ: Mirakurun 3.8.0
受信する放送波
我が家には CATV とフレッツ・テレビの2系統があり、それらを組み合わせて受信しています。
DD Max M4 の真ん中の端子が4チューナー共通の ISDB-T、ISDB-C 用の端子です。
ここに CATV のアンテナ線を接続することで4チューナーで地上波と BS(101ch-222ch) が受信可能になります。
受信(復号)できる BS チャンネルは CATV 事業者によって異なりますが、我が家では101ch-222ch(リモコン番号1-12)が受信可能です。
ISDB-S 用の端子は4チューナ独立して存在していますが、私の使い方ではBS(101ch-222ch以外) や 110° CS は同時に2チャンネルだけで十分なため、2端子だけ接続しています。 4端子すべてに接続すれば4チャンネル同時に受信可能です。
物理配線を減らしつつ主要な BS チャンネルを4チューナーで受信するためにやや複雑な構成になっていますが、構成を簡単にするならば
BS はすべて ISDB-S から受信したほうが良いと思います。
また、 BS がチャンネルによってチューナーが変わる都合上、 Mirakurun 上では CATV 側の BS を「BS」に、フレッツ・テレビ側の BS を「CS」に無理やり割り当てています。
図にまとめると下記のようになります。
ドライバのインストール
公式のドライバ (dddvb) をインストールします。
最新リリースの 0.9.38 は Linux Kernel バージョン 6.1.59 ではうまくビルドできなかったため、 master ブランチの最新コミット (100aa25176391f1a9a9d6a7d341a78f845ea19eb) をビルドしました。
ドライバーのビルド方法は下記の記事を参考にしています。
note.spage.jp
GitHub からソースをクローンします。
$ git clone https://github.com/DigitalDevices/dddvb.git
$ cd dddvb
一度ビルドし、 dkms.conf を作成します。
$ make
$ cat <<'EOF' > dkms.conf
PACKAGE_NAME=dddvb
PACKAGE_VERSION=0.9.37-20231009
AUTOINSTALL="yes"
CHECK_MODULE_VERSION="no"
MAKE="'make' all KVER=${kernelver}"
CLEAN="make clean"
EOF
$ let "module_number=0" || true
$ for file in $(find ./ -type f -name "*.ko"); do
MODULE_LOCATION=$(dirname $file | cut -d\/ -f 2-)
echo "BUILT_MODULE_NAME[$module_number]=\"$(basename $file .ko)\"" >> dkms.conf
echo "BUILT_MODULE_LOCATION[$module_number]=\"$MODULE_LOCATION\"" >> dkms.conf
echo "DEST_MODULE_LOCATION[$module_number]=\"/extramodules/$pkgname\"" >> dkms.conf
let "module_number=${module_number}+1" || true
done
dkms からカーネルバージョンを動的に変更できるように Makefile を置換し、ソースコード一式を /usr/src 配下にコピーします。
master ブランチの最新コミットにはバージョンが付いていないため、日付をつけておくことにします。
$ make clean
$ sed -i -e 's/shell uname -r/KVER/g' Makefile
$ sudo cp -r . /usr/src/dddvb-0.9.37-20231009
DKMSに追加し、インストールする
$ sudo dkms add -m dddvb -v 0.9.37-20231009
$ sudo dkms install -m dddvb -v 0.9.37-20231009
受信テスト
dvbv5-zap コマンドで受信テストを行います。
1チューナーで ISDB-T, ISDB-S, ISDB-C を受信できるようにするために合体させた設定ファイルを作りました。
DVBV5 channel config for DD Max M4 · GitHub
dvbconf-for-isdb レポジトリ内の conf/dvbv5_channels_isdbt.conf と conf/dvbv5_channels_isdbs.conf をマージし、さらに ISDB-C 用の設定を追加しています。
ISDB-T のチャンネル名と区別するため、 ISDB-C はチャンネル名にプレフィックス DVBC_
をつけています。
コマンドの最後の引数のチャンネル名は地域に合わせて適宜変更してください。
$ dvbv5-zap -a 0 -c dvbv5_channels_dd.conf -r -P 25
$ dvbv5-zap -a 0 -c dvbv5_channels_dd.conf -r -P CS22
$ dvbv5-zap -a 0 -c dvbv5_channels_dd.conf -r -P DVBC_C62
Mirakurun の設定
Docker 環境で Mirakurun 環境を構築しました。設定ファイル例の一部を下記に記載します。
tuners.yml
基本的には4チューナー分の設定を書くだけです。
今回 Tuner0 と Tuner1 ではすべての type を受信できますが、 Tuner2 と Tuner3 では CS の受信はできません。
このような場合は、記述する順番によってチューナー不足が発生する場合があります。
チューナーは先頭の空いているものから割り当てられるため、すべて受信できるTuner0とTuner1を後に書いておきます。
もし、 Tuner0 → Tuner1 → Tuner2 → Tuner3 の順で記載した場合、 GR → GR → CS → CS の順で4チャンネル同時に受信しようとすると最初の GR 2つが Tuner0 、 Tuner1 に割り当てられるため、その後 CS が利用可能なチューナーがなくなってしまいます。
- name: DDMAXM4_2
isDisabled: false
types:
- GR
- BS
- SKY
dvbDevicePath: /dev/dvb/adapter2/dvr0
decoder: arib-b25-stream-test
command: dvbv5-zap -a 2 -c /app-config/dvbv5_channels_dd.conf -r -P <channel>
- name: DDMAXM4_3
isDisabled: false
types:
- GR
- BS
- SKY
dvbDevicePath: /dev/dvb/adapter3/dvr0
decoder: arib-b25-stream-test
command: dvbv5-zap -a 3 -c /app-config/dvbv5_channels_dd.conf -r -P <channel>
- name: DDMAXM4_0
isDisabled: false
types:
- GR
- BS
- SKY
- CS
dvbDevicePath: /dev/dvb/adapter0/dvr0
decoder: arib-b25-stream-test
command: dvbv5-zap -a 0 -c /app-config/dvbv5_channels_dd.conf -r -P <channel>
- name: DDMAXM4_1
isDisabled: false
types:
- GR
- BS
- SKY
- CS
dvbDevicePath: /dev/dvb/adapter1/dvr0
decoder: arib-b25-stream-test
command: dvbv5-zap -a 1 -c /app-config/dvbv5_channels_dd.conf -r -P <channel>
channels.yml
チャンネル設定については地域によって異なるため、一例を載せておきます。
- name: 日テレ
type: GR
channel: '25'
isDisabled: false
- name: BS朝日1
type: BS
channel: DVBC_C62
serviceId: 151
tsmfRelTs: 1
- name: QVC
type: CS
channel: CS22
serviceId: 161
注意点として、CATV では TSMF により TS が多重化されていた場合、うまく受信できない場合があります。Mirakurun 3.6.0 以降から tsmfRelTs 設定が追加され、ここで相対ストリーム番号を指定することで正常に受信できるようになります。
私の環境ではBS朝日のみ該当したため、BS朝日のみ tsmfRelTs を設定しています。
TSMF については下記の記事を参考にしてみてください。
akkkix.hatenablog.com
まとめ
Linuxマシンに DD Max M4 を接続し、地上波、BS、CS、CATV を受信する方法についてまとめました。
録画管理には EPGStation を利用し、現在の構成で1年半ほど運用していますが特に大きな問題は発生していません。
参考になりましたら幸いです。