PT2 + Ubuntu 26.04 + Mirakurun で地デジ録画サーバーを構築した

長年使っていた Windows 10 ベースの録画サーバーを Ubuntu 26.04 LTS(Linux)へ移行しました。チューナーは EARTH SOFT PT2(PCI 接続)、エンコードサーバーには Amatsukaze を引き続き使用しています。移行作業で詰まった点や解決策をまとめます。

📌 本記事の到達点: 地デジ 8チャンネルから 31 サービスの EPG 検出まで完了。
実録画には B-CAS カード設定が別途必要です(次回記事予定)。

システム構成

  • 録画サーバー(新): Ubuntu 26.04 LTS、PT2×2枚、Mirakurun 4.1.2(Docker)
  • エンコードサーバー: Windows 10、Amatsukaze + VCEEncC(Radeon RX 570)
  • 録画サーバーのストレージ: 465GB×2 を mdadm で RAID1 構成(OS領域)
  • PT2 ドライバー: カーネル組み込みの earth_pt1(インストール不要)

Phase 1: Amatsukazeサーバーの設定移行

エンコードサーバーは別の PC に移行しました。Amatsukaze の設定は以下を手動でコピーしました。

  • カスタムエンコードプロファイル 7 個
  • 局ロゴファイル 33 個
  • SCRename スクリプト一式(しょぼいカレンダー連携)

VCEEncC のパスや出力先フォルダ(NAS マウント)などのパス設定を新環境に合わせて修正しました。Amatsukaze 自体はポータブルに動くので、フォルダをコピーして設定ファイルを書き換えるだけで移行できます。

Phase 2: 録画サーバーの Linux 化

Ubuntu 26.04 インストールと RAID1 構成

Ubuntu 26.04 LTS を 465GB HDD 2 台で RAID1 を組んでインストールしました。Ubuntu の Subiquity インストーラーでは BIOS(Legacy)ブート + RAID1 の GUI 設定が少し複雑なので、1 台目にインストールした後、手動で mdadm を使って 2 台目を追加する方法で対処しました。

# RAID1 にメンバーを追加(後から)
mdadm --add /dev/md0 /dev/sda2

# GRUB を両ディスクにインストール
grub-install /dev/sda
grub-install /dev/sdb

PT2 ドライバーは Ubuntu 26.04 で標準搭載

Ubuntu 26.04 のカーネル(7.0.0-22-generic)には earth_pt1 ドライバーが標準で組み込まれています。PT2 を差して起動するだけで /dev/dvb/adapter0/dev/dvb/adapter7 が自動的に作成されます。

PT2 × 2 枚を挿した場合の adapter 番号と対応は以下の通りです。

チューナー名adapter 番号種別
PT2-S1(1枚目)adapter0BS/CS(ISDB-S)
PT2-T1(1枚目)adapter1地デジ(ISDB-T)
PT2-S2(1枚目)adapter2BS/CS(ISDB-S)
PT2-T2(1枚目)adapter3地デジ(ISDB-T)
PT2-S3(2枚目)adapter4BS/CS(ISDB-S)
PT2-T3(2枚目)adapter5地デジ(ISDB-T)
PT2-S4(2枚目)adapter6BS/CS(ISDB-S)
PT2-T4(2枚目)adapter7地デジ(ISDB-T)

以前よく使われていた recpt1/dev/pt1video* 形式のキャラクターデバイス向けなので、DVB デバイスとして認識される現在の環境では使えません。DVB スタックに対応した dvbv5-zap を使います。

# dvb-tools のインストール
sudo apt install dvb-tools

Mirakurun を Docker で起動

録画ミドルウェアには Mirakurun を使います。公式の Docker イメージ(chinachu/mirakurun:latest)が便利です。

services:
  mirakurun:
    image: chinachu/mirakurun:latest
    container_name: mirakurun
    privileged: true
    network_mode: host
    devices:
      - /dev/dvb:/dev/dvb
    volumes:
      - /etc/mirakurun:/app-config
      - /etc/mirakurun:/mirakurun-config
      - /var/log/mirakurun:/app-log
    restart: unless-stopped

