Skip to content

amaya382/docker-mirakurun-chinachu-encoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

docker-mirakurun-chinachu-encoder

公式実装 をベースに, より軽量に, 更に録画後エンコード機能をデフォルトで内蔵

Raw size

mirakurun 82.6MB -> 69MB
chinachu 641MB -> 473MB

Contents

Mirakurun

  • Alpine Linux 3.11
  • Mirakurun
    • branch: master (v2.2.0)

Chinachu

  • Alpine Linux 3.7
  • Chinachu
    • branch: gamma

Encoder

  • Preconfigured ffmpeg-based encoding (configurable)

Test Environment

  • CPU: i3-2100T
  • OS: Ubuntu 16.04.2
  • Tuner: PT3
  • Card Reader: SCR3310-NTTCom
  • Docker Engine: 17.03.0-ce
  • Docker Compose: 1.8.1

Prerequisites (ホスト)

  • Docker環境
    • Docker Engine 1.10+
    • Docker Compose 1.6+
  • SELinux無効化
  • Tuner / Tuner Driver
    • 以下PT3の例
sudo sh -c "echo \"blacklist earth-pt3\" >> /etc/modprobe.d/blacklist.conf"
git clone https://github.com/m-tsudo/pt3.git
cd pt3
make
sudo make install
sudo $SHELL ./dkms.install
# sudo reboot
  • Card Reader
  • [OPT] ホストでpcscdを動かしている場合は停止する
sudo systemctl stop pcscd.socket
sudo systemctl disable pcscd.socket
  • [OPT] VA-API Driver

Usage

起動/停止

runtime/ で実行する

docker-compose up -d
docker-compose down

初期設定

全てホストから設定する. 別環境で利用していた設定がある場合でも config.json は本プロジェクト既定の設定があるため以下の手順で設定を行う.

1. コンテナ設定

runtime/docker-compose.yml を調整する

  • Tunerデバイス
    • mirakurun > devices
  • CardReaderデバイス (lsusb 等で特定する. 物理ポートを変更するとここの設定も変わるので注意)
    • mirakurun > devices
  • 録画ファイルの保存先
    • chinachu > volumes > recorded
  • Chinachu WebUIのポートバインド
    • chinachu > ports
  • 実行UID (普段使いアカウントのUIDを推奨)
    • chinachu > environment > CHINACHU_UID
  • [OPT] Chinachu VA-API
    • chinachu > devices
    • chinachu > environment > VAAPI_ENABLED
    • chinachu > environment > VAAPI_DEVICE
  • デーモン化
    • * > restart

2. チューナ設定

docker exec -it mirakurun mirakurun config tuners
docker exec mirakurun mirakurun restart

以下PT3の例

- name: PT3-S0
  types:
    - BS
    - CS
  command: recpt1 --device /dev/pt3video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT3-S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/pt3video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT3-T0
  types:
    - GR
  command: recpt1 --device /dev/pt3video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT3-T1
  types:
    - GR
  command: recpt1 --device /dev/pt3video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

3. チャンネル設定

自動チャンネルスキャンを行う

docker exec chinachu curl -X PUT 'http://mirakurun:40772/api/config/channels/scan'

ただし地上波のみなので (v2.2.0現在), BS・CSを利用する場合は以下のコマンドから手動で設定する

docker exec -it mirakurun mirakurun config channels

4. chinachu設定

適宜WebUI (http://localhost:20772) から行う

  • WUI (w/ Basic認証), ユーザ名/パスワード (デフォルトは認証なし)
  • 録画ファイル名フォーマット
    ここではTSファイルのフォーマットを指定する. 拡張子は *.m2ts から 変更しない こと. デフォルトでは自動エンコード後に *.mp4 に置き換えられる.
  • uid, gid, mirakurunPath, recordedDir, vaapiEnabled, vaapiDevice, storageLowSpaceCommand, recordedCommand変更しない こと
    • VA-API関係は runtime/docker-compose.yml 内のデバイスと環境変数の項目
    • recordedDir/usr/local/chinachu/recorded に対応するホスト側マウントパス
    • storageLowSpaceCommandruntime/chinachu/storage_low_space_command を, recordedCommandruntime/chinachu/recorded_command を直接編集

5. エンコード設定

デフォルトでは録画終了時に v: libx264, a: aac, preset: veryfast, vf: yadif, tune: animation (if catecory is 'anime') or film (otherwise) でエンコードを行い, 元ファイルを recorded/dump に退避させつつ置き換える. 必要に応じて runtime/chinachu/recorded_command で設定する.

6. 再起動

一通り初期設定が完了したらコンテナを再起動する

docker-compose down && docker-compose up -d

再起動後に全ての設定が反映され, そのまま録画を行うことで自動エンコードも実行される. ストリーミング再生時には MP4 > 無変換 を選択することで, 自動エンコードを前提としたCPU負荷の少ないストリーミングが可能 (独自実装).

Migration

非Docker環境からの移行

設定ファイル (chinachuの rules.json, data/*.json) を runtime/ にコピーする. rules.jsonruntime/conf 配下に置くこと. config.json は本プロジェクト独自の設定があるため, 単純なコピーはせずに初回起動時に自動生成されたものをベースに手動で設定する必要がある.

本プロジェクト内でのバージョンアップ移行

  • config.jsonrules.jsonruntime/conf 下に移動
  • docker-compose.yml 内の設定項目も一部変化している

Others

  • 各種設定ファイルはホストの runtime/ 下に永続化される
  • 録画失敗防止の為, 永続化された設定ファイル・録画ファイルは起動時に所有者が $CHINACHU_UID に変更される. 2回目以降の起動時に別のUIDにすることも可能
  • アップデートはイメージ単位で行うことを想定 (chinachu updater は利用できない)
  • エンコード元のTSファイルは runtime/recorded/dump 下に蓄積される. デフォルトでは storageLowSpaceCommand によって古くなると削除され, storageLowSpaceAction の管理からは外れている
  • エンコードに途中で失敗した場合, コンテナ再起動時に自動的に再試行される

Bugs / Future Works

See Issues

Acknowledgements

本プロジェクトは Chinachu/docker-mirakurun-chinachu を元に作られています