Raspberry Pi 4 Model B 8GB(Revision:d03114)でDTVをやってみたくなったのでEPGStationを構築した。
MirakurunはMirakurunのchinachuかEPGStationで放送番組の視聴・録画・管理を行えば良いのでおさしみくんはEPGStationを選択っす!
インストール済みか確認
$ apt list --installed | grep nodejs ffmpeg python gcc
一覧表示... 完了
ffmpeg/testing,now 7:4.1.6-1~deb10u1+rpt1 armhf [インストール済み]
gcc/stable,now 4:8.3.0-1+rpi2 armhf [インストール済み]
grep/stable,now 3.3-1 armhf [インストール済み]
nodejs/stable,now 10.21.0~dfsg-1~deb10u1+rpi1 armhf [インストール済み]
python/stable,now 2.7.16-1 armhf [インストール済み]
$ sudo mirakurun version
/usr/local/lib
└── mirakurun@3.3.1
インストール先を確認
FFmpeg/FFprobe についてデフォルトでは /usr/local/bin/ にインストールされていると想定しています
違う場所にインストールされている場合は config.json を修正してください
$ which ffmpeg ffprobe
/usr/bin/ffmpeg
/usr/bin/ffprobe
DBの構築
いずれかのデータベース (文字コードは utf-8 とする)
SQLite3(設定不要だが検索機能に制限あり)[標準]
SQLite3 使用時の正規表現での検索の有効化について
MySQL (MariaDB)【推奨(要設定)】
PostgreSQL (version 9.5 以上)
標準で。
SQLite は標準で REGEXP 関数をサポートしておらず正規表現での検索ができません。ただし、Run-Time Loadable Extensions - SQLite にあるように実行時に自作の SQL 関数を読み込むことができます
この機能を使用して EPGStation で SQLite3 使用時でも正規表現を使えるようにする手順を紹介します
https://www.sqlite.org/2020/sqlite-amalgamation-3330000.zip
https://www.sqlite.org/2020/sqlite-src-3330000.zip
$ wget https://www.sqlite.org/2020/sqlite-amalgamation-3330000.zip
$ wget https://www.sqlite.org/2020/sqlite-src-3330000.zip
$ unzip sqlite-amalgamation-3330000.zip
$ unzip sqlite-src-3330000.zip
$ cp sqlite-src-3330000/ext/misc/regexp.c sqlite-amalgamation-3330000
$ cd sqlite-amalgamation-3330000
$ gcc -g -fPIC -shared regexp.c -o regexp.so
$ cp regexp.so /home/pi/EPGStation/data/
EPGStationをインストール後にconfig.jsonへ追加
"sqlite3": {
"extensions": [
"/hoge/regexp.so"
],
"regexp": true
},
EPGStationのインストール
$ git clone https://github.com/l3tnun/EPGStation.git
$ cd EPGStation
# --save オプションはnpmのversion5から要らないと思うけど公式に従ってみよう。
$ 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
設定ファイルの編集
config.json詳細マニュアルを見たほうが良いです。他にも見たほうが良いです。他も見てみてください。
$ nano config/config.json
"dbType": "sqlite3",
"sqlite3": {
"extensions": [
"/home/pi/EPGStation/data/regexp.so"
],
"regexp": true
},
"ffmpeg": "/usr/bin/ffmpeg",
"ffprobe": "/usr/bin/ffprobe",
"maxEncode": 1,
手動で起動
$ npm start
> EPGStation@1.7.6 start /home/pi/EPGStation
> node dist/server/index.js
[2020-11-06T12:41:18.865] [WARN] system - reserves.json is not found.
[2020-11-06T12:41:18.963] [WARN] system - dbinfo.json is not found.
[2020-11-06T12:41:18.975] [INFO] system - create dbinfo.json
[2020-11-06T12:41:19.010] [INFO] system - ServicesDB created
[2020-11-06T12:41:19.037] [INFO] system - ProgramsDB created
[2020-11-06T12:41:19.067] [INFO] system - RulesDB created
[2020-11-06T12:41:19.095] [INFO] system - RecordedDB created
[2020-11-06T12:41:19.129] [INFO] system - EncodedDB created
[2020-11-06T12:41:19.148] [INFO] system - RecordedHistoryDB created
[2020-11-06T12:41:19.196] [INFO] system - start Updater pid: 7734
[2020-11-06T12:41:20.216] [INFO] system - mirakurun -> services: 19
[2020-11-06T12:41:20.236] [INFO] system - insert Services done
[2020-11-06T12:41:20.579] [INFO] system - mirakurun -> programs: 5168
[2020-11-06T12:41:21.218] [INFO] system - insert Programs done.
[2020-11-06T12:41:21.228] [INFO] system - mirakurun -> tuners: 2
[2020-11-06T12:41:21.412] [INFO] system - updater done
[2020-11-06T12:41:21.430] [INFO] system - start updateAll
[2020-11-06T12:41:21.444] [INFO] system - done updateAll
自動で起動
$ sudo pm2 startup
# これでもいいや
$ sudo pm2 start dist/server/index.js --name "epgstation"
$ sudo pm2 save
詳細マニュアルにそってconfigファイルを弄り倒す
ログファイル
デフォルトではファイルサイズが 1024KB を超過するとログローテーションされます
ログファイルは 3 世代分保存され、古い方から消去されていきます
デフォからの変更はここに載っていた。おさしみくんはノータッチ。
isEnabledDropCheck:録画時のドロップチェックを有効化
dropCheckLogDir:ドロップチェック時に生成される .log ファイルの保存先
"isEnabledDropCheck": true
"dropCheckLogDir": "/hoge/fuga"
おいしい。
dbType:使用するデータベースの種類
"dbType": "mysql"
デフォルト値はmysqlなのにコピーして作成したconfigファイルにはsqlite3の指定が予め行われていた。それにした。宜しければボツ記事をどうぞ。
recorded:録画ファイル保存先
thumbnail:サムネイル画像ファイルの保存先
"recorded": "/hoge/fuga"
"thumbnail": "/hoge/thumbs"
外付けHDDであれば自動マウント設定をしてchmodで変更が必要なことも。DBのデータ(SQLite3)もHLS配信の一時領域もフルパス指定で可能。
fileExtension:録画ファイルの拡張子
MPEG2-TSの拡張子は.ts .mts .m2t .m2tsのいずれかが望ましい
ピリオド.を付け忘れないように
"fileExtension": ".m2ts"
.m2tsにした。
maxEncode:エンコードやストリーミングで使用されるプロセスの上限数
"maxEncode": 3
1にした。
basicAuth:BASIC認証の設定
"basicAuth": {
"user": "username",
"password": "password"
}
うれしい。(引用だとズレる)
subDirectory:サブディレクトリとして動作させる (リバースプロキシ利用時を想定)
http://<IPaddress>:<Port>/<subDirectory>として動作する
"subDirectory": "subdir"
うれしい。(<ul><li>としたタグ打ちできないんですか?ノートは。今更だけど。)VPNでもそれでも二刀流で嬉しさ倍増。感激で嬉し泣きぴえん🥺。
EPGStation WebAPI
EPGStation が提供する WebAPI は express-openapi によって提供される、OpenAPI (Swagger) 準拠の RESTful API です
利用可能な全ての API は Swagger UI 上で確認可能です
http://<hostname>:<port>/api/debug
Basic認証利用時のAPIアクセス
WebAPI へのアクセスにも認証が必要です http://<username>:<password>@<hostname>:<port>/api/{api-path} とすることでURLのみで認証可能です
WebAPIは物凄くおいしい。マジ嬉し泣きぴえんこえてぱおん🥺。