KEIAN の KTV-FSPCIE が手に入ったので、Ubuntu26 環境の Mirakc で利用できるようにしてみる
KTV-FSPCIE は こんなやつ
https://kakaku.com/item/K0000047526/
https://firtel.blogspot.com/2024/12/ktv-fspcie-mxl136.html
放送波の内容を確認する機器です
めっちゃ古い機器なので今さら記事を参照して環境作るような人はいないと思うけど忘備録として
Mirakc は通常PT3などを対象にしているが、 KTV-FSPCIE は recfsusb2n って奴になる
ので、ちょっとMirakcに手を加えて環境構築してみます
recfsusb2n で KTV-FSPCIE を利用できるかを事前に確認しておくこと
→ Ubuntu26でKEIANのKTV-FSPCIEを利用
Dockerインストール
オフィシャル手順:https://docs.docker.com/engine/install/ubuntu/
まずは初期設定(DockerOfficialを追加)
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
Fedora
## 削除
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
## Docker公式追加
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo
## Docker インストール
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
## Docker サービス機動
sudo systemctl enable --now docker
Docker インストール
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker インストール成功(動作)確認
sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Sat 2026-05-09 17:03:35 JST; 1min 16s ago
Invocation: 2bc9b0d91dc9481192ef80925c7593c6
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 8484 (dockerd)
Tasks: 14
Memory: 28.3M (peak: 29.6M)
CPU: 319ms
CGroup: /system.slice/docker.service
└─8484 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
権限の設定(sudo なしで実行可能にする)
今のままだと毎回 sudo をつける必要があるので、現在のユーザーを docker グループに追加して、使いやすくしておく( 設定後に再度ログインし直し必要 )
sudo usermod -aG docker $USER
インストールバージョン確認
ログインしなおした後で
docker version
Client: Docker Engine - Community
Version: 29.4.3
API version: 1.54
Go version: go1.26.2
Git commit: 055a478
Built: Wed May 6 17:07:26 2026
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 29.4.3
API version: 1.54 (minimum version 1.40)
Go version: go1.26.2
Git commit: 56be731
Built: Wed May 6 17:07:26 2026
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v2.2.3
GitCommit: 77c84241c7cbdd9b4eca2591793e3d4f4317c590
runc:
Version: 1.3.5
GitCommit: v1.3.5-0-g488fc13e
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker compose version
Docker Compose version v5.1.3
Mirakc インストール
オフィシャル手順:https://mirakc.github.io/dekiru-mirakc/v3/install/mirakc.html
ディレクトリ準備して設定ファイルを用意
mkdir ~/mirakc
cd ~/mirakc
services:
mirakc:
image: mirakc/mirakc:alpine
container_name: mirakc
init: true
restart: unless-stopped
ports:
- 40772:40772
volumes:
- ./config.yml:/etc/mirakc/config.yml:ro
environment:
TZ: Asia/Tokyo
RUST_LOG: info
server:
addrs:
- http: '0.0.0.0:40772'
Mirakc 起動
docker compose up -d
[+] up 6/6
✔ Image mirakc/mirakc:alpine Pulled 5.6s
✔ Network mirakc_default Created 0.0s
✔ Container mirakc Started 0.5s
起動確認(バージョンが出ればOK)
curl -s http://localhost:40772/api/version
{"current":"3.4.67","latest":"3.4.67"}radmin@u9310:~/mirakc$
mirakc 停止
docker compose down
[+] down 2/2
✔ Container mirakc Removed 0.2s
✔ Network mirakc_default Removed
recfsusb2n 入り Docker イメージ作成
標準? docker-mirakc では recfsusb2n と相性が悪いのかうまく動かないので
docker-mirakc 内のライブラリとバージョンを合わせる形で recfsusb2n をコンパイルして利用できるようにする
※ recfsusb2n は /dev/bus/usb を利用するので追記
services:
mirakc:
build: .
container_name: mirakc
init: true
restart: unless-stopped
ports:
- 40772:40772
devices:
- /dev/bus/usb:/dev/bus/usb
volumes:
- ./config.yml:/etc/mirakc/config.yml:ro
- ./epg:/var/lib/mirakc/epg
environment:
TZ: Asia/Tokyo
RUST_LOG: info
privileged: true
server:
addrs:
- http: '0.0.0.0:40772'
epg:
cache-dir: /var/lib/mirakc/epg
channels:
- name: CH21
type: GR
channel: "21"
- name: CH22
type: GR
channel: "22"
- name: CH23
type: GR
channel: "23"
- name: NHK-G
type: GR
channel: "27"
tuners:
- name: FSUSB2N
types: [GR]
command: >-
/usr/local/bin/recfsusb2n
--b25
{{channel}}
- -
FROM mirakc/mirakc:debian
RUN apt update && apt install -y \
build-essential \
pkg-config \
libpcsclite-dev \
libboost-thread-dev \
libboost-filesystem-dev \
libboost-all-dev \
libboost-system-dev
WORKDIR /build
COPY recfsusb2n ./recfsusb2n
RUN cd recfsusb2n && \
sed -i 's/-lboost_system//g' Makefile && \
sed -i 's/#include <boost\/filesystem\/path.hpp>/#include <boost\/filesystem.hpp>/g' em2874-core.cpp && \
make && \
cp recfsusb2n /usr/local/bin/
# ディレクトリ作成
mkdir -p ~/mirakc/build
mkdir -p ~/mirakc/epg
# recfsusb2n ソース用意
cd ~/mirakc/
git clone https://github.com/stz2012/recfsusb2n
Docker build
必要なパッケージを apt install & コンパイルしてイメージを作成
cd ~/mirakc/
docker compose build --no-cache
[+] Building 200.0s (6/10)
=> [internal] load local bake definitions 0.0s
=> => reading from stdin 540B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 541B 0.0s
=> [internal] load metadata for docker.io/mirakc/mirakc:debian 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> CACHED [1/5] FROM docker.io/mirakc/mirakc:debian@sha256:c79dbc5606de7056b944ff54f4970fe1041bd91a9c169a504db5fede743b21af 0.0s
=> => resolve docker.io/mirakc/mirakc:debian@sha256:c79dbc5606de7056b944ff54f4970fe1041bd91a9c169a504db5fede743b21af 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 4.23kB 0.0s
=> [2/5] RUN apt update && apt install -y build-essential pkg-config libpcsclite-dev libboost-thread-dev libboost-filesystem-dev libboost-all-dev libboost-system-dev 199.8s
=> => # Get:62 http://deb.debian.org/debian trixie/main amd64 libtsan2 amd64 14.2.0-19 [2460 kB]
=> => # Get:63 http://deb.debian.org/debian trixie/main amd64 libubsan1 amd64 14.2.0-19 [1074 kB]
=> => # Get:64 http://deb.debian.org/debian trixie/main amd64 libhwasan0 amd64 14.2.0-19 [1488 kB]
=> => # Get:65 http://deb.debian.org/debian trixie/main amd64 libquadmath0 amd64 14.2.0-19 [145 kB]
=> => # Get:66 http://deb.debian.org/debian trixie/main amd64 libgcc-14-dev amd64 14.2.0-19 [2672 kB]
=> => # Get:67 http://deb.debian.org/debian trixie/main amd64 gcc-14-x86-64-linux-gnu amd64 14.2.0-19 [21.4 MB]
=> [3/5] WORKDIR /build 0.5s
=> [4/5] COPY recfsusb2n ./recfsusb2n 0.1s
=> [5/5] RUN cd recfsusb2n && sed -i 's/-lboost_system//g' Makefile && sed -i 's/#include <boost\/filesystem\/path.hpp>/#include <boost\/filesystem.hpp>/g' em2874-core.cpp && make && cp re 15.3s
=> exporting to image 49.7s
=> => exporting layers 41.6s
=> => exporting manifest sha256:972ded6d6875641d6b434d7417046633077f0fc2d5f397d602962aa0d003c940 0.0s
=> => exporting config sha256:bb9760006091e73abc047ceea0e3fa29baec62ba6f2e09e494731b2f5616865a 0.0s
=> => exporting attestation manifest sha256:417233e652eeef15f0b2b8aecdf689c7a57c14b9db46dfd4d55a42f24697e8c9 0.1s
=> => exporting manifest list sha256:a2098f541181105b1d2eb072ce9c4a55e629ab20a9b5c171f3a527bf02d96300 0.1s
=> => naming to docker.io/library/docker-mirakc-mirakc:latest 0.0s
=> => unpacking to docker.io/library/docker-mirakc-mirakc:latest 7.8s
=> resolving provenance for metadata file 0.0s
[+] build 1/1
✔ Image docker-mirakc-mirakc Built
作成したイメージでDocker起動
# 起動
docker compose up -d
[+] up 2/2
✔ Network docker-mirakc_default Created 0.0s
✔ Container mirakc Started
Docker 内のbash で recfsusb2n コマンド確認
# Docker の中で recfsusb2n が利用できることを確認 (コンパイルはできている)
docker exec -it mirakc bash
root@70a840e24b4a:/build# recfsusb2n/recfsusb2n
usage:
recfsusb2n/recfsusb2n [-v] [--b25] [--sid n1,n2,...] [--wait n] channel recsec destfile
Remarks:
if rectime is '-', records indefinitely.
if destfile is '-', stdout is used for output.
Options:
-v:
--b25: Decrypt using BCAS card
--sid n1,n2,...: Specify SID number or keywords(all,hd,sd1,sd2,sd3,1seg,epg) in CSV format
--wait n: Wait insert before of recording (1=100mSec)
# 録画できるか確認 ( docker 起動直後はチャンネル情報取得などでデバイスが忙しいかもなので数分おいてから実行)
root@70a840e24b4a:/build# recfsusb2n/recfsusb2n 24 10 /tmp/test.ts
recfsusb2n ver. 0.9.2
ISDB-T DTV Tuner FSUSB2N
device: /dev/bus/usb/001/002
pid = 88
done.
Rec time: 11 sec.
# B25 複合もできるか確認
root@70a840e24b4a:/build# recfsusb2n/recfsusb2n --b25 24 10 /tmp/test.ts
recfsusb2n ver. 0.9.2
ISDB-T DTV Tuner FSUSB2N
device: /dev/bus/usb/001/002
pid = 90
B25Decoder initialized.
done.
Rec time: 11 sec.
# docker bash を抜ける
root@70a840e24b4a:/build# exit
Mirakc 動作確認
# ログ確認
docker compose logs -f
mirakc | 2026-05-09T23:30:45.864265+09:00 INFO mirakc_core::config: Loaded config_path="/etc/mirakc/config.yml"
mirakc | 2026-05-09T23:30:45.864617+09:00 INFO mirakc_core::tuner: Loaded tuners tuners.len=1
mirakc | 2026-05-09T23:30:45.864656+09:00 INFO mirakc_core::onair::manager: No on-air program tracker is defined
mirakc | 2026-05-09T23:30:45.864715+09:00 INFO mirakc_core::recording: Recording is disabled
mirakc | 2026-05-09T23:30:45.864735+09:00 INFO mirakc_core::timeshift::manager: Timeshift recording is disabled
mirakc | 2026-05-09T23:30:45.866298+09:00 INFO mirakc_core::web::mount: Use the default folder view template
mirakc | 2026-05-09T23:30:45.867994+09:00 INFO mirakc_core::epg: Loaded services services.len=10
mirakc | 2026-05-09T23:30:45.870157+09:00 INFO mirakc_core::epg: Loaded clocks clocks.len=10
mirakc | 2026-05-09T23:30:45.887576+09:00 INFO mirakc_core::epg: Loaded schedules schedules.len=5
mirakc | 2026-05-09T23:30:45.888251+09:00 INFO mirakc_core::epg::job: Performing... job="scan-services"
mirakc | 2026-05-09T23:30:45.888717+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/21 user.info=Job(epg.scan-services) user.priority=-1 stream.id=0.0.1
mirakc | 2026-05-09T23:30:49.034641+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.0.1
mirakc | 2026-05-09T23:30:49.035196+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/22 user.info=Job(epg.scan-services) user.priority=-1 stream.id=0.1.1
mirakc | 2026-05-09T23:30:53.583631+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.1.1
mirakc | 2026-05-09T23:30:53.584036+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/23 user.info=Job(epg.scan-services) user.priority=-1 stream.id=0.2.1
mirakc | 2026-05-09T23:30:58.135901+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.2.1
mirakc | 2026-05-09T23:30:58.137033+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/27 user.info=Job(epg.scan-services) user.priority=-1 stream.id=0.3.1
mirakc | 2026-05-09T23:31:02.813913+09:00 INFO mirakc_core::epg::job: Done job="scan-services" elapsed=16s 925ms 649us 133ns
mirakc | 2026-05-09T23:31:02.814047+09:00 INFO mirakc_core::epg::job: Scheduled job="scan-services" datetime="2026-05-10T08:01:00+09:00"
mirakc | 2026-05-09T23:31:02.814126+09:00 INFO mirakc_core::epg::job: Performing... job="sync-clocks"
mirakc | 2026-05-09T23:31:02.818426+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.3.1
mirakc | 2026-05-09T23:31:02.819620+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/21 user.info=Job(epg.sync-clocks) user.priority=-1 stream.id=0.4.1
mirakc | 2026-05-09T23:31:02.825269+09:00 INFO mirakc_core::epg: Saved services services.len=10
mirakc | 2026-05-09T23:31:09.994157+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.4.1
mirakc | 2026-05-09T23:31:09.994588+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/22 user.info=Job(epg.sync-clocks) user.priority=-1 stream.id=0.5.1
mirakc | 2026-05-09T23:31:15.284761+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.5.1
mirakc | 2026-05-09T23:31:15.285197+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/23 user.info=Job(epg.sync-clocks) user.priority=-1 stream.id=0.6.1
mirakc | 2026-05-09T23:31:21.128090+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.6.1
mirakc | 2026-05-09T23:31:21.128489+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/27 user.info=Job(epg.sync-clocks) user.priority=-1 stream.id=0.7.1
mirakc | 2026-05-09T23:31:28.683286+09:00 INFO mirakc_core::epg::job: Done job="sync-clocks" elapsed=25s 869ms 142us 251ns
mirakc | 2026-05-09T23:31:28.683319+09:00 INFO mirakc_core::epg::job: Scheduled job="sync-clocks" datetime="2026-05-10T08:11:00+09:00"
mirakc | 2026-05-09T23:31:28.683346+09:00 INFO mirakc_core::epg::job: Performing... job="update-schedules"
mirakc | 2026-05-09T23:31:28.685768+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.7.1
mirakc | 2026-05-09T23:31:28.691538+09:00 INFO mirakc_core::epg: Saved clocks clocks.len=10
mirakc | 2026-05-09T23:31:28.691944+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/23 user.info=Job(epg.update-schedules) user.priority=-1 stream.id=0.8.1
mirakc | 2026-05-09T23:32:31.312943+09:00 INFO mirakc_core::epg: Collected programs service.id=3274201073 programs.len=277
mirakc | 2026-05-09T23:32:31.313539+09:00 INFO mirakc_core::epg: Collected programs service.id=3274201072 programs.len=277
mirakc | 2026-05-09T23:32:31.313689+09:00 INFO mirakc_core::epg: Collected programs service.id=3274201074 programs.len=277
mirakc | 2026-05-09T23:32:31.315935+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.8.1
mirakc | 2026-05-09T23:32:31.316313+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/22 user.info=Job(epg.update-schedules) user.priority=-1 stream.id=0.9.1
mirakc | 2026-05-09T23:33:30.749923+09:00 INFO mirakc_core::epg: Collected programs service.id=3273901048 programs.len=169
mirakc | 2026-05-09T23:33:30.749999+09:00 INFO mirakc_core::epg: Collected programs service.id=3273901049 programs.len=169
mirakc | 2026-05-09T23:33:30.752478+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.9.1
mirakc | 2026-05-09T23:33:30.752872+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/27 user.info=Job(epg.update-schedules) user.priority=-1 stream.id=0.10.1
mirakc | 2026-05-09T23:34:34.124731+09:00 INFO mirakc_core::epg: Collected programs service.id=3273601024 programs.len=419
mirakc | 2026-05-09T23:34:34.124981+09:00 INFO mirakc_core::epg: Collected programs service.id=3273601025 programs.len=412
mirakc | 2026-05-09T23:34:34.126842+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.10.1
mirakc | 2026-05-09T23:34:34.127227+09:00 INFO mirakc_core::tuner: Streaming started channel=GR/21 user.info=Job(epg.update-schedules) user.priority=-1 stream.id=0.11.1
mirakc | 2026-05-09T23:41:54.699557+09:00 INFO mirakc_core::epg::job: Done job="update-schedules" elapsed=10m 26s 16ms 204us 853ns
mirakc | 2026-05-09T23:41:54.699589+09:00 INFO mirakc_core::epg::job: Scheduled job="update-schedules" datetime="2026-05-10T08:21:00+09:00"
mirakc | 2026-05-09T23:41:54.699665+09:00 INFO mirakc_core::epg: Collected programs service.id=3274001057 programs.len=181
mirakc | 2026-05-09T23:41:54.699737+09:00 INFO mirakc_core::epg: Collected programs service.id=3274001058 programs.len=181
mirakc | 2026-05-09T23:41:54.699932+09:00 INFO mirakc_core::epg: Collected programs service.id=3274001056 programs.len=124
mirakc | 2026-05-09T23:41:54.702634+09:00 INFO mirakc_core::tuner: Streaming stopped stream.id=0.11.1
mirakc | 2026-05-09T23:41:54.717298+09:00 INFO mirakc_core::epg: Saved schedules schedules.len=10
# サービス確認
curl http://localhost:40772/api/services
[{"id":3274001056,"serviceId":1056,"networkId":32740,"type":1,"logoId":1,"remoteControlKeyId":8,"name":"フジテレビ","channel":{"type":"GR","channel":"21"},"hasLogoData":false},{"id":3274001057,"serviceId":1057,"networkId":32740,"type":1,"logoId":1,"remoteControlKeyId":8,"name":"フジテレビ","channel":{"type":"GR","channel":"21"},"hasLogoData":false},{"id":3274001058,"serviceId":1058,"networkId":32740,"type":1,"logoId":1,"remoteControlKeyId":8,"name":"フジテレビ","channel":{"type":"GR","channel":"21"},"hasLogoData":false},{"id":3273901048,"serviceId":1048,"networkId":32739,"type":1,"logoId":140,"remoteControlKeyId":6,"name":"TBS1","channel":{"type":"GR","channel":"22"},"hasLogoData":false},{"id":3273901049,"serviceId":1049,"networkId":32739,"type":1,"logoId":140,"remoteControlKeyId":6,"name":"TBS2","channel":{"type":"GR","channel":"22"},"hasLogoData":false},{"id":3274201072,"serviceId":1072,"networkId":32742,"type":1,"logoId":3,"remoteControlKeyId":7,"name":"テレ東","channel":{"type":"GR","channel":"23"},"hasLogoData":false},{"id":3274201073,"serviceId":1073,"networkId":32742,"type":1,"logoId":3,"remoteControlKeyId":7,"name":"テレ東2","channel":{"type":"GR","channel":"23"},"hasLogoData":false},{"id":3274201074,"serviceId":1074,"networkId":32742,"type":1,"logoId":3,"remoteControlKeyId":7,"name":"テレ東3","channel":{"type":"GR","channel":"23"},"hasLogoData":false},{"id":3273601024,"serviceId":1024,"networkId":32736,"type":1,"logoId":0,"remoteControlKeyId":1,"name":"NHK総合1・東京","channel":{"type":"GR","channel":"27"},"hasLogoData":false},{"id":3273601025,"serviceId":1025,"networkId":32736,"type":1,"logoId":0,"remoteControlKeyId":1,"name":"NHK総合2・東京","channel":{"type":"GR","channel":"27"},"hasLogoData":false}]
# サービス確認(整形)
curl http://localhost:40772/api/services | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1811 100 1811 0 0 1.32M 0 0
[
{
"id": 3274001056,
"serviceId": 1056,
"networkId": 32740,
"type": 1,
"logoId": 1,
"remoteControlKeyId": 8,
"name": "フジテレビ",
"channel": {
"type": "GR",
"channel": "21"
},
"hasLogoData": false
},
{
"id": 3274001057,
"serviceId": 1057,
"networkId": 32740,
"type": 1,
"logoId": 1,
"remoteControlKeyId": 8,
"name": "フジテレビ",
"channel": {
"type": "GR",
"channel": "21"
},
"hasLogoData": false
},
{
"id": 3274001058,
"serviceId": 1058,
"networkId": 32740,
"type": 1,
"logoId": 1,
"remoteControlKeyId": 8,
"name": "フジテレビ",
"channel": {
"type": "GR",
"channel": "21"
},
"hasLogoData": false
},
{
"id": 3273901048,
"serviceId": 1048,
"networkId": 32739,
"type": 1,
"logoId": 140,
"remoteControlKeyId": 6,
"name": "TBS1",
"channel": {
"type": "GR",
"channel": "22"
},
"hasLogoData": false
},
{
"id": 3273901049,
"serviceId": 1049,
"networkId": 32739,
"type": 1,
"logoId": 140,
"remoteControlKeyId": 6,
"name": "TBS2",
"channel": {
"type": "GR",
"channel": "22"
},
"hasLogoData": false
},
{
"id": 3274201072,
"serviceId": 1072,
"networkId": 32742,
"type": 1,
"logoId": 3,
"remoteControlKeyId": 7,
"name": "テレ東",
"channel": {
"type": "GR",
"channel": "23"
},
"hasLogoData": false
},
{
"id": 3274201073,
"serviceId": 1073,
"networkId": 32742,
"type": 1,
"logoId": 3,
"remoteControlKeyId": 7,
"name": "テレ東2",
"channel": {
"type": "GR",
"channel": "23"
},
"hasLogoData": false
},
{
"id": 3274201074,
"serviceId": 1074,
"networkId": 32742,
"type": 1,
"logoId": 3,
"remoteControlKeyId": 7,
"name": "テレ東3",
"channel": {
"type": "GR",
"channel": "23"
},
"hasLogoData": false
},
{
"id": 3273601024,
"serviceId": 1024,
"networkId": 32736,
"type": 1,
"logoId": 0,
"remoteControlKeyId": 1,
"name": "NHK総合1・東京",
"channel": {
"type": "GR",
"channel": "27"
},
"hasLogoData": false
},
{
"id": 3273601025,
"serviceId": 1025,
"networkId": 32736,
"type": 1,
"logoId": 0,
"remoteControlKeyId": 1,
"name": "NHK総合2・東京",
"channel": {
"type": "GR",
"channel": "27"
},
"hasLogoData": false
}
]
# 番組表確認( 整形:抜粋 )
curl http://localhost:40772/api/programs | jq '.[0]'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1.73M 100 1.73M 0 0 43.56M 0 0
{
"id": 327400105655292,
"eventId": 55292,
"serviceId": 1056,
"networkId": 32740,
"startAt": 1778337600000,
"duration": 3300000,
"isFree": true,
"name": "<土ドラ>時光代理人【写真のない男】 #05[字]",
"description": "ワイドショーを賑わす不動産王の遺産相続トラブル。そのニュースをテレビで見ていたトキ(佐藤大樹)とヒカル(本郷奏多)のもとに、なんと当事者たちがやってきて…",
"extended": {
"番組内容": "不動産王・田淵清三(西岡德馬)の遺産トラブルが世間を賑わせていた。全財産を内縁の妻とされる香山優里(松井愛莉)に遺すという遺言書が騒動の発端。そのニュースをテレビで見ていたトキ(佐藤大樹)とヒカル(本郷奏多)のもとに、清三の秘書・槙野(松澤一之)が清三の息子たちを連れてやってくる。「死の真相を探ってほしい」「あの女に殺されたに決まっている」手掛かりを探すため写真がないか屋敷を訪れる",
"番組内容2": "トキとヒカルだったが、生前の清三は大の写真嫌いだった。写真がなければダイブすることもできない。困った2人のもとに、優里が愁いを帯びた表情で近づいてきて…。",
"出演者": "佐藤大樹 \n本郷奏多 \n\n林芽亜里\n ・ \n風間俊介 \n\n【5話ゲスト】\n西岡德馬 \n松井愛莉 \n\n松澤一之 \n鳥居みゆき \n日向丈 \n伊藤修子",
"スタッフ": "【原作】\n「時光代理人」(bilibili) \n脚本・監督 リ・ハオリン \n\n【シリーズ構成】\n冨岡淳広 \n\n【脚本】\n小鶴乃哩子 \n\n【音楽】\n斎木達彦 \n\n【主題歌】\n清水美依紗「Dive」(Capitol Records / ユニバーサル ミュージック) \n\n【演出】\n箕輪博之 \n\n【企画】\n稲吉 豊(東海テレビ) \n下川 猛(フジテレビ) \n張 聖晏(bilibili)",
"スタッフ2": "【プロデューサー】\n遠山圭介(東海テレビ) \n保原賢一郎(フジテレビ) \n田上向日葵(フジテレビ) \n亢 越(bilibili) \n古賀俊輔(THEFOOL) \n長坂淳子(THEFOOL)",
"ご案内": "【公式サイト】\nhttps://www.tokai-tv.com/jikoudairinin/ \n\n【公式X】\nhttps://x.com/tokaitv_dodra \n\n【公式Instagram】\nhttps://www.instagram.com/new_dodora_tokaitv/ \n\n【公式TikTok】\nhttps://www.tiktok.com/@dodra_tokaitv"
},
"video": {
"type": "mpeg2",
"resolution": "1080i",
"streamContent": 1,
"componentType": 179
},
"audio": {
"componentType": 3,
"isMain": true,
"samplingRate": 48000,
"langs": [
"jpn"
]
},
"audios": [
{
"componentType": 3,
"isMain": true,
"samplingRate": 48000,
"langs": [
"jpn"
]
}
],
"genres": [
{
"lv1": 3,
"lv2": 0,
"un1": 15,
"un2": 15
}
],
"relatedItems": [
{
"type": "shared",
"networkId": null,
"serviceId": 1056,
"eventId": 55292
},
{
"type": "shared",
"networkId": null,
"serviceId": 1057,
"eventId": 55292
},
{
"type": "shared",
"networkId": null,
"serviceId": 1058,
"eventId": 55292
}
]
}
ufw 設定
ポート 40772 を192.168.1.0/24の内部ネットワークのみ許可
# 許可ポート追加
sudo ufw allow from 192.168.1.0/24 to any port 40772 proto tcp
Rule added
# 追加確認
sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW 192.168.1.0/24
40772/tcp ALLOW 192.168.1.0/24
マシン再起動
マシンを再起動して、自動的に Mirakc が起動することを確認
sudo reboot
再起動後に確認
# サービス状態 -> 正常起動
sudo systemctl status mirakc-compose
● mirakc-compose.service - mirakc docker compose
Loaded: loaded (/etc/systemd/system/mirakc-compose.service; enabled; preset: enabled)
Active: active (exited) since Sun 2026-05-10 15:51:12 JST; 4min 24s ago
Invocation: 263ce27c4e3b4187b1079508ee403695
Process: 2251 ExecStart=/usr/bin/docker compose up -d (code=exited, status=0/SUCCESS)
Main PID: 2251 (code=exited, status=0/SUCCESS)
Mem peak: 66M
CPU: 207ms
May 10 15:51:11 u9310 systemd[1]: Starting mirakc-compose.service - mirakc docker compose...
May 10 15:51:11 u9310 docker[2287]: Network docker-mirakc_default Creating
May 10 15:51:11 u9310 docker[2287]: Network docker-mirakc_default Created
May 10 15:51:11 u9310 docker[2287]: Container mirakc Creating
May 10 15:51:12 u9310 docker[2287]: Container mirakc Created
May 10 15:51:12 u9310 docker[2287]: Container mirakc Starting
May 10 15:51:12 u9310 docker[2287]: Container mirakc Started
May 10 15:51:12 u9310 systemd[1]: Finished mirakc-compose.service - mirakc docker compose.
# 40772 ポート確認(応答あり -> 正常起動)
curl http://localhost:40772/api/services
[{"id":3274001056,"serviceId":1056,"networkId":32740,"type":1,"logoId":1,"remoteControlKeyId":8,"name":"フジテレビ","channel":{"type":"GR","channel":"21"},"hasLogoData":false},{"id":3274001057,"serviceId":1057,"networkId":32740,"type":1,"logoId":1,"remoteControlKeyId":8,"name":"フジテレビ","channel":{"type":"GR","channel":"21"},"hasLogoData":false},{"id":3274001058,"serviceId":1058,"networkId":32740,"type":1,"logoId":1,"remoteControlKeyId":8,"name":"フジテレビ","channel":{"type":"GR","channel":"21"},"hasLogoData":false},{"id":3273901048,"serviceId":1048,"networkId":32739,"type":1,"logoId":140,"remoteControlKeyId":6,"name":"TBS1","channel":{"type":"GR","channel":"22"},"hasLogoData":false},{"id":3273901049,"serviceId":1049,"networkId":32739,"type":1,"logoId":140,"remoteControlKeyId":6,"name":"TBS2","channel":{"type":"GR","channel":"22"},"hasLogoData":false},{"id":3274201072,"serviceId":1072,"networkId":32742,"type":1,"logoId":3,"remoteControlKeyId":7,"name":"テレ東","channel":{"type":"GR","channel":"23"},"hasLogoData":false},{"id":3274201073,"serviceId":1073,"networkId":32742,"type":1,"logoId":3,"remoteControlKeyId":7,"name":"テレ東2","channel":{"type":"GR","channel":"23"},"hasLogoData":false},{"id":3274201074,"serviceId":1074,"networkId":32742,"type":1,"logoId":3,"remoteControlKeyId":7,"name":"テレ東3","channel":{"type":"GR","channel":"23"},"hasLogoData":false},{"id":3273601024,"serviceId":1024,"networkId":32736,"type":1,"logoId":0,"remoteControlKeyId":1,"name":"NHK総合1・東京","channel":{"type":"GR","channel":"27"},"hasLogoData":false},{"id":3273601025,"serviceId":1025,"networkId":32736,"type":1,"logoId":0,"remoteControlKeyId":1,"name":"NHK総合2・東京","channel":{"type":"GR","channel":"27"},"hasLogoData":false}]
ブラウザで接続確認
http://192.168.1.87:40772/api/programs
以上
Mirakc + recfsusb2n 環境の出来上がり
あとは自分の地域のチャンネル情報を config.yml に設定しておくこと
チャンネル情報はこちらを参照
マスプロ さん
https://www.maspro.co.jp/wp-content/themes/maspro/file/reference/tv-channel-list.pdf
DXアンテナ さん
https://qa.dxantenna.co.jp/faq_detail.html?category=&page=1&id=2701
