Ubuntu 18.04 + EPGStation + PX-W3PE4で録画環境を構築した

2020年10月15日

この記事はnasne再販決定前に書いた記事です。nasne再販が決まって嬉しい限りです。

どうも〜Yukiです。

だいぶ前の話になりますが…5年ほど使ってきたnasneが販売終了となりました。長年使ってきたレコーダーにお別れをするのは悲しいですが、、

nasneほど安くて多機能なレコーダーというのは、同じ価格帯ではまず見ることが出来ません。他のハイエンド高価格帯レコーダーと比較しても全く見劣りすることなく機能が充実していて、スマホ・タブレット・PCなどからストリーミング再生、書き出しして外出先で見る、また外出先からもストリーミングでテレビが見られるという機能まで持っています。

SONYと中でもXperia Z4 Tabletと並んでトップクラスにお気に入りのデバイスでした。そんな神機が販売終了ということになってしまい、いつかはtorne mobileなどのスマホアプリも提供を終了し見られなくなってしまうので、今回はテレビ録画が出来るサーバーをUbuntuで建てました。

構築した環境

まずUbuntuをインストールしたサーバーのスペックです。

CPU:Core i3 9100
マザーボード:H310のAsrockのやつ
RAM:8GB
ストレージ:NVMe SSD 128GB(OS用)、WD 6TB HDD(映像保存用)

チューナー:PLEX PX-W3PE4
カードリーダー: ACR39-NTTCom

CPUはベタにサーバーCPUのi3。マザボのチップセットでケチりました。メモリは8GBで十分です。ストレージは2つ積んでいますが、M.2 SSDはOS用にしか使いません。

6TBのHDDですが、NAS用ではありません。ケチっちゃいました。24時間起動しているファイルサーバーなので、寿命は短いかもしれません。

最後に要であるチューナーですが、PLEXのPX-W3PE4にしました。地デジ2チャンネル・BSCS2チャンネルの計4チャンネルを同時に録画出来ます。僕は地デジしか使ってません。内蔵カードリーダーはありますが、これは動かないのでカードリーダーを別途購入しましょう。

それでは作業を始めますが、まずはIPアドレスを固定します。OSによって微妙に違うので記載しませんが、各人で設定してください。

ライブラリインストール

まずは必要なライブラリをインストールします。私はいつも、Ubuntuを再インストールしたら実行しているコマンドがあるので、それをご紹介します。

sudo apt -y install autoconf build-essential cmake curl git-core libssl-dev libtool libboost-all-dev pkg-config yasm ffmpeg sqlite3 rtmpdump swftools libxml2-utils libavcodec-extra

これで今回必要なコマンドがインストール出来ます。PM2なんかも必要ですが、ここでは入れていません。

次にユーザーをvideoグループに追加します。

// USER_NAMEをvideoグループに追加する
sudo gpasswd -a USER_NAME video

ユーザー名は適宜変えてください。

カードリーダーのドライバをインストール

カードリーダーのドライバをインストールします。W3PE4内蔵のカードリーダーではありませんので注意。

sudo apt install pcscd libpcsclite-dev libccid pcsc-tools

PX-W3PE4の非公式ドライバをインストール

PX-W3PE4には公式ドライバと非公式ドライバが用意されています。非公式ドライバの方が安定しているらしいので、こちらを使用します。
いくつかgitしていますが、mkdirでフォルダ分けしないとメンドクサイので、ちゃんとフォルダ分けしてgitしましょう。

git clone https://github.com/nns779/px4_drv.git
cd /px4_drv/fwtool
make
wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip -O pxw3u4_BDA_ver1x64.zip
unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys
./fwtool PXW3U4.sys it930x-firmware.bin
sudo mkdir -p /lib/firmware
sudo cp it930x-firmware.bin /lib/firmware/
cd ../

ドライバが認識されているか確認します。

lsmod | grep -e ^px4_drv
px4_drv                81920  0

px4_drv 何らかの数字が表示されればOKです。

libaribのインストール

libarib25をインストールします。

git clone https://github.com/stz2012/libarib25.git
cd libarib25
cmake .
make
sudo make install

recpt1をインストール

W3PE4の録画コマンドであるrecpt1をインストールします。

git clone https://github.com/epgdatacapbon/recpt1.git
cd recpt1/recpt1
./autogen.sh
./configure --enable-b25
make
sudo make install

Node.js、PM2、Mirakurunをインストール

いよいよMirakurunをインストールします。
その前にNods.jsとPM2が必要なのでインストールします。

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install pm2 -g
sudo pm2 startup
sudo npm install mirakurun -g --unsafe --production
sudo npm install arib-b25-stream-test -g --unsafe

Mirakurunの設定

Mirakurunがインストール出来たら、チャンネルスキャンの前にtuner設定をする必要があります。

sudo EDITOR=nano mirakurun config tuners

私の場合、以下のようにしました。

- name: PX-W3PE4-S1
  types:
    - BS
    - CS
  command: /usr/local/bin/recpt1 --device /dev/px4video0 --lnb 15 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: true

- name: PX-W3PE4-S2
  types:
    - BS
    - CS
  command: /usr/local/bin/recpt1 --device /dev/px4video1 --lnb 15 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: true

- name: PX-W3PE4-T1
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/px4video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX-W3PE4-T2
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/px4video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: TBS6922
  types:
    - SKY
  command: szap-s2j -c /usr/local/etc/szap-s2j.conf -l <satelite> -S 1 -p -r -M 5 -C 35 <channel>
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b1-stream-test
  isDisabled: true

