物置小屋

メモ置き場

CentOS+Mirakurun+EPGStationで録画サーバを構築した

はじめに

今回CentOS上に録画サーバを構築したので、そのメモも兼ねて残しておく。

録画鯖を構築する前提としてPCに挿せるTVチューナ及びB-CASカードが必要だ。
私はPX-W3PE4というものを使用している。

PLEX 地上デジタル・BS・CS対応TVチューナー PX-W3PE4

PLEX 地上デジタル・BS・CS対応TVチューナー PX-W3PE4

また、B-CASカード読み込みのためのICカードリーダーにはSCR3310/v2.0を使用した。

SCM ICカードリーダー/ライター B-CAS・住基カード対応 SCR3310/v2.0 【簡易パッケージ品】

SCM ICカードリーダー/ライター B-CAS・住基カード対応 SCR3310/v2.0 【簡易パッケージ品】

手順

やったことを書いていく。

OSインストール

まずCentOSをインストールする。バージョンは7.6のミニマルでインストールした。
まぁ、ここは普通にやるだけ。一応アップデートとかもしておこう。

EPELリポジトリ設定

# yum install epel-release

後々必要なものをインストール。

# yum --enablerepo=epel install dkms

開発環境構築

ビルドとかに必要なので。

# yum install wget git unzip bzip2 gcc gcc-c++ make autogen automake kernel-devel patch perl-ExtUtils-MakeMaker libtool openssl-devel boost-devel cmake bzip2-devel freetype-devel fontconfig-devel fribidi-devel mercurial nasm

node.jsインストール

バージョン10の最新版を入れる。
まずリポジトリを追加し、インストールする。

# curl -sL https://rpm.nodesource.com/setup_10.x | bash -
# yum install nodejs

バージョン10が入ったのを確認する。

# node -v
v10.15.1

Mirakurunではpm2というものが必要なので入れておく。

# npm install pm2 -g

カードリーダー設定

# yum install ccid pcsc-lite-devel
# mkdir ~/src
# cd ~/src
# wget http://ludovic.rousseau.free.fr/softwares/pcsc-perl/pcsc-perl-1.4.14.tar.bz2
# tar xvf pcsc-perl-1.4.14.tar.bz2
# cd pcsc-perl-1.4.14
# perl Makefile.PL
# make
# make install

# cd ~/src
# wget http://ludovic.rousseau.free.fr/softwares/pcsc-tools/pcsc-tools-1.5.3.tar.bz2
# tar xvf pcsc-tools-1.5.3.tar.bz2
# cd pcsc-tools-1.5.3
# ./configure
# make
# make install

これでカードリーダー周りの設定は完了。
カードリーダーを接続して動作確認する。

# systemctl enable pcscd
# systemctl start pcscd
# pcsc_scan
略
Japanese Chijou Digital B-CAS Card (pay TV)

B-CASなんちゃらと出たらOK。
Ctrl+Cで落ちよう。

arib25ライブラリ導入

受信したテレビ放送の復号に使うライブラリをインストールする。

# cd ~/src
# git clone https://github.com/stz2012/libarib25.git
# cd libarib25
# cmake .
# make
# make install
# echo /usr/local/lib64 > /etc/ld.so.conf.d/usr-local-lib.conf
# ldconfig

TVチューナの非公式ドライバ導入

github.com

これを導入する。

ファームウェアファイルの用意

# cd ~/src
# 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 -O pxw3u4_BDA_ver1x64.zip
# unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys
# ./fwtool PXW3U4.sys it930x-firmware.bin
# mkdir -p /lib/firmware
# cp it930x-firmware.bin /lib/firmware/
# cd ..

dkmsを使ってドライバのインストール

# cp -a ./ /usr/src/px4_drv-0.1.0
# dkms add px4_drv/0.1.0
# dkms install px4_drv/0.1.0

再起動しデバイスファイルが作られているのを確認する。

# reboot

# ls -l /dev/px4*
crw-rw-r--. 1 root video 244, 0  2月 21 11:44 /dev/px4video0
crw-rw-r--. 1 root video 244, 1  2月 21 11:44 /dev/px4video1
crw-rw-r--. 1 root video 244, 2  2月 21 11:44 /dev/px4video2
crw-rw-r--. 1 root video 244, 3  2月 21 11:44 /dev/px4video3

こんな感じで表示されたら成功。

録画コマンドをインストール

# cd ~/src
# wget http://plex-net.co.jp/download/linux/Linux_Driver.zip
# unzip Linux_Driver.zip
# cd Linux_Driver/MyRecpt1/MyRecpt1/recpt1
# sed -i".org" 's/-DTV/video/g' pt1_dev.h
# make clean
# sh ./configure --enable-b25
# make
# make install

