TV Capture on Fedora 31 KDE

本稿では、Fedora 31 KDEでTVキャプチャデバイスを使用する方法について考察します。対象のデバイスは、pt3、PLEX PX-W3PE4、PLEX Q1UD(S1UD)です。ここでは、tsファイルの生成までをその考察の範囲とし、視聴用、録画用のツール、インターフェイス等については論じません。また、本稿はVine Linux 6.x(i686)で運用されていた録画サーバをFedora 31 KDEに移行する際に得られた情報を中心に記述されています。そのため、多くの項目でpt3 on Vine Linux 6.2と重なっています。本稿で曖昧、不明な点がある場合には比較、参照してみて下さい。
2020-09-26  

1. 実行環境
2. カードリーダー
3. TVキャプチャデバイス
4. ドライバおよびツール
 ・pt3
 ・PX-W3PE4
 ・PX-Q1UD(S1UD)
5. まとめ


1. 実行環境

検証環境の実機は、FRONTIER FRM909/23Aというものらしいです。ジャンクで拾ってきました。もともとはi7だったのですが、このi7は内蔵videoを持っておらず、内蔵videoのi3へと変更しています。これでvideoカードを外し、PCIeスロットを一つ開けました。また、DVDを外し、5インチベイx2のスペースにHDDx3のリムーバブルラック(century BPN-DE230SS-BK)を入れ、2TBx3をRAID5 4TBとし、データ領域として運用しています。

OSは、Fedora 31 KDE、kernel 5.6.16-200.fc31.x86_64、です。Fedoraは更新が速いのですが、ビデオサーバは頻繁にいじるものでもないのでアップデートは慎重に行っています。kernelが少し古いのはそのためです。

CPUIntel Core i3 550 @ 3.20GHz
M.B.PEGATRON IPMIP-GS
chip setIntel H55
RAMDDR3 2GBx2
on board videoCore Processor Integrated Graphics Controller
on board LANIntel PRO/1000 82578DC
on board soundIntel 5 Series/3400 Series Chipset HDA
USB Card ReaderPanasonic 7A-Smart
HDDWDC WD15EARS-00M 1.5TB
HDD software RAIDHITACHI HUA72302 2TBx3 (RAID5 4TB)
OSFedora 31 KDE
kernel5.6.16-200.fc31.x86_64


2. カードリーダー

先述したように本稿は、ある意味、Vine Linux 6.5(i686)からFedora 31 KDEに移行した際の覚え書きです。。実際の移行では、pt3のドライバやキャプチャツールは単純にリビルドするだけで特に問題なく移行できたのですが、最大の問題となったのはカードリーダーのセキュリティでした。Fedora 31 KDEではカードリーダーのセキュリティにpolkitを用いており、polkitを正しく設定しないとrootまたはコンソールユーザ以外はカードリーダーにアクセスできない(B-CASによる復号化ができない)という事態に陥ります。

この問題の前に、まず、カードリーダーを使えるようにします。pcsc-lite、pcsc-lite-libs、pcsc-lite-ccid、pcsc-toolsをインストールし、pcscdを起動させます。ここで使用しているカードリーダーであるPanasonic 7A-Smartは、Vine Linux 6.5ではデフォルトでは認識されなかったのですが、Fedora 31 KDEではデフォルトで認識されます。動作確認はrootまたはコンソールユーザでpcsc_scanを実行します。
# pcsc_scan
Using reader plug'n play mechanism
Scanning present readers...
0: Panasonic Panasonic USB Smart Card Reader 7A-Smart 00 00

Thu Sep 24 21:16:59 2020
Reader 0: Panasonic Panasonic USB Smart Card Reader 7A-Smart 00 00
Card state: Card removed,

pcsc_scanは、Ctrl+Cで終了させます。上記のようにカードリーダー情報が表示されれば動作確認は完了です。なにかカードが入っていればそのカード情報も出力されます。

polkitでのカードリーダーのセキュリティ設定は下記の設定ファイル(/usr/share/polkit-1/rules.d/70.pcscd.rules)で行います。下記のサンプルでは、videoグループに所属するユーザにpcscdの利用とカードへのアクセスを許可しています。また、action.lookup("reader")の右辺は、対象のカードリーダーを指定するわけですが、この値は「opensc-tool -l」によって取得します。

// pcscd polkit setting
// /usr/share/polkit-1/rules.d/70.pcscd.rules
polkit.addRule(function(action, subject) {
    if (action.id == "org.debian.pcsc-lite.access_pcsc" &&
        subject.isInGroup("video")) {
            return polkit.Result.YES;
    }
});

polkit.addRule(function(action, subject) {
    if (action.id == "org.debian.pcsc-lite.access_card" &&
        action.lookup("reader") == 'Panasonic Panasonic USB Smart Card Reader 7A-Smart 00 00' &&
        subject.isInGroup("video")) {
            return polkit.Result.YES;    }
});

// pcscd polkit setting end

設定ファイルを編集したら、polkitを再起動します。念のため、pcscdも再起動しておきます。
# systemctl restart polkit.service
# systemctl restart pcscd.service

rootまたはコンソールユーザ以外でもカードリーダーにアクセスできるかを確認するためネットワークからログインし、動作確認してみます。上記の設定ではvideoグループに所属するユーザにアクセス権が与えられているのでvideoグループに所属するユーザで確認してみます。
$ groups
user1 video
$ pcsc_scan
Using reader plug'n play mechanism
Scanning present readers...
0: Panasonic Panasonic USB Smart Card Reader 7A-Smart 00 00

Thu Sep 24 21:40:11 2020
Reader 0: Panasonic Panasonic USB Smart Card Reader 7A-Smart 00 00
Card state: Card inserted,
--- 略 ---
Japanese Chijou Digital B-CAS Card (pay TV)
 \

上記の例では、B-CASカードが入っており、最後の方にその情報が出力されています。


3. TVキャプチャデバイス

ここでは、三種のTVキャプチャデバイスを取り上げます。一つは王道pt3、BS/CSと地上波を2chずつ、合計4chをカバーし、絶大な人気を誇ったPCIeカードです。すでに生産終了しており、往年は1万円前後で買えたものが現在その数倍で流通していたりして驚かされますが、確かに安定感はあります。あと二枚くらい予備を買っておけばよかったと後悔しています。

pt3の入手性が悪くなった今、その代替を考えた場合、LinuxではPLEXの製品しか事実上選択肢がないと思われます。その中でここで扱うのは、PX-W3PE4とPX-Q1UD(S1UD)です。どちらもUSB接続ですが、PX-W3PE4はPCIeスロットに挿した上に別個にUSB接続して使うという少し特殊な仕様になっています。PX-W3PE4はBS/CSと地上波を2chずつカバーしており(pt3と同一のチャンネル構成)、現在の実売は13,000円くらいで使用感もまずまず、pt3の代替として及第点の評価です。

PX-Q1UDは、地上波1chのみ対応のPX-S1UDを4個集めただけのものです。USB的にもPX-S1UDが4個認識されるだけで、PX-Q1UDというデバイスはUSB的には存在しません。購入当時(2019年秋頃)、PX-S1UDは実売4,000円、PX-Q1UDは実売12,000円程度でした。このUSBドングルの最大の特徴は携帯時の利便性と言えます。当初、BS/CSの不要な環境ではPX-Q1UDを採用しようと考えていたのですが、実際使ってみると、多少、安定性に欠ける気がしないでもなく、また、当環境においてpt3およびPX-W3PE4ではギリギリ受信できるtvkが受信できないなど、ビデオサーバでの通常使用は断念しました。しかしながら、PX-Q1UD(S1UD)の世間一般での評判は悪くなく、それを裏付けるかのように現在は購入当時より明確に価格が上昇しています。何らかの理由でLinuxでは今一つ実力を発揮できていないのかもしれません。

その他のPLEX PXシリーズ、PX-W3PEなどはベンダー提供のLinux公式ドライバは存在するもののオープンソースなドライバが見つからず、柔軟な運用ができないため選択肢から外しました。つまり、本稿で取り上げる三種のTVキャプチャデバイスにはすべてオープンソースなドライバが存在します。


4. ドライバおよびキャプチャツール

まず、ドライバおよびキャプチャツールのビルドに必要なパッケージをインストールします。ドライバのmakeのためにkernel-devel、dkms、キャプチャツールのB-CAS対応(libarib25)のためにpcsc-tools、pcsc-lite-devel、cmake、gcc-c++をインストール、そして、arib25をビルドし、インストールします。

$ git clone https://github.com/stz2012/libarib25
$ cd libarib25
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .
$ make
$ su
# make install

arib25-0.2.5-1pe1.src.rpm

pt3に関しては、Vine Linuxで実運用されていたドライバおよびツールが同様に導入できます(pt3 on Vine Linux 6.2)。キャプチャツールに関しては参考のため例示の工程をほぼそのまま実行するSRPMも用意しました。なお、この項の操作・手順等は主にREADME等に記述されているもので特別なノウハウや工夫によるものではありません。

・pt3
pt3にはカーネル(3.18以降)付属のearth-pt3というDVB版ドライバがあるのですが、Fedora 31 KDEではモジュール化されておらず、リビルドするのも面倒なので従来のpt3_drvで行くことにしました。この場合、earth-pt3をblack listに記述してドライバの競合を避けるような対応が必要な場合もありますが、Fedora 31 KDEにはそもそもearth-pt3がないのでblack listへの記述は不要です。

$ git clone https://github.com/m-tsudo/pt3
$ cd pt3
$ make
$ su
# make install
# bash ./dkms.install

dkmsはカーネル更新時、自動的に対象のドライバも更新される機能です。また、このドライバ(pt3_drv)のインストールによりudevのrulesもインストールされ、このデバイスファイル(/dev/pt3video*)はvideoグループに属する0666のパーミッションとして設定されます。この設定を変更したいときは、/etc/udev/rules.d/99-pt3.rulesを任意に書き換えます。

次にキャプチャツールをビルドし、インストールします。
$ git clone https://github.com/stz2012/recpt1.git
$ cd recpt1/recpt1
$ ./autogen.sh
$ ./configure --enable-b25 --prefix=/usr
$ make
$ su
# make install

recpt1-20130323.39-1pe2.src.rpm

アンテナ入力およびB-CASカードを確認し、適当なチャンネルで動作確認します。
# checksignal --device /dev/pt3video2 16
# recpt1 --b25 --device /dev/pt3video3 22 60 test.ts

・PLEX PX-W3PE4
PX-W3PE4のドライバであるpx4_drvは、PX-W3U4/Q3U4/Q3PE4と共通です。このドライバは非公式なオープンソースのドライバですが、動作にはベンダー提供の公式ドライバに含まれるファームウェアが必要です。まず、それを取り出します。
$ git clone https://github.com/nns779/px4_drv
$ cd px4_drv/fwtool
$ make
$ wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip
$ unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys
$ ./fwtool PXW3U4.sys it930x-firmware.bin
# su
# cp it930x-firmware.bin /lib/firmware/
# exit
$

ファームウェアのインストールが終わったらドライバをビルドします。dkmsもインストールします。
$ cd ../driver/
$ make
$ su
# make install
# cd .. #以下、dkmsをインストールします。
# cp -a ./ /usr/src/px4_drv-0.2.1
# dkms add px4_drv/0.2.1
# dkms install px4_drv/0.2.1

px4_drvのインストールでもpt3と同様にudevのrulesがインストールされます(/etc/udev/rules.d/99-px4video.rules)。デフォルトのデバイスファイルはvideoグループに属する0664のパーミッションとなります。pt3の0666とは異なり、othersには書き込み権限がないことに注意が必要です。

px4_drvのキャプチャツールはrecpt1で、pt3と同様に使用できます。アンテナ入力およびB-CASカードを確認し、適当なチャンネルで動作確認します。
$ checksignal --device /dev/px4video2 16
$ recpt1 --b25 --device /dev/px4video3 22 60 test.ts

・PLEX PX-Q1UD(S1UD)
PX-Q1UD(S1UD)のドライバはカーネル標準です(smsdvb, smsusb)。よって必要なのはキャプチャツールだけです。ここでは、recdvbを使います。

$ wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz
$ tar zxvf recdvb-1.3.2.tgz
$ cd recdvb-1.3.2/
$ ./autogen.sh
$ ./configure --prefix=/usr --enable-b25
$ make
$ su
# make install

recdvb-1.3.2-0pe3.src.rpm

最後にアンテナ入力およびB-CASカードを確認し、適当なチャンネルで動作確認します。
$ recdvbchksig --dev 0 24
$ recdvb --b25 24 60 test.ts

smsdvbはカーネル付属のドライバであるため上記二つのドライバとは異なり、udevのrulesは個別にインストールされません。デフォルトでは、デバイス(/dev/dvb/adapter*/*)の設定は、root.video 0660となります。rulesを設定したい場合は、/etc/udev/rules.d/98-s1ud.rulesに
KERNEL=="dvb*", ATTRS{product}=="PX-S1UD *", GROUP="video", MODE="0664"
のように記述して下さい。

なお、PX-Q1UDは外付けの電源アダプタから給電することができますが、この電源アダプタを接続したままPCを起動させると当環境においてはストールし、起動できません。原因は不明です。実験的な使用の範囲ではUSBポートからの給電だけでも不具合が生じたことはありませんでしたが、電源アダプタを接続したまま運用する場合は、ドライバ(smsdvb, smsusb)をblack listに記述して起動途中でのロードを回避し、完全に起動した後に改めてドライバをロードする必要があります。


5. まとめ

Vine Linux 6.5からFedora 31 KDEへの移行でもっとも戸惑ったのはセキュリティ関連でした。ここでは、polkitを挙げましたが、その他にもselinux、capability、sasl、などなど、従来からのファイルパーミッション、pamもあるわけでもはや何がなんだかわかりません。httpdでは、UID1000未満のユーザはセキュリティポリシーとしてsuexecが実行できないということに気づくまでCGIが実行できず、非常に悩みました。というわけで、想定通りに動作しない場合はセキュリティ関連を疑ってみて下さい。とくにselinuxは曲者で、筆者はインストール直後一番最初にselinuxをdisableにすることがもはや儀式化してしまいました。

とりあえず、セキュリティ云々はともかく、OSの32bitから64bitへの更新は処理速度が倍化し、たいへん驚かされました。このご時世、移動がままならず、遠隔地にある各種サーバはOSの入れ替えが滞っているのですが、これらのサーバはVineの32bitなので早く64bitにしたく、せめて今年度中にはと思っています。

そんなこんなで、Vineからの乗り換えに随分と時間がかかっておりますが、ひとまず、ビデオサーバに関しては落ち着きました。現状は、検証機にPX-W3PE4x2での運用となっています。そんなわけで、pt3x2が遊んでいるわけですが、pt3のあまりの高値にふらっと売りたい気分にならなくもない…。

2020-09-26 よしのぶ
yoshino@rita.karing.jp
  戻る
  index.html


2018-09-26 Sat 21:10