BS/CSは使えないのでfalse、地デジ2チャンネルのみtrue。recpt1はきちんと絶対パスを入力し、デバイスパスもきちんと設定しました。
前に相対で設定した時、上手く動かなかったので。

W3PE4系列の方は上記設定をコピーでもいいかもしれません。

チューナーの設定が出来たら、mirakurunを再起動します。

sudo mirakurun restart

チャンネルスキャン

tunerの設定が出来たらチャンネルスキャンをします。地デジのみ対応で、BS/CSでは自分で設定する必要があります。ですがBS/CSはチャンネルの値が全国同じなので、ネットからダウンロードするだけで良さそうです。

curl -X PUT "http://localhost:40772/api/config/channels/scan"

かなり長いです。tunerが認識されていない旨のエラーが出ていたら失敗です。最初の1文でそれが表示されたら、Ctrl + Cで停止させ、tuner設定を見直すか、ドライバを入れ直すかしてください。
Error: stream has closed before get networkなどが最初の1文で表示されたら、チューナーが認識されていることが確認出来ます。その後しばらく放置して、チャンネルがちゃんとスキャンされているか確認しましょう。

EPGStationのインストール

録画管理ソフトであるEPGStationをインストールします。Chinachuでも良かったのですが、こちらの方が設定が多そうなのでこれにしました。

// まずは必要なライブラリがインストールされているかを確認します。ffmpegは記事上部のライブラリインストールでインストールしています。インストールしていなければ適宜インストールしてください。
node --version
curl -o - http://<MirakurunURL>:<Port>/api/version
ffmpeg -version
python --version
gcc --version

// EPGStationをインストール
git clone https://github.com/l3tnun/EPGStation.git
cd EPGStation
npm install --no-save
npm run build
// 設定ファイルの作成
cp config/config.sample.json config/config.json
cp config/operatorLogConfig.sample.json config/operatorLogConfig.json
cp config/serviceLogConfig.sample.json config/serviceLogConfig.json

// EPGStation自動起動
sudo pm2 startup
pm2 start dist/server/index.js --name "epgstation"
pm2 save

SQLite3での正規表現検索

EPGStationはデータベースが必要です。今回は、ライブラリインストールの項でSQLite3をインストールしています。EPGStationはSQLite3がデフォルトで設定されているため、設定を少なく出来るからです。
ですが、SQLite3はそのままでは正規表現での検索が出来ません。そのために設定する必要があります。

ソースコードのダウンロード

SQLite Download Pageに飛びます。

sqlite-amalgamation-*.zip と sqlite-src-*.zip をダウンロードし、適当な場所に解凍します。

ソースコードの配置

sqlite-src-*/ext/misc/regexp.c を sqlite-amalgamation-* へコピーします。

ビルド

sqlite-amalgamation-* へ移動し以下のコマンドを実行します。

gcc -g -fPIC -shared regexp.c -o regexp.so

ファイルの配置

生成された regexp.so (Linux), regexp.dylib (macOS), regexp.dll (Windows) を適当な場所へ配置します。

EPGStationの修正

EPGStationのconfig.jsonに下記の項目を追加します。

    "sqlite3": {
        "extensions": [
                        "/hoge/regexp.so"
                      ],
        "regexp": true
    },

// EPGStationを再起動
pm2 restart epgstation

EPGStationでの毎週録画

長々と書き連ねましたがこれで作業は終了です。

ブラウザから http://IPAddress:8888/ にアクセスをして、EPGStationのUIが表示されたら成功です。
初回はEPG取得に時間がかかるので、ブラウザを開いたまま放置します。

しばらくすれば、番組表もしっかりと表示されます。

EPGStationでの毎週録画のやり方は、「ルールを追加する」というものです。

番組表から好きな番組を選び、ルール作成をします。設定項目は非常に多く、特番にも対応出来ます。

トップのキーワードは、番組名です。サブタイトルが入っていることがあるので、消しておきましょう。

対象時刻は番組の長さに上手く収まるように設定します。

曜日は全てを指定すると、別日で放送される特番などにも対応出来ます。

ディレクトリは、その番組のTSファイルを保存するディレクトリです。

ファイル名形式は、生成されるTSのファイル名形式です。こちらから設定するよりも、config.json 詳細マニュアルを見て設定した方が良いかもしれません。

エンコードは、モードをH264に設定することでmp4形式のファイルが作成されます。その下のディレクトリは、mp4を保存する場所となります。

一週間使ってみた感想

この環境で一週間ほど使用してみました。

私の環境ではテレ東が全くダメで、ブロックノイズだらけです。ブロックノイズが起きるのはテレ東だけなので、チューナーが悪いというわけではなさそうです。

調べたところ、電波が弱いとブロックノイズは起こるようだったので、ブースターを噛ませてみました。

しかし、今度は逆に全てのチューナーが使えなくなってしまい、全く録画出来なくなってしまいました。

幸い再インストールしたら直りました。チューナーが壊れてなくてよかったですが、もうブースターは使えません。

とまあ悪いところもありますが、私は金曜ロードSHOWと脱力タイムズが録画出来ればモンクはないです。mp4にエンコードしたあとTSファイルを自動削除する設定もあるので、容量も圧迫しなくて済みそうです。

6TBのHDDが埋まるぐらい映画と脱力タイムズを録画したいですね~。

それでは

Posted by Yuki