Raspberry pi 3 と KTV-FSUSB2 で録画鯖を作った

言いたいことなど

先にあとがき

実運用というより今後のためのテスト目的だったが、そういった意味ではうまく行った。
苦労したくないなら、ハードウェアは新しいものを使ったほうが情報が集まりやすくて良いのではないかと思う。

後日談

NFSを使ってファイル鯖に動画を保存するようなことも試したが、
ラズパイ3のエンコードはおそすぎるので役割を分割し、
EPGStation は自作ファイル鯖で動作させるようにした。
また、ラズパイ3は100Mbpsの有線ネットワークなので、
Gigabit対応のUSBのLAN(ただしUSB2.0接続なので、480Mbpsが上限)を接続し、
有線の速度をマシにした。
テストは無事だったのでラズパイ4買うか。

使用したもの

  • ラズパイ3
  • microSD 32GB
  • KTV-FSUSB2(10年程前にpatchV2適用済み)
  • 青BCASカード
  • カードリーダーは不要。カードはFSUSB2本体に挿して使う。

作業の流れ

OSの準備

Raspberry Pi 初期設定

RECFSUSB2Nのインストール

# インストール
sudo apt install gcc g++ libboost-thread-dev libboost-system-dev libboost-filesystem-dev
git clone https://github.com/stz2012/recfsusb2n.git
cd recfsusb2n
make
sudo make install
sudo gpasswd -a pi video
sudo reboot
# 確認
lsusb | grep 0511
# => "Bus 001 Device 004: ID 0511:0029 N'Able (DataBook) Technologies, Inc."

# 録画テスト ※地域に合わせてチャンネル指定を。
# https://www.maspro.co.jp/contact/bro/bro_ch.html
# 下記の例だと、26チャンネルを30秒録画する
recfsusb2n -bv 26 30 test.ts

別の端末に持ってきて適当なプレイヤーで再生テストする。
scp user@ip:test.ts .

再生できたらもう作業の殆どが終わり。

Mirakurunのインストール

当初Docker版を入れようとしてたが、
armは非対応だったため、npmでインストールすることになった。
公式ドキュメントはこちらだが、
nodejs ver.14 だとEPGStationが対応してないようなので、ver.12で以下のように入れた。

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install pm2 -g
sudo npm install mirakurun -g --unsafe-perm --production
# 必要であれば編集する
sudo mirakurun config server
# RECFSUSB2Nとの連携を設定する
sudo mirakurun config tuners
#- name: KTV-FSUSB2
#  types:
#    - GR
#  command: recfsusb2n -bv <channel> - -
#  isDisabled: false

# 東京タワー以外の方はチャンネルも更新する
# 先程のマスプロのリンク参照
sudo mirakurun config channels

# 起動
sudo mirakurun start
sudo mirakurun status

# テスト
curl http://localhost:40772/api/version
バージョンが返ってきたらOK

EPGStation のインストール

公式ドキュメント通り進める。

git clone https://github.com/l3tnun/EPGStation.git
cd EPGStation/
npm install --no-save
cp config/config.sample.json config/config.json
cp config/operatorLogConfig.sample.json config/operatorLogConfig.json
cp config/serviceLogConfig.sample.json config/serviceLogConfig.json
## ffmpeg ffprobe のパスの書き換え
vi config/config.json
#    "ffmpeg": "/usr/bin/ffmpeg",
#    "ffprobe": "/usr/bin/ffprobe",

# encoder はlibx264だと現実的な速度がでないので、h264_omx を利用したほうが良いと思われる。
# 下のブロックに変更内容を記載する。

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

# 動作確認
curl -I http://localhost:8888/
$ # エンコードは最低レベルの変更で以下のように変更した。
$ #yadifを入れると、変換速度が半分ほどになり、15fpsほどしか出ないので速度重視なら抜いてもいいかも。
$ git diff
diff --git a/config/enc.js b/config/enc.js
index 81ae7c8..8e9191f 100644
--- a/config/enc.js
+++ b/config/enc.js
@@ -11,7 +11,8 @@ const videoHeight = parseInt(process.env.VIDEORESOLUTION, 10);
 const isDualMono = parseInt(process.env.AUDIOCOMPONENTTYPE, 10) == 2;
 const audioBitrate = videoHeight > 720 ? '192k' : '128k';
 const preset = 'veryfast';
-const codec = 'libx264';
+const codec = 'h264_omx';
+const bitrate = '3000k';
 const crf = 23;
 
 const args = ['-y', '-analyzeduration', analyzedurationSize, '-probesize', probesizeSize];
@@ -32,9 +33,9 @@ Array.prototype.push.apply(args,['-movflags', 'faststart']);
 
 // video filter 設定
 let videoFilter = 'yadif';
-if (videoHeight > 720) {
-    videoFilter += ',scale=-2:720'
-}
+//if (videoHeight > 720) {
+//    videoFilter += ',scale=-2:720'
+//}
 Array.prototype.push.apply(args, ['-vf', videoFilter]);
 
 // その他設定
@@ -42,7 +43,8 @@ Array.prototype.push.apply(args,[
     '-preset', preset,
     '-aspect', '16:9',
     '-c:v', codec,
-    '-crf', crf,
+    '-b:v', bitrate,
+//    '-crf', crf,
     '-f', 'mp4',
     '-c:a', 'aac',
     '-ar', '48000',

楽しむ

ローカルネットワーク内のブラウザから
http://<IP of RaspberryPi>:8888/
にアクセスして表示されたら作業完了。

CentOSが7.8にアップグレードしてたけど、zfsが対応してないようなのでダウングレードした

ファイルサーバにつながらなくてサーバを再起動したのですが、
やはりつながらない。
軽く確認したところ、
[root@xfs ~]# zpool list
The ZFS modules are not loaded.
Try running '/sbin/modprobe zfs' as root to load them.
[root@xfs ~]# /sbin/modprobe zfs
modprobe: FATAL: Module zfs not found.

また、このパターン

そして、
[root@xfs ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@xfs ~]# history | grep zfson
258 sudo yum install http://download.zfsonlinux.org/epel/zfs-release.el7_7.noarch.rpm
259 gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux

バージョンあってなさそう。。

公式リポジトリを確認したことろ、7.8対応のバージョンはまだなさそう。
ということで、CentOSのバージョンを落とすことに。

ダウングレードした後は、reboot
そして、zfsを最初からインストールし直し。

[root@xfs ~]# zpool list
The ZFS modules are not loaded.
Try running '/sbin/modprobe zfs' as root to load them.
[root@xfs ~]# /sbin/modprobe zfs
modprobe: FATAL: Module zfs not found.

まだ動かない。
カーネルのバージョンが問題の様子(7.8導入のカーネルが動いている)
[root@xfs ~]# uname -r
3.10.0-1127.el7.x86_64

ということで、古いカーネルをインストール(削除したので)
[root@xfs ~]# yum install kernel.x86_64 0:3.10.0-1062.el7

マシンを再起動し、起動中のカーネル選択画面で、1062を選択
無事起動したら、最新カーネルを削除する
[root@xfs ~]# yum remove kernel-3.10.0-1127.el7.x86_64

そして、改めてzfsの再インストール
再度、reboot
そして、、復活!!

自宅マシンとは言え、勝手にバージョンが上がるのは問題あるなと痛感。

Ubuntu 20.04 LTS に steam-launcher をインストールしてみた

インストールしようとするとエラーに

公式サイトからdebファイルがDLできるのですが、
以下の通り、そのままではインストールできませんでした。

$ sudo apt install ~/Downloads/steam_latest.deb
[sudo] password for username:
Reading package lists… Done
Building dependency tree
Reading state information… Done
Note, selecting 'steam-launcher' instead of '/home/username/Downloads/steam_latest.deb'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
steam-launcher : Depends: python but it is not installable
E: Unable to correct problems, you have held broken packages.

書いてある通りなんですが、pythonというコマンドが使えないため、エラーとなっています。

というのも、デフォルトでpython3がインストールされており、
コマンドもpython3です。
$ which python
$ which python3
/usr/bin/python3

対処方法

こちらに書いてありました。

ダウンロードする。
$ wget https://repo.steampowered.com/steam/archive/precise/steam-launcher_latest-beta_all.deb
インストールする
$ sudo apt install ~/Downloads/steam-launcher_latest-beta_all.deb

私の場合はこれで行けました。
またすぐに更新されると思うので、そのうち通常版でインストールできるようになると思いますが、念の為。

Ubuntu 20.04 インストール後諸々設定

言語

language support を起動すると勝手に言語ファイルをDLしてくれる。
そのなかにMozcも含まれるので、Setting – Region & Language より Japanese – Japanese[Mozc] を追加できるようになる。

CapslockをCtrlにする

まず、Tweaksのインストール

sudo apt install gnome-tweaks

Tweaks 起動
Keyboard & Mouse へ

Additinal Layout Optionsボタンを押す
Caps Lock behavior より好みにあったものを選ぶ

省電力設定1

参考:https://do-you-linux.com/blog/2018/07/14/ubuntu%E3%81%AE%E3%83%90%E3%83%83%E3%83%86%E3%83%AA%E3%83%BC%E3%82%92%E6%9C%80%E5%A4%A7%E9%99%90%E3%81%AB%E4%BC%B8%E3%81%B0%E3%81%97%E6%9A%91%E3%81%84%E5%A4%8F%E3%82%92%E4%B9%97%E3%82%8A%E5%88%87/
※powertop の終了は正しくは、[ESC]です。

省電力設定2

cpufreqを使う!
ブラウザエクステンションのインストール
https://extensions.gnome.org/extension/1082/cpufreq/
chrome-gnome-shellのインストール
sudo apt-get install chrome-gnome-shell

右上のボタンでONにする
設定画面サンプル

省電力設定3

NVIDIA GPU 無効化!
場合によっては本末転倒ですが、
これをやったらうるさかったファンが静かになりました。

intel を選択した後、再起動する。

デフォルトがパフォーマンスモードだったので、かなり変わると思われます。

Ubuntu 20.04 LTS の インストールNVIDIAドライバ変更

GeForce MX250 という半端なGPUが乗っているラップトップですが、
少し不安定なので、次はグラフィックのドライバを更新することに。

調べたところ、Software & Updates にドライバの変更ができる画面があるので、
こちらで変更することでハマることなく変更が可能。
NVIDIA公式サイトでも440が最新のようだったので、新しさも問題ないようです。

デフォルトではNouveauが選択されている
最新のNVIDIAドライバへ変更

インストール後、ユーザログイン後の変な待ち時間が短縮され、安定を感じています。