privileged: true は DVB デバイスへの直接アクセスとチューナー制御に必要です。network_mode: host にしておくと EPGStation など他のコンテナからアクセスしやすくなります。なお Mirakurun は LAN 内専用の前提で設計されているため、外部公開には注意してください。

tuners.yml の設定ポイント

ここが一番詰まったポイントです。dvbDevicePath(DVR デバイスを直接読む方式)は動作しませんでした。

原因を調べると:

  • -r フラグなしの dvbv5-zap は PES フィルターを設定しないため、DVR デバイスから何も読めない
  • -r フラグありだと dvbv5-zap 自身が DVR を読んでしまい、Mirakurun が読める分がなくなる

解決策は -P -o - オプションで全 PID を標準出力に流し、Mirakurun がパイプで受け取る方式です。dvbDevicePath の記述は不要です。

# /etc/mirakurun/tuners.yml

- name: PT2-T1
  types:
    - GR
  command: dvbv5-zap -a 1 -c /mirakurun-config/isdb-t-channels.conf <channel> -P -o - -s

- name: PT2-T2
  types:
    - GR
  command: dvbv5-zap -a 3 -c /mirakurun-config/isdb-t-channels.conf <channel> -P -o - -s

- name: PT2-T3
  types:
    - GR
  command: dvbv5-zap -a 5 -c /mirakurun-config/isdb-t-channels.conf <channel> -P -o - -s

- name: PT2-T4
  types:
    - GR
  command: dvbv5-zap -a 7 -c /mirakurun-config/isdb-t-channels.conf <channel> -P -o - -s

- name: PT2-S1
  types:
    - BS
    - CS
  command: dvbv5-zap -a 0 -c /mirakurun-config/isdb-s-channels.conf <channel> -P -o - -s

- name: PT2-S2
  types:
    - BS
    - CS
  command: dvbv5-zap -a 2 -c /mirakurun-config/isdb-s-channels.conf <channel> -P -o - -s

- name: PT2-S3
  types:
    - BS
    - CS
  command: dvbv5-zap -a 4 -c /mirakurun-config/isdb-s-channels.conf <channel> -P -o - -s

- name: PT2-S4
  types:
    - BS
    - CS
  command: dvbv5-zap -a 6 -c /mirakurun-config/isdb-s-channels.conf <channel> -P -o - -s

<channel> は Mirakurun が channels.yml の値で自動的に置き換えるプレースホルダーです。オプションの意味は以下の通りです。

  • -P: 全 PID をパススルー(MPEG-TS 全体を流す)
  • -o -: 標準出力へ出力
  • -s: ステータス出力を抑制

channels.yml の設定:物理チャンネル番号に注意

最も時間がかかったトラブルがこれです。地デジの受信に使う物理チャンネル番号は、リモコンのチャンネル番号とは全く異なります。また、同じ放送局でも送信所によって物理チャンネルが異なります。

岐阜・名古屋圏(東海広域圏)では 2 系統の送信所があります。

  • 瀬戸デジタルタワー(名古屋親局): 受信強度 30dB 超、安定受信
  • 岐阜上加納山局(岐阜中継局): 受信強度 15~25dB 程度

今回の最大のハマりどころがここでした。最初に設定した channels.yml では NHK総合を ch25(545 MHz)と指定していました。しかし ch25 はこのエリアに電波がなく、全チューナーで「信号 0x00」が続きました。ドライバーやハードウェアの問題を長時間疑い続けましたが、正しい物理チャンネル(ch20 = 515 MHz)に変更したところ即座に受信できました。信号 0x00 が出たらまず物理チャンネル番号を疑ってください。

放送局物理ch(瀬戸タワー)C/N比
NHK Eテレch1335.5 dB
CBCテレビch1834.2 dB
中京テレビch1935.7 dB
NHK総合(名古屋)ch2034.0 dB
東海テレビch2135.1 dB
メ〜テレch2233.6 dB
テレビ愛知ch2334.7 dB
ぎふチャン(岐阜放送)ch3024.8 dB

