Raspberry PiとPX-W3PE4を利用してDockerを利用しないでMirakurunとEPGStationを構築する
- 2021.03.18
- ソフトウェア
- Raspberry Pi, ソフトウェア
前にDockerを利用してMirakurunとEPGStationを構築しましたが、様々なことを試してもどうしてもハードウェアエンコードを利用することができなかったので、Dockerを利用しない方法で改めて構築し直そうと思います。
用意するもの
Raspberry Pi本体
今回はRaspberry Pi4 4GBを利用します。
メモリは2GBでも足りると思いますが、バックグラウンドで他のものも動作させているので一応4GBです。
チューナー
今回はわざわざPX-W3PE4を外付け化して利用していますが、わざわざ外付け化する必要なんて無いので最初からUSB接続型になっている外付けのチューナーを用意したほうが良いと思います。
ICカードリーダー
PX-W3PE4には一応内蔵カードリーダーが搭載されていますが、不安定ですし、非公式Linuxドライバを利用すると内蔵カードリーダーが利用できなくなるのでICカードリーダーを用意します。
構築
利用できるように構築していきます。
Raspberry Piの設定
OSをインストールして、IPアドレスの固定などを行ってください。
タイムゾーンの設定
電子番組表を利用する際の時間が狂うので、日本時間に設定します。
sudo raspi-config
を実行し、Localistation Optionsを選択、Timezoneを選択し、Asia→Tokyoを選択します。
Sambaの構築
録画データはSDカードに保存することも可能ですが、一般的にはHDDなりなんなりの外部ストレージを接続してそちらに保存すると思います。
その録画データに外部からアクセスできるようにSambaを構築します。
パッケージなどのインストール
こちらを参考に構築していきます。
sudo apt-get update sudo apt-get install -y cmake automake autoconf exfat-utils pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools samba sqlite3 ffmpeg sudo apt-get install -y build-essential curl git-core libssl-dev yasm libtool autoconf python git raspberrypi-kernel-headers sudo apt full-upgrade -y sudo reboot
必要なパッケージなどをインストールします。
非公式ドライバのインストール
非公式ドライバのほうが公式よりも安定していると言われているのでこちらをインストールします。
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 sudo reboot
必要なパッケージをインストールし、クローンし、公式ドライバを抽出し、非公式ドライバをインストールします。
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 curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs 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 --device /dev/px4video0 <channel> - - decoder: arib-b25-stream-test isDisabled: false - name: PX-W3PE4_S2 types: - BS - CS command: recpt1 --b25 --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"
を実行してチャンネルスキャンをしてください。
curl -X PUT "http://localhost:40772/api/config/channels/scan?type=BS&setDisabledOnAdd=false&refresh=true"
こちらも実行するとBSもスキャンできます。
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
設定ファイルを生成します。
sudo apt install -y mariadb-server sudo mysql_secure_installation sudo mysql -u root -p CREATE DATABASE epgstation CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL ON epgstation.* TO epgstation@localhost IDENTIFIED BY 'epgstation'; GRANT ALL ON epgstation.* TO [email protected] IDENTIFIED BY 'epgstation'; SET GLOBAL expire_logs_days = 1; exit
EPGStation用のデータベースを作成し、
nano config/config.yml
で設定ファイルを開き、
#dbtype: sqlite dbtype: mysql mysql: host: localhost port: 3306 user: epgstation password: epgstation database: epgstation charset: utf8mb4
データベースの設定を行い、
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_v4l2m2m_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_v4l2m2m -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_v4l2m2m_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_v4l2m2m -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_v4l2m2m_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_v4l2m2m -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_v4l2m2m_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_v4l2m2m -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_v4l2m2m_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_v4l2m2m -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_v4l2m2m_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_v4l2m2m -vb 3000k -profile:v baseline -preset veryfast -tune fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
ストリーミングでハードウェアエンコードを利用できるようにしたり(なおリアルタイムスングでトリーミきるレベルのエンコード速度にするために動画のリサイズやインターレース解除をしないようにしてあるのである程度の画質劣化はあります)、Mirakurunのパスを変更したりします。
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
で自動起動設定を保存します。
バックアップデータを復元する
データベースをバックアップしていた場合は、
npm run restore ファイル名
でリストアできます。
利用
MirakurunはIPアドレス:40772、EPGStationはIPアドレス:8888でアクセスできます。
とりあえずはハードウェアエンコードを利用したリアルタイムストリーミングもできるようになりました。
後は録画後の自動CMカットと自動ハードウェアエンコードを構築しようと思います。
-
前の記事
LINEモバイルのMNP転出手数料が無料に 2021年4月1日から 2021.03.17
-
次の記事
Amatsukazeを利用してロゴファイルを生成する 2021.03.19