Raspberry PiとPX-W3PE4を利用してDockerを利用しないでMirakurunとEPGStationを構築する

Raspberry Piを各種サーバーにする

PX-W3PE4を外付け化する

Raspberry PiとPX-W3PE4を利用してMirakurunとEPGStationを構築する

前にDockerを利用してMirakurunとEPGStationを構築しましたが、様々なことを試してもどうしてもハードウェアエンコードを利用することができなかったので、Dockerを利用しない方法で改めて構築し直そうと思います。

 

Advertisement

用意するもの

Raspberry Pi本体

Raspberry Pi 4 Model Bを買いました

今回はRaspberry Pi4 4GBを利用します。

メモリは2GBでも足りると思いますが、バックグラウンドで他のものも動作させているので一応4GBです。

チューナー

PX-W3PE4を外付け化する

今回はわざわざPX-W3PE4を外付け化して利用していますが、わざわざ外付け化する必要なんて無いので最初からUSB接続型になっている外付けのチューナーを用意したほうが良いと思います。

ICカードリーダー

PX-W3PE4には一応内蔵カードリーダーが搭載されていますが、不安定ですし、非公式Linuxドライバを利用すると内蔵カードリーダーが利用できなくなるのでICカードリーダーを用意します。

構築

利用できるように構築していきます。

Raspberry Piの設定

Raspberry Pi OSをインストールする

OSをインストールして、IPアドレスの固定などを行ってください。

タイムゾーンの設定

電子番組表を利用する際の時間が狂うので、日本時間に設定します。

sudo raspi-config

を実行し、Localistation Optionsを選択、Timezoneを選択し、Asia→Tokyoを選択します。

Sambaの構築

Raspberry PiでSambaサーバーを建てる

録画データはSDカードに保存することも可能ですが、一般的にはHDDなりなんなりの外部ストレージを接続してそちらに保存すると思います。

その録画データに外部からアクセスできるようにSambaを構築します。

パッケージなどのインストール

Raspberry Pi 4Bでテレビ録画!PX-W3PE4/W3U4を使いLinuxでTS抜き!

こちらを参考に構築していきます。

sudo apt-get update
sudo apt-get install cmake automake autoconf exfat-utils pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools samba sqlite3 ffmpeg
sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf python git raspberrypi-kernel-headers

必要なパッケージなどをインストールします。

非公式ドライバのインストール

非公式ドライバのほうが公式よりも安定していると言われているのでこちらをインストールします。

cd
sudo apt -y install raspberrypi-kernel-headers git dkms
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 ../
sudo cp -a ./ /usr/src/px4_drv-0.2.1
sudo dkms add px4_drv/0.2.1
sudo dkms install px4_drv/0.2.1
cd

必要なパッケージをインストールし、クローンし、公式ドライバを抽出し、非公式ドライバをインストールします。

ls /dev/px4video*

と実行し、利用しているチューナーの数デバイスが表示されればOKです。

どうしてもdkms installあたりでカーネルバージョンのエラーが出る場合はこちらの記事のraspbianのバージョン確認とraspbianバージョンアップをやってみてください。

ls /usr/src/ | grep linux-headers
uname -r

でバージョンを確認し、一致していない場合は、

ここから一致するバージョンのハッシュを調べ、

sudo rpi-update fb7c402191aa56c8982982b8f31a0bb41743bea1
sudo reboot

のように実行してアップデートします。

ICカードリーダーのセットアップ

sudo pcsc_scan

と実行してJapanese Chijou Digital B-CAS Card的な物が表示されればOKです。

libarib25のインストール

cd
wget https://github.com/stz2012/libarib25/archive/master.zip
unzip master.zip
cd libarib25-master
cmake CMakeLists.txt
make
sudo make install

インストールしてください。

recpt1のインストール

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

インストールしてください。

recpt1 --b25 --strip  27 10 /mnt/hdd/test.ts

などのコマンドで動作チェックしてください。チャンネル番号などは自分の環境に合わせて修正してください。

Mirakurunのインストール

cd
sudo apt-get install -y nodejs npm
sudo npm install n -g
sudo n stable
sudo npm i -g pm2
sudo pm2 startup
sudo npm install mirakurun -g --unsafe --production
sudo npm install arib-b25-stream-test -g --unsafe

インストールします。

sudo nano /usr/local/etc/mirakurun/tuners.yml

で開き、