インストールできたので録画を試してみよう。下記コマンドでNHKを10秒間録画してみる。

recpt1 --b25 --strip 27 10 ~/test.ts

ユーザのホームディレクトリにtest.tsとして保存される。一応視聴できるか確認しておこう。

Mirakurunの導入・設定

github.com

# npm install mirakurun -g --unsafe --production
# npm install rivarun -g
# npm install arib-b25-stream-test -g --unsafe

これでインストールは完了。
下記コマンドで動作確認してみる。

# pm2 status

mirakurun-serverがonlineになってたらOK。

下記コマンドでチューナーの設定をする。

# mirakurun config tuners

内容は以下の通り。

- name: PX4-S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video0 --lnb 15 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX4-S2
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video1 --lnb 15 <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を再起動し、地デジのチャンネルスキャンを行う。BS・CSは自動スキャンには対応してないらしい?

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

時間がかかるので気長に待とう。

[追記] BS・CSのチャンネルスキャンについて

MirakurunはデフォではBS・CSのチャンネルスキャンに対応していないぽいです。
そのため、下記サイトのスクリプトを使用させてもらいました。

www.jifu-labo.net

[追記終わり]

チャンネルスキャンが終わったらもう一度再起動して動作確認をしてみる。

# mirakurun restart
# rivarun --list | sed 's/},/},\n/g'
ここにスキャンしたチャンネルとか表示されるはず。

# rivarun --b25 --sid 1024 --ch GR/27 15 ~/test.ts
status: 200

status200と出てユーザディレクトリにNHKの録画ファイルが保存されていれば成功。

ログローテートの設定をしておく。

# pm2 startup
# pm2 install pm2-logrotate
# vim /etc/logrotate.d/mirakurun

中身は以下の通り。ログは毎週切り替え1年保存する。

/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
/{
  compress
  rotate 53
  missingok
  notifempty
}

EPGStationの導入・設定

github.com

まずffmpegを入れる。
ここの自動ビルドスクリプトを使用した。

www.jifu-labo.net

mariadbも入れる

# yum install mariadb mariadb-server

# vim /etc/my.cnf
[mysqld]
色々
character-set-server=utf8
↑これを追加

# systemctl enable mariadb
# systemctl start mariadb
# mysql_secure_installation
よしなに設定する

mariadbに入りDBとユーザを作っておく。

# mysql -u root -p
> create database epgstation;
> grant all on epgstation.* to epgstation@localhost identified by 'ぱすわーどを入れる';

EPGStationのインストール。

# cd ~/src
# git clone https://github.com/l3tnun/EPGStation.git
# cd EPGStation
# npm install
# 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

設定を編集する。

# vim config/config.json
以下のように変更
- "serverPort": "8888",
+ "serverPort": "80", これはお好みで
- "dbType": "sqlite3",
+ "dbType": "mysql",
- "ffmpeg": "/usr/local/bin/ffmpeg",
- "ffprobe": "/usr/local//bin/ffprobe",
+ "ffmpeg": "/usr/local/ffmpeg_build/bin/ffmpeg",
+ "ffprobe": "/usr/local/ffmpeg_build/bin/ffprobe",
以下追加
    "streamFilePath": "/tmp",
    "recirded": "/mnt/nas/TVCap_buf(ここは適当に)",
    "mysql": {
        "host": "localhost",
        "port": 3306,
        "user": "epgstation",
        "password": "さっき設定したぱすわーど",
        "database": "epgstation",
        "connectTimeout": 20000,
        "connectionLimit": 10
    }

EPGStationの起動

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

ここまでできたらブラウザでサーバのIP:ポート番号にアクセスしてみる。

f:id:mnao_305:20190221202852p:plain

やったね!とりあえず成功です。
実運用に入る前にライブ視聴や録画が実際にできるか確認しておこう。

参考

録画サーバ構築の前準備(CentOS 7編)、Chinachu・epgrec UNA対応 | 自分に負けないラボラトリー

PLEX社製TVチューナーの非公式Linuxドライバインストール方法 | 自分に負けないラボラトリー

Linuxで録画鯖を建てる #03「CentOS7.5 + Mirakurun + Chinachu」 - ゎぃゎぃのおもちゃ箱

Mirakurunのインストール手順(Ubuntu・Debian・CentOS) | 自分に負けないラボラトリー

水珈琲の日誌

Mirakurunのチャンネル設定更新スクリプトを作ってみた | 自分に負けないラボラトリー