RSS

PCからテレビを見る環境 2025

普段アニメを見るときはdアニメストアやAnimeFestaを使っているが、ときどきテレビの放送をリアルタイムに見たいときがある。 テレビを買えば済む話だが、アニメを見るときはSNSに感想を書きながらなことが多いのでPCで直接テレビを見たい。

これは普通に可能で、「パソコンでテレビを見る」とかでWeb検索してみると情報を得られる。今ならLLMに聞いてみてもいいかもしれない。 方法は色々あるが、TVチューナーでテレビ放送を取り込んで、B-CASカードをカードリーダー経由で読み込ませスクランブルを解除し、何らかのソフトウェアで再生可能な動画を取得する方法があり、今回はそれをメインに見ていく。

TVサーバー構築記録

ちょうど昔買ったPT3(TVチューナー)と2017年に組んだPCのケースが余っていたのでそれを使ってTV視聴用サーバーを作ることにした。 以下のような構成となる。

この構成のポイントは、N100DC-ITXで省電力かつCPUファンも電源ユニットも必要ないコンパクトなPCにできていること。


ケースにN100DC-ITXを入れたときの写真。CPUファンと電源ユニットがないのでスカスカ。

また、映像を取り出すソフトウェアとしてrecisdbを使っている。 recisdbにはB-CASカードのスクランブル解除に必要なライブラリも含まれていてかつ、インストール手順が簡単なので良さげだった。

recisdbから取り出したテレビの映像をLAN内のメインPCから視聴するために、mirakcも導入した。 これはMirakurunというソフトウェアと同等の機能を持ちながらリソース使用量を抑えたもので、別にMirakurunでも良かったのだが新しいものを使うと面白そうなので採用した。

このTVサーバーのOSにはArch Linuxを導入したが、これは趣味で特段理由はない。 recisdbとmirakcはDockerコンテナで動かすので、ホストのOSはUbuntuでもArchでも大して変わりはないはずだ。

recisdbとmirakcが両方入ったちょうどいいDocker Imageは見当たらなかったのでmirakcのイメージをベースとして recisdbが入ったものを作った。pcscd を起動しないとB-CASカードの読み取りができないのでそこだけ注意点だった。

# syntax=docker/dockerfile:1.4.1
FROM mirakc/mirakc:3.4.7-debian
ARG ARCH=amd64
ENV DEBIAN_FRONTEND=noninteractive
RUN <<EOT
apt-get update
apt-get install -y ca-certificates pcscd pcsc-tools usbutils
curl -sL https://github.com/kazuki0824/recisdb-rs/releases/download/1.2.3/recisdb_1.2.3-1_${ARCH}.deb -o recisdb.deb
apt install -y ./recisdb.deb
rm ./recisdb.deb
apt-get clean
rm -rf /var/lib/apt/lists/*
EOT
ENTRYPOINT pcscd && mirakc

mirakcの設定ファイル config.yaml は以下の通り。 深夜アニメだけ見れたらいいかとチャンネルはTOKYO MX, TBS, テレビ朝日だけになった。 PT3のデバイスファイルは /dev/dvb/adapter[1-4] のようで、1,3 が地上波、2,4 がBS/CSのようだ。

# config.yaml
epg:
  cache-dir: /var/lib/mirakc/epg

server:
  addrs:
    - http: 0.0.0.0:40772

channels:
  - name: TOKYO MX
    type: GR
    channel: T20
  - name: TBS
    type: GR
    channel: T22
  - name: TV Asahi
    type: GR
    channel: T24

tuners:
  - name: 'GR-1'
    types: [GR]
    command: recisdb tune --exit-on-card-error --device /dev/dvb/adapter1/frontend0 --channel {{{channel}}} -

以上のDockerfileとconfig.yamlと同じ場所に compose.yaml を作り、Docker Compose でmirakcを起動する。 カードリーダーへのアクセスのため /dev/bus をコンテナ内に共有し、PT3へのアクセスのため /dev/dvb を同様に共有している。

# compose.yaml
services:
  mirakc:
    build: .
    restart: always
    devices:
      - /dev/dvb
      - /dev/bus
    ports:
      - 40772:40772
    volumes:
      - mirakc-epg:/var/lib/mirakc/epg
      - ./config.yaml:/etc/mirakc/config.yml:ro
    environment:
      TZ: Asia/Tokyo
      RUST_LOG: info

volumes:
  mirakc-epg:
    name: mirakc_epg
    driver: local
.
├── compose.yaml
├── config.yaml
└── Dockerfile

docker compose up -d

これで同じLAN内からであれば https://<TV ServerのIP>:40772 でmirakcにアクセスできる。 IPアドレス直接だと覚えづらいので、mDNSで tv.local という名前をつけている。

> curl -s http://tv.local:40772/api/version | jq
{
  "current": "3.4.7",
  "latest": "3.4.7"
}

たとえばTOKYO MX(T20)の映像データを取得するなら次のように

curl -s http://tv.local:40772/api/channels/GR/T20/stream --output -

すると生の映像バイナリが流れ込んでくる!


ターミナルに直接バイナリを流しても解読不能だが、何かがすごい勢いで流れてくるのは感じられる

あとはMirakurunまたはmirakcからの映像を表示できるソフトウェアに渡せばよい。

VLC PlayerTVTestEPGStationMirakTestKonomiTVMeruru など多くの視聴ソフトがあるので好みで選ぶ。私はメインPCがmacOSなのでMeruruを使っている。

そのうち録画もできたらいいなとは思いつつ、直近ではリアルタイムで放送を見ることしかしてない(後から見る場合は配信サービスを使う)ので、後の宿題としている。

なぜこんな手間をかけてまで…?

ここまで書いてて自分でも思ったが、手間がものすごくかかる上に複雑すぎる。 アニメを見ることが目的であれば、素直にテレビを買うか多くの映像配信サービスに課金するほうがはるかに楽だろう。 ではなぜ、ここまでしてチューナーから直接映像を取り出す環境を構築するのか?

一つはこのブログ頻出の「持続可能なインターネット計画」と同じ理由だ。 手元に録画した映像データを保持しておけば配信サービスなどのラインナップから消えることに怯える必要もなくなる。 SNSも、データの保管先も、アニメの視聴方法も複数持っておくに越したことはない!

二つ目は、こう色々な物を組み合わせて俺の最強TV視聴環境を構築するぞ! という行為そのものがオタク(マニア?)らしくて面白いということだ。 たとえばMirakurun, mirakc, recisdb, PT3などの単語を織り交ぜて少しWeb検索するだけで、以下のようにテレビ視聴サーバーの構築記事がたくさん出てくる。

どれもテレビの電波をチューナーで取り込み映像データとして取り出して視聴したり録画している点は共通だが、 使っているPCのパーツやOS、使っているソフトウェア……どの記事も少しずつ違っていて、録画や録画データの管理方法まで書いてある記事もあって大変おもしろい。 こうやって複雑な物事に対して皆で知識を共有し合ったり、自慢したりしてDTVコミュニティ(?)が形成されているのは自分が求めるインターネット像に近く素晴らしいなと思った。 思ったので、この長い記事を最後まで書き切ろうと思えたわけでもある。