- name: PX-W3PE4_S1
types:
- BS
- CS
command: recpt1 --b25 --lnb 15 --device /dev/px4video0 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX-W3PE4_S2
types:
- BS
- CS
command: recpt1 --b25 --lnb 15 --device /dev/px4video1 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX-W3PE4_T1
types:
- GR
command: recpt1 --b25 --device /dev/px4video2 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false
- name: PX-W3PE4_T2
types:
- GR
command: recpt1 --b25 --device /dev/px4video3 <channel> - -
decoder: arib-b25-stream-test
isDisabled: false

のように自分の環境に合わせて修正します。

なお、BSアンテナへの給電が不要な場合は–lnb 15を消してください。

sudo mirakurun restart

再起動しておきます。

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

を実行してチャンネルスキャンをしてください。

sudo mirakurun restart

再起動しておきます。

EPGStationのインストール

cd
git clone https://github.com/l3tnun/EPGStation.git 
cd EPGStation
npm run all-install
npm run build

インストールします。

cp config/config.yml.template config/config.yml
cp config/operatorLogConfig.sample.yml config/operatorLogConfig.yml
cp config/epgUpdaterLogConfig.sample.yml config/epgUpdaterLogConfig.yml
cp config/serviceLogConfig.sample.yml config/serviceLogConfig.yml
cp config/enc.js.template config/enc.js

設定ファイルを生成します。

wget https://www.sqlite.org/2019/sqlite-amalgamation-3290000.zip
wget https://www.sqlite.org/2019/sqlite-src-3290000.zip
unzip sqlite-amalgamation-3290000.zip
unzip sqlite-src-3290000.zip
cp sqlite-src-3290000/ext/misc/regexp.c sqlite-amalgamation-3290000
cd sqlite-amalgamation-3290000
gcc -g -fPIC -shared regexp.c -o regexp.so
sudo cp regexp.so ~/EPGStation/data/

SQLiteで正規表現を使えるように拡張機能を用意し、

cd ../
nano config/config.yml

で設定ファイルを開き、

recordedFormat: '%YEAR%%MONTH%%DAY%-%TITLE%[%HALF_WIDTH_CHNAME%]'
recordedFileExtension: .ts

タイトルの命名規則を変更したり、

recorded:
- name: recorded
path: '/mnt/hdd/Rec'

録画先を変更したり、

ffmpeg: /usr/bin/ffmpeg
ffprobe: /usr/bin/ffprobe

ffmpegなどのパスを変更したり、

 android: intent://ADDRESS#Intent;package=org.videolan.vlc;type=video;scheme=PROTOCOL;end

AndroidからのストリーミングでVLCを利用するようにしたり、

stream:
live:
ts:
m2ts:
- name: 無変換
mp4:
- name: h264_omx_10Mbps
cmd:
'%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -ac 2 -ab 192k -c:v h264_omx -vb 10000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
- name: h264_omx_3Mbps
cmd:
'%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -ac 2 -ab 192k -c:v h264_omx -vb 3000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
recorded:
ts:
mp4:
- name: h264_omx_10Mbps
cmd:
'%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -ac 2 -ab 192k -c:v h264_omx -vb 10000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
- name: h264_omx_3Mbps
cmd:
'%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -ac 2 -ab 192k -c:v h264_omx -vb 3000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
encoded:
mp4:
- name: h264_omx_10Mbps
cmd:
'%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -ac 2 -ab 192k -c:v h264_omx -vb 10000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
- name: h264_omx_3Mbps
cmd:
'%FFMPEG% -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -ac 2 -ab 192k -c:v h264_omx -vb 3000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'

ストリーミングでハードウェアエンコードを利用できるようにしたり(なおリアルタイムスングでトリーミきるレベルのエンコード速度にするために動画のリサイズやインターレース解除をしないようにしてあるのである程度の画質劣化はあります)、

sqlite:
extensions:
- 'data/regexp.so'
regexp: true

SQLite3で正規表現を利用するための記述を末尾に追記します。

pm2 start dist/index.js --name "epgstation"
pm2 startup

を実行して表示された

sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u ユーザー名 --hp /home/ユーザー名

的なコマンドを実行し、

pm2 save

で自動起動設定を保存します。

バックアップデータを復元する

EPGStationのデータベースを自動バックアップする

データベースをバックアップしていた場合は、

npm run restore ファイル名

でリストアできます。

利用

MirakurunはIPアドレス:40772、EPGStationはIPアドレス:8888でアクセスできます。

Advertisement

とりあえずはハードウェアエンコードを利用したリアルタイムストリーミングもできるようになりました。

後は録画後の自動CMカットと自動ハードウェアエンコードを構築しようと思います。

Raspberry PiでEPGStationの録画データを自動CMカットしてエンコードする

EPGStationのデータベースを自動バックアップする