物理チャンネルは総務省 無線局等情報検索や各放送局の公式サイトで確認できます。なお同じ NHK総合でも岐阜局(上加納山)は ch29(569 MHz)と異なる物理チャンネルが割り当てられています。受信場所によってどちらを向くか変わるので注意してください。

# /etc/mirakurun/channels.yml(東海エリア例)

- name: NHK総合
  type: GR
  channel: "20"   # ← 物理チャンネル番号(リモコン番号ではない)

- name: NHKEテレ
  type: GR
  channel: "13"

- name: CBC
  type: GR
  channel: "18"

- name: 東海テレビ
  type: GR
  channel: "21"

- name: 中京テレビ
  type: GR
  channel: "19"

- name: メ〜テレ
  type: GR
  channel: "22"

- name: テレビ愛知
  type: GR
  channel: "23"

- name: 岐阜放送
  type: GR
  channel: "30"

ISDB-T チャンネル周波数マップファイル

dvbv5-zap に渡すチャンネルファイル(isdb-t-channels.conf)は、dvbv5 形式で ch13 ~ ch62 の周波数を定義します。Chinachu/dvbconf-for-isdb から取得するのが簡単です。

git clone https://github.com/Chinachu/dvbconf-for-isdb.git
sudo cp dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf /etc/mirakurun/isdb-t-channels.conf

チャンネルファイルには全周波数が定義されており、どの物理 ch を受信するかは channels.yml 側で指定します。手動で作成する場合、ch N の周波数は 473142857 + (N − 13) × 6000000 Hz で計算できます(地上 UHF 帯)。

[20]
        DELIVERY_SYSTEM = ISDBT
        FREQUENCY = 515142857
        BANDWIDTH_HZ = 6000000

動作確認

Mirakurun を起動してしばらく待つと自動的にサービスがスキャンされます。API でサービス一覧を取得して確認します。

curl -s http://localhost:40772/api/services | python3 -c "
import json, sys
svcs = json.load(sys.stdin)
print(f'検出サービス数: {len(svcs)}')
for s in svcs[:10]:
    print(f'  {s["id"]} {s["name"]} (ch={s["channel"]["channel"]})')
"

東海エリア 8 チャンネルから 31 サービスが検出されました(ワンセグ含む)。各チャンネルのスキャンは約 2~3 秒で完了します。

ハマりポイントまとめ

  1. recpt1 は使えない: Ubuntu 26.04 の earth_pt1 は DVB デバイス(/dev/dvb/adapter*)を作る。recpt1 は /dev/pt1video*(キャラクターデバイス)専用なので動作しない。
  2. dvbDevicePath 方式は動作しない: tuners.yml に dvbDevicePath だけ書いても DVR が 0 バイトになる。-P -o - でパイプ経由が正解。
  3. 物理チャンネル番号を必ず確認する: 誤った物理チャンネルを指定すると「信号 0x00」になり、ドライバーやハードの問題に見えてしまう。まず dvbv5-zap で単体テストして C/N 比が出る ch を特定する。特に東海エリアは送信所によって同一放送局でも物理 ch が異なる。
  4. Mirakurun の command フィールドに正しいオプションを指定する: dvbDevicePath 単独や -r 併用では動作しないため、-P -o - 付きのコマンドを明示的に設定する必要がある。

今後の作業

  • B-CAS カード設定(録画データの復号に必要)— EPG スキャンは B-CAS なしで可能だが、実際の録画・視聴には decoder: arib-b25-stream-test の設定と B-CAS カードリーダーが必要
  • BS/CS チャンネル設定(BSアンテナ接続後)
  • EPGStation インストール(録画スケジュール管理 UI)
  • Amatsukaze との連携設定(録画後自動エンコード)

EPGStation + Amatsukaze の連携が完成したら、また記事にまとめます。

コメント

タイトルとURLをコピーしました