tetsu31415.log

androidなどのことを書き綴っていこうと思います。

DD Max M4 で Linux 録画環境構築 (地デジ/BS/CS/CATV)

以前に 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_ をつけています。

コマンドの最後の引数のチャンネル名は地域に合わせて適宜変更してください。

  • ISDB-Tの受信テスト
$ dvbv5-zap -a 0 -c dvbv5_channels_dd.conf -r -P 25
  • ISDB-Sの受信テスト
$ dvbv5-zap -a 0 -c dvbv5_channels_dd.conf -r -P CS22
  • ISDB-Cの受信テスト
$ 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年半ほど運用していますが特に大きな問題は発生していません。
参考になりましたら幸いです。