0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu26でrecfsusb2nを利用したMirakc環境作成

0
Last updated at Posted at 2026-05-10

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
compose.yaml
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
config.yml
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 を利用するので追記

~/mirakc/compose.yaml
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
~/mirakc/config.yml
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}}
      - -
~/mirakc/Dockerfile
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

Screenshot From 2026-05-10 15-59-48.png


以上
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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?