広告あり
当初録画サーバーをWindows上で運用しようとしていたのですが、低品質なPX-W3U4のドライバのせいで不安定になっていたため、Ubuntu 18上で作り直したところかなり安定するようになりました。後で思い出すためメモ書きを残しておきます。
目次
PX-W3U4はWindowsでは環境依存の問題が起きやすい
パソコンで地デジやBS・CSの録画が出来るようになるTVチューナー、PX-W3U4はプレクス公式でWindows・Linuxドライバが公開されています。
しかし、Windows 10 x64で使用し続けていると、断続的に
停止コード: PAGE_FAULT_IN_NONPAGED_AREA
失敗した内容: PXW3U4.sys
というエラーが発生しブルースクリーンとなり再起動していました。
いくつか対策したのですが、結局Windows上では長時間安定して動作させることは出来ませんでした。
対策1. プレクス社に検証してもらう
PXW3U4.sys = PX-W3U4のドライバがBSODの原因であることはほぼ間違いないので、まずは販売元のプレクスに問い合わせしました。
返ってきた返信は以下の通りですが、これまでドライバが原因の現象は確認していないから、とドライバの問題では無くこちらのハードウェアに原因がある可能性が高いと言い切られてしまいました。大手企業ですら何度もドライバの更新をするのに、この自信はどこから湧いてくるのでしょうか…。
ちょうどもう一台新品のWindows搭載PCがあったため、再セットアップしてUSB 3.0ポートではなくUSB 2.0ポートに差し替え、冷却ファンで冷やした状態で動作を確認しました。
ページングファイルの作り直しやメモリテストなどをした結果はどちらのPCも正常で、PXW3U4.sysが原因のBSODはどちらのPCでも起きたことを返信し、プレクスでの検証を要求しました。
検証の結果は、「長時間の利用においてチューナーの動作が順次停止する」という問題については確認出来たが、BSODは再現しなかった、とのことでした。
ちなみに検証のためプレクスへ送る送料はこちら持ちで、送るときに同封した検証依頼書は「弊社使用欄」として動作確認のチェック欄がいくつかあったものの、すべて空欄のまま返ってきました。
検証の結果新品が返ってくることになりましたが、結局この新品でも同様の問題が発生しました。
対策2. 分配器の通電端子を使わないようにする
プレクス、というより製造元のDigibest製のTVチューナーはLNB電源供給に問題があるようですが、厄介なことに分配器・分波器を使う時通電する端子を使ってしまうと、LNB電源供給を無効化していても勝手に電源供給されてしまう問題も抱えているようです。
使っていた分配器は幸い一端子のみ通電するタイプだったので差し替えたところ、一日に4~5回ほどBSODが起きていたのが一日に2回ほどに収まりました。
使っていた分配器だと微妙に信号強度が弱くなるようだったので、今は下記の分波器を使っています。
対策3. USBケーブルをフェライトコア付きにする
Digibest製チューナーには低品質なケーブルが付属していることが多い、という情報を見かけたため、フェライトコア付きのUSBケーブルを購入してみました。
これでもBSODが一日一回は起きていて、特に目立った効果はありませんでしたが、PX-W3U4付属のUSBケーブルは本体から外れやすい感じがするので、それを防ぐという意味では良いかもしれません。
対策4. Mirakurunの設定を変えてみる
BSODは録画中というよりはEPG取得時の時間帯によく起きていたため、Mirakurunも何か影響しているかもしれない、と思って設定を変更してみました。
Mirakurunのtunners.ymlでcommand:のところにB25処理をするよう書いてしまうとEPG取得でもB25処理されてしまい、余計な負荷の原因になるので外しました。
また、BSODが起きて再起動した後はしばらく問題なく動くので、連続稼働で問題が起きる可能性も考え、一日二回Mirakurunの再起動をするようにしました。
これでようやくBSODが一週間に3回程度になりましたが、完治しませんでした。
Ubuntu 18 LTS + px4_drvで作り直し
プレクスの低品質なドライバが修正されない以上Windowsではもうどうにもならない、と分かったところで、非公式版Linux用ドライバ px4_drv がT側・S側両方に対応し、T1->T0のドロップ対策も入ったことが分かりました。
PX-W3U4のドライバはGPLライセンスのコードを含むにもかかわらず、プレクス・Digibestはソースを公開していないため公式ドライバだと対応するカーネルが限られているのですが、非公式版ならどのカーネルでも制限無く利用できます。
私は使い慣れているデスクトップ版のUbuntu 18.04 LTSを利用しましたが、XRDPがどうも思い通りに動かなかったので、結局デスクトップは止めてSSH接続することになりました…。
非公式版Linux用ドライバ px4_drvのビルド手順はGitHubに書かれているとおりです。
なお、PX-W3U4の内蔵カードリーダーは今のところWindowsでしか使えないため、別途カードリーダーが必要となります。
安いACR39-NTTComで問題ありません。説明書には書いていませんが、B-CASカードを挿入する場合はICチップが上面に来るよう、B-CASと大きく書かれた面を下向きにしないといけません。
sudo apt-get install -y git build-essential cmake libpcsclite1 libpcsclite-dev pcscd pcsc-tools pkg-config
git clone https://github.com/stz2012/libarib25.git
cd libarib25/
cmake .
make
sudo make install
と実行すればB-CASカードが認識され、利用できるようになります。
録画用のコマンドはrecpt1を使用しました。
curl -LO http://plex-net.co.jp/download/linux/Linux_Driver.zip
unzip Linux_Driver.zip
cd Linux_Driver/MyRecpt1/MyRecpt1/recpt1/
make clean
sh configure --enable-b25
make
sudo install -m 755 recpt1 /usr/local/bin/recpt1
sudo install -m 755 recpt1ctl /usr/local/bin/recpt1ctl
と実行します。
px4_drvを使用する場合、Mirakurunのtuners.ymlは以下のようにします。
- name: PX4-S1
types:
- BS
command: recpt1 --device /dev/px4video0 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX4-S2
types:
- BS
command: recpt1 --device /dev/px4video1 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX4-T1
types:
- GR
command: recpt1 --device /dev/px4video2 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX4-T2
types:
- GR
command: recpt1 --device /dev/px4video3 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
後はMirakurun、arib-b25-stream-test、MySQL、EPGStationなどをセットアップすれば完了です。
ファイル名に番組名を使いたい場合、録画後にスクリプトで色々処理しようとすると、Windowsでは使用できない記号が番組名に入っている時の処理を考えないといけなかったのですが、Ubuntu上では特に何もせずに済むようになり、PowerShell CoreをインストールすることでPowerShellスクリプトもほぼそのまま使い回せたのでかなり楽でした。
LinuxだとQSVエンコードできるCPUが限られているという問題はあるものの、Gemini Lake搭載小型PCなど省電力なPCでも気軽に入れやすく、ドライバ起因のBSODやドロップに悩まされず安定した録画が出来るようになるので、PX-W3U4で録画サーバーを作ろうと考えている方は、初めからWindowsではなくLinuxで構築するのをおすすめします。