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でKEIANのKTV-FSPCIEを利用

0
Last updated at Posted at 2026-05-09

KEIAN の KTV-FSPCIE が手に入ったので、Ubuntu26 で利用してみる

KTV-FSPCIE は こんなやつ
https://kakaku.com/item/K0000047526/
https://firtel.blogspot.com/2024/12/ktv-fspcie-mxl136.html

放送波の内容を確認する機器です

ARIB STD-B25(デジタル放送におけるアクセス制御方式)の勉強として放送波の中を見てみます

R19?処理済み..かな?

認識確認

USB接続して、認識されているか確認

lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 002: ID 0511:0029 N'Able (DataBook) Technologies, Inc. ISDB-T Full Segment Device
    Bus 001 Device 003: ID 8087:0026 Intel Corp. AX201 Bluetooth
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 001 - Device 002 - ID 0511:0029 で ISDB-T が認識されている

video グループ設定

# video グループ設定
sudo  groupadd  video
sudo  gpasswd  -a  USERNAME  video

USERNAME ユーザを video グループに追加
( ※ USERNAME は利用しているユーザ名変更してください )

開発環境準備

## Ubuntu
sudo apt install  \
    build-essential \
    pkg-config \
    libpcsclite-dev \
    libboost-thread-dev \
    libboost-filesystem-dev \
    libboost-all-dev \
    libboost-system-dev


## Fedora
sudo dnf install \
    @development-tools \
    pkgconf-pkg-config \
    pcsc-lite-devel \
    boost-devel
    

放送波複合ツール : recfsusb2n

# ツールダウンロード
git  clone  https://github.com/stz2012/recfsusb2n

# ダウンロードしたディレクトリに移動
cd  recfsusb2n

Ubuntu26だといろいろ変わってるので修正が必要みたい

em2874-core.cpp
//# 変更前
#include <boost/filesystem/path.hpp>

//# 変更後
#include <boost/filesystem.hpp>
Makefile
# 変更前
LIBS     = -lpthread -lboost_thread -lboost_system -lboost_filesystem

# 変更後
LIBS     = -lpthread -lboost_thread -lboost_filesystem

Fedora 44 では以下

em2874-core.cpp
//# 変更前
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>


//# 変更後
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/directory.hpp>  // ← これを追加!
#include <boost/filesystem/operations.hpp>

コンパイル

make
    gcc -MM fsusb2n.cpp usbops.cpp em2874-core.cpp ktv.cpp IoThread.cpp B25Decoder.cpp tssplitter_lite.cpp > Makefile.dep
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o fsusb2n.o fsusb2n.cpp
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o usbops.o usbops.cpp
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o em2874-core.o em2874-core.cpp
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o ktv.o ktv.cpp
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o IoThread.o IoThread.cpp
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o B25Decoder.o B25Decoder.cpp
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL   -c -o tssplitter_lite.o tssplitter_lite.cpp
    gcc    -c -o arib25/arib_std_b25.o arib25/arib_std_b25.c
    gcc    -c -o arib25/b_cas_card.o arib25/b_cas_card.c
    gcc    -c -o arib25/multi2.o arib25/multi2.c
    gcc    -c -o arib25/ts_section_parser.o arib25/ts_section_parser.c
    g++ -O2 -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25 -DTSSL -o recfsusb2n fsusb2n.o usbops.o em2874-core.o ktv.o IoThread.o B25Decoder.o tssplitter_lite.o ./arib25/arib_std_b25.o ./arib25/b_cas_card.o ./arib25/multi2.o ./arib25/ts_section_parser.o -lpthread -lboost_thread -lboost_filesystem `pkg-config libpcsclite --libs` -lm

sudo  make  install
    rm -vf /usr/local/bin/recfsusb2n /etc/udev/rules.d/99-fsusb2n.rules
    if [ -d /etc/udev/rules.d -a ! -f /etc/udev/rules.d/99-fsusb2n.rules ] ; then \
    	install -m 644 etc/99-fsusb2n.rules /etc/udev/rules.d ; \
    fi
    install -m 755 recfsusb2n /usr/local/bin

インストール確認

## 実行ファイル存在確認
ls -l  /usr/local/bin/recfsusb2n 
        -rwxr-xr-x. 1 root root 2509392  9月 24 23:13 /usr/local/bin/recfsusb2n

## ルールファイル存在確認
ls -l  /etc/udev/rules.d/99-fsusb2n.rules
        -rw-r--r--. 1 root root 134  9月 24 23:13 /etc/udev/rules.d/99-fsusb2n.rules

## ルールファイル内容確認
cat  /etc/udev/rules.d/99-fsusb2n.rules
        # FSUSB2N
        SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video"

udev ルール確認

cat /etc/udev/rules.d/99-fsusb2n.rules
    # FSUSB2N
    SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video"

usb 接続の 0511 の 0029 を 権限 0664 でvideo グループのユーザが利用できる

再起動

# 追加ルール反映
sudo udevadm control --reload-rules

# 再起動
sudo reboot

放送波の保存

# 32チャンネルを 30秒 /tmp/test32.ts に保存
recfsusb2n   -b  32 30 /tmp/test32.ts
    recfsusb2n ver. 0.9.2
    ISDB-T DTV Tuner FSUSB2N
    device: /dev/bus/usb/001/002
    pid = 2205
    B25Decoder initialized.
    done.
    Rec time: 31 sec.

# ファイル確認  61,520,932 byte(60M)
ls -l /tmp/test32.ts 
    -rw-rw-r-- 1 USERNAME USERNAME 61520932 May  9 14:52 /tmp/test32.ts

チャンネルは以下を参照
マスプロ さん
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

コマンド実行時の放送波を /tmp/test32.ts ファイルとして保存

保存TSの確認

こちらのツールを使わせていただく
https://gist.github.com/tsukumijima/48cc26595bc2b05debdba2a655068696

python 環境

sudo  apt  install  python3-venv  python3-full  python3-pip
python3  -m  venv  ~/pyenv
source  ~/pyenv/bin/activate
pip  install  ariblib

ツールダウンロード

curl -O https://gist.githubusercontent.com/tsukumijima/48cc26595bc2b05debdba2a655068696/raw/1c7868bb1c25065a00ce2675ad42af6a1a40f19f/TSInfoExtractor.py

ツール実行

python  TSInfoExtractor.py  /tmp/test32.ts 
    {
        "record": {
            "start_time": "2026-05-09T15:21:06.474900+09:00",
            "start_margin": -1266.4749,
            "end_time": "2026-05-09T15:21:35.500000+09:00",
            "end_margin": -504.5,
            "duration": 29.0251
        },
        "channel": {
            "id": "NID32295-SID29752",
            "network_id": 32295,
            "service_id": 29752,
            "transport_stream_id": 32295,
            "remocon_id": 3,
            "channel_name": "テレ玉1",
            "channel_ts_name": "テレ玉",
            "channel_type": "GR",
            "channel_service_type": "デジタルTVサービス"
        },
        "program": {
            "id": "NID32295-SID29752-EID10374",
            "network_id": 32295,
            "service_id": 29752,
            "event_id": 10374,
            "title": "テレビショッピング・ダイレクトテレショップ[S]",
            "description": "シュワッ!とパンチ 0120-4141-81",
            "detail": {
                "番組内容": "シュワッ!とパンチ 0120-4141-81"
            },
            "start_time": "2026-05-09T15:00:00+09:00",
            "end_time": "2026-05-09T15:30:00+09:00",
            "duration": 1800.0,
            "is_free": true,
            "genre": [
                {
                    "major": "情報・ワイドショー",
                    "middle": "ショッピング・通販"
                }
            ],
            "video": {
                "type": "映像1080i(1125i)、アスペクト比16:9 パンベクトルなし",
                "codec": "mpeg2",
                "resolution": "1080i"
            },
            "primary_audio": {
                "type": "2/0モード(ステレオ)",
                "language": "日本語",
                "sampling_rate": "48kHz"
            },
            "secondary_audio": {
                "type": null,
                "language": null,
                "sampling_rate": null
            }
        }
    }

ちゃんと放送波を保存できてるっぽい

EIT(番組表)取り出したり、多言語放送時はどのような指定になっているのか、などなど色々見てみようかな

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?