rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

テレビ放送受信サーバーMirakurunを「Ubuntu/Arch系Manjaro Linux・PT2チューナー・DVBブロックデバイス」構成でインストール

2021 May 15.
2021 Apr. 18.
2021 Mar. 30.
2021 Feb. 14.
2021 Jan. 01.
2020 Dec. 27.

Ubuntu 20.04 LTS desktopとArch系のManjaro LinuxにMirakurunをインストールした記録

Mirakurunとは

(mirakurun_htmlより)
チューナーをネットワーク経由で開放し、rivarunはMirakurunのapi経由でチューナーを利用することができる。
これによりMirakurunサーバは放送波を返すだけに単機能化され、クライアント側のrivarunで放送波をデコードするみたいなことが可能。
チューナーサーバと録画サーバを分離することができる。

dvbブロックデバイスで動くTVチューナーカードPT2が装着されたPCにTV受信サーバー mirakurun 3.0 docker版をインストール


pt2を取り付けたPCにLinuxをインストールするとブロックデバイスとして自動的に次の入力ポートが用意されているので、確認する。

$ ls /dev/dvb/

/dev/dvb/adapter0/ ・・・衛星放送用
/dev/dvb/adapter1/ ・・・地上デジタル
/dev/dvb/adapter2/ ・・・衛星放送用
/dev/dvb/adapter3/ ・・・地上デジタル

B-CASカードを挿入したカードリーダーをPCに接続しておく。
(カードリーダーはSCR3310-NTT Comを利用)

Dockerを使うMirakurun 3系をインストール

参考元 Ubuntu Server20.04にMirakurun+EPGStationで録画サーバを構築する | AABrain

  • Mirakurun稼働用に、tvとか任意の名前のユーザー(tvとした)をシステムに追加し、videoグループに所属させる。sudoしたいなら、Ubuntuならsudoグループに、Manjaro Linuxならwheelグループに所属させる
(Ubuntu 20.04 )
# useradd -d /home/TvUserDir -m -G video,sudo -s /bin/bash -u IDnumber -U tv

(Manjaro Linux)
# useradd -d /home/TvUserDir -m -G video,wheel -s /bin/bash -u IDnumber -U tv

# passwd tv
# reboot

  • そのユーザー(tv)でシステムにログインする。

  • githubにサインアップし、Mirakurunをインストールする一般ユーザー(tv)がSSH認証できるようにしておく

  「githubにssh認証可能」にする - rokkonet

  • 録画サーバーのIPアドレスは固定IPにしておいた方が、クライアントからのアクセスに使いやすい
  • pcscd が存在する場合は削除しておく。ICカード読み取り機能はmirakurunに含まれているのでインストール不要
  • b25デコードツールはmirakurunに含まれているのでインストール不要

  b25コマンドはmirakurunディレクトリに配置される

  • DVB用周波数設定はmirakurunが自動設定するので https://github.com/Chinachu/dvbconf-for-isdb.git からのdvbv5_channels_isdbt.conf、dvbv5_channels_isdbs.confのダウンロードは不要
  • Ubuntuでは、dvb-tools(TV受信コマンドdvbv5-zap)をインストールしておく
$ sudo apt install dvb-tools

  • Manjaro Linuxでは、dvbv5-zapはv4l-utilsに含まれる。


ubuntu
(Dockerインストール)

$ su - tv

(ubuntu)
$ sudo apt update
$ sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

$ sudo apt update

$ sudo apt install docker-ce docker-ce-cli containerd.io

(Docker Composeインストール)

$ su - tv
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

## enable docker command from user
$ sudo usermod -aG docker $USER



(Manjaro Linux
(Dockerパッケージ、Docker Composeパッケージインストール)

$ sudo pacman -Syu

(Dockerパッケージ、Docker Composeパッケージをインストールする)
$ sudo pacman -S docker docker-compose

## enable docker command from user
$ sudo usermod -aG docker $USER


  • 上記までのDocker、Docker Composeインストールが終了したら、ログアウト/再起動し、ユーザーのdockerグループへの所属を反映する
$ sudo reboot


ユーザーtvがdockerグループとvideoグループに所属していることを確認する

$ cat /etc/group | grep tv

$ su - tv
$ cd ~/
$ git clone git@github.com:Chinachu/Mirakurun.git

$ cd ~/Mirakurun/docker
$ docker-compose pull

  • mirakurun初回セットアップでtuners.ymlを自動生成させるので、~/Mirakurun/config/tuners.ymlを別ファイル名に変更する
$ mv ~/Mirakurun/config/tuners.yml ~/Mirakurun/config/tuners.yml,original

  • 40772ポートをLAN内に開放
$ sudo ufw enable
$ sudo ufw allow proto tcp from YOUR.NETWORK.ADDRESS.0/24 to any port 40772
$ sudo ufw allow proto udp from YOUR.NETWORK.ADDRESS.0/24 to any port 40772
$ sudo ufw reload

  • OpenVPNクライアントからのアクセス許可

$ sudo ufw enable
$ sudo ufw allow proto tcp from 10.8.0.0/24 to any port 40772
$ sudo ufw allow proto udp from 10.8.0.0/24 to any port 40772
$ sudo ufw reload

  • mirakurun初回セットアップ
$ cd ~/Mirakurun/docker
$ docker-compose run --rm -e SETUP=true mirakurun

## /usr/local/mirakurun/config/tuners.ymlが生成される
## また、生成されたchannels.ymlは不完全なものとなっているが、あとでチャンネルスキャンを行うのでそのままにしておく。

  • 生成されたtuners.yml
- name: adapter0
  types:
    - BS
    - CS
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 0 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbs.conf
    -r -P <channel>
- name: adapter1
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter1/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 1 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf
    -r -P <channel>
- name: adapter2
  types:
    - BS
    - CS
  dvbDevicePath: /dev/dvb/adapter2/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 2 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbs.conf
    -r -P <channel>
- name: adapter3
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter3/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 3 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf
    -r -P <channel>


・mirakurun起動

$ cd ~/Mirakurun/docker
$ docker-compose up -d
## http://localhost:40772/ にアクセスして確認する
## 正常にインストールされていれば、次回からPC起動すればログインせずとも自動起動される

  • ログの確認
$ cd ~/Mirakurun/docker
$ docker-compose logs -f    # 標準出力にリアルタイムに出力
$ docker-compose logs       # その時点のログを標準出力に

  • チャンネルスキャン
$ su - tv
$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

スキャンが終わったらmirakurunを再起動して設定を反映する。

$ cd ~/Mirakurun/docker/
$ docker-compose down
$ docker-compose up -d

  • チャンネル設定状況確認

http://localhost:40772/api/channels にアクセスする

  • /usr/local/mirakurun/config/channels.ymlを自分に合ったチャンネル設定に修正する

各チャンネルのServiceIDの区分は自動的に生成される/usr/local/mirakurun/data/services.jsonに保存される。

(my channel.yml)

- name: NHK総合
  type: GR
  channel: '22'
  isDisabled: false
- name: NHKEテレ
  type: GR
  channel: '13'
  isDisabled: false
- name: サンテレビ
  type: GR
  channel: '26'
  isDisabled: false
- name: MBS毎日放送
  type: GR
  channel: '16'
  isDisabled: false
- name: ABCテレビ
  type: GR
  channel: '15'
  isDisabled: false
- name: テレビ大阪
  type: GR
  channel: '18'
  isDisabled: false
- name: 関西テレビ
  type: GR
  channel: '17'
  isDisabled: false
- name: 読売テレビ
  type: GR
  channel: '14'
  isDisabled: false
- name: J:COMテレビ
  type: GR
  channel: '19'
  isDisabled: false
- name: J:COMチャンネル
  type: GR
  channel: '24'
  isDisabled: false
- name: NHK BS1
  type: BS
  channel: BS15_0
  serviceId: 101
- name: NHK BS1 (Sub)
  type: BS
  channel: BS15_0
  serviceId: 102
- name: NHKBSプレミアム
  type: BS
  channel: BS03_1
  serviceId: 103
- name: NHKBSプレミアム
  type: BS
  channel: BS03_1
  serviceId: 104
- name: BS日テレ
  type: BS
  channel: BS13_0
  serviceId: 141
- name: BS日テレ
  type: BS
  channel: BS13_0
  serviceId: 142
- name: BS朝日1
  type: BS
  channel: BS01_0
  serviceId: 151
- name: BS朝日2
  type: BS
  channel: BS01_0
  serviceId: 152
- name: BS-TBS
  type: BS
  channel: BS01_1
  serviceId: 161
- name: BSテレ東
  type: BS
  channel: BS01_2
  serviceId: 171
- name: BSフジ・181
  type: BS
  channel: BS13_1
  serviceId: 181
- name: WOWOWプライム
  type: BS
  channel: BS03_0
  serviceId: 191
  isDisabled: true
- name: WOWOWライブ
  type: BS
  channel: BS05_0
  serviceId: 192
  isDisabled: true
- name: WOWOWシネマ
  type: BS
  channel: BS05_1
  serviceId: 193
  isDisabled: true
- name: BS11イレブン
  type: BS
  channel: BS09_0
  serviceId: 211
- name: TwelV
  type: BS
  channel: BS09_2
  serviceId: 222
- name: BSスカパー!
  type: BS
  channel: BS11_1
  serviceId: 241
  isDisabled: true
- name: 放送大学231ch
  type: BS
  channel: BS11_2
  serviceId: 231
- name: 放送大学232ch
  type: BS
  channel: BS11_2
  serviceId: 232
- name: テレ朝チャンネル1
  type: CS
  channel: CS2
  serviceId: 298
  isDisabled: true
- name: テレ朝チャンネル2
  type: CS
  channel: CS2
  serviceId: 299
  isDisabled: true
- name: AT-X
  type: CS
  channel: CS16
  serviceId: 333
  isDisabled: true
- name: 日テレプラス
  type: CS
  channel: CS24
  serviceId: 300
  isDisabled: true
- name: AT-X HD
  type: SKY
  channel: ATXHD
  serviceId: 33435
  satellite: JCSAT3A
  isDisabled: true
- name: AXN HD
  type: SKY
  channel: AXNHD
  serviceId: 33418
  satellite: JCSAT4A
  isDisabled: true
- name: BS SPTV
  type: SKY
  channel: CH585
  serviceId: 33353
  satellite: JCSAT3A
  isDisabled: true

  • mirakurun再起動(設定変更反映)
$ cd ~/Mirakurun/docker/
$ docker-compose down
$ docker-compose up -d

  • mirakurun設定ファイルは /usr/local/mirakurun/config に置かれる。

  • EPG番組情報取得間隔設定

 /usr/local/mirakurun/config/server.ymlに記述する。
 数値の単位はミリ秒。
 https://yabumi.cc/api/images/15972f6148a46d9d4265933b.pdf を参照方。
   programGCInterval:イベント情報ガベージコレクション間隔。初期値15分で随時最適値に更新される
  epgGatheringInterval:EPG 採集間隔。初期値15分で随時最適値に更新される
  epgRetrievalTime:EPG 最大取得時間。初期値10分で随時最適値に更新される

(/usr/local/mirakurun/config/server.yml)
programGCInterval: 86400000  # イベント情報ガベージコレクション間隔を24時間に
epgGatheringInterval: 86400000  # EPGを更新した後の休止時間を24時間に


 /usr/local/mirakurun/config/server.ymlの編集後、設定を反映する。
 docker-composeコマンドによる設定反映をせずにPCの再起動をしても反映されない。

$ cd ~/Mirakurun/docker/
$ docker-compose down
$ docker-compose up -d


コマンドライン録画ツールrivarun

(インストール)

(npm(Node Package Manager)をインストール)
(Ubuntu)
$ sudo apt install npm

(Manjaro/Arch)
npmパッケージをインストールする

(rivarunをインストール)
$ sudo npm install rivarun -g


(録画)

$ rivarun [--b25] [--mirakurun host:port] [--priority priority] [--sid SID] [--ch type/channel] rectime destfile

例
$ rivarun --mirakurun localhost:40772 --b25 --sid 231 --ch BS/BS11_2 15 bs11_2-231.ts
$ rivarun --mirakurun localhost:40772 --b25 --ch BS/BS11_2 15 bs11_2.ts
$ rivarun --mirakurun localhost:40772 --b25 --ch GR/22 15 22.ts
$ rivarun --mirakurun localhost:40772 --b25 --sid 43008 --ch GR/22 15 22.ts

  • チャンネルリスト出力
$ rivarun --list --mirakurun localhost:40772

  • ストリーミング視聴

動画再生ソフトVLCなら「メディア->ネットワークストリームを開く」に次の書式を指定する
(URL内にチャンネルだけを指定する場合)
http://MIRAKURUN.SERVER.IP.ADDRESS:40772/api/channels/GR/ChannelNum/stream

(URL内にサービスIDまで指定する場合)
http://MIRAKURUN.SERVER.IP.ADDRESS:40772/api/channels/GR/ChannelNum/sevices/ServiceID/stream
サービスIDは http://MIRAKURUN.SERVER.IP.ADDRESS:40772/api/channels/ にアクセスすれば表示される


http://192.168.1.2:40772/api/channels/GR/22/stream
http://192.168.1.2:40772/api/channels/GR/22/services/43009/stream

  • vlcでのTV視聴に便利なチャンネルリストファイル

mirakurun を使って VLC でテレビを視聴する。 | 妄想日記 by 妄想エンジン より。
下記内容の tv_channel_list.m3u8 をvlcから開くことができる任意のディレクトリに作成する。
チャンネルを示すurl内の services/xxxx/stream のxxxxには http://localhost:40772/api/channels に表示される各チャンネルのserviceIdを記述する。
tv_channel_list.m3u8ファイルに実行属性を付与する。
vlcで「メディア->ファイルを開く」から下記のtv_list.m3u8を開き、「表示->プレイリスト」から番組を選択する。
tv_channel_list.m3u8

#EXTM3U
#EXTVLCOPT:network-caching=1000

#EXTINF:-1,地上波 - NHK総合
http://localhost:40772/api/channels/GR/22/services/43008/stream/
#EXTINF:-1,地上波 - NHK総合2
http://localhost:40772/api/channels/GR/22/services/43009/stream/
#EXTINF:-1,地上波 - NHK総合携帯神戸
http://localhost:40772/api/channels/GR/22/services/43392/stream/
#EXTINF:-1,地上波 - NHK Eテレ
http://localhost:40772/api/channels/GR/13/services/2056/stream/
#EXTINF:-1,地上波 - NHK Eテレ2
http://localhost:40772/api/channels/GR/13/services/2057/stream/
#EXTINF:-1,地上波 - NHK Eテレ3
http://localhost:40772/api/channels/GR/13/services/2058/stream/
#EXTINF:-1,地上波 - NHK Eテレ携帯
http://localhost:40772/api/channels/GR/13/services/2440/stream/
#EXTINF:-1,地上波 - サンテレビ
http://localhost:40772/api/channels/GR/26/services/43056/stream/
#EXTINF:-1,地上波 - サンテレビ2
http://localhost:40772/api/channels/GR/26/services/43057/stream/
#EXTINF:-1,地上波 - サンテレビ携帯
http://localhost:40772/api/channels/GR/26/services/43440/stream/
#EXTINF:-1,地上波 - MBS毎日放送
http://localhost:40772/api/channels/GR/16/services/2064/stream/
#EXTINF:-1,地上波 - MBS毎日放送2
http://localhost:40772/api/channels/GR/16/services/2065/stream/
#EXTINF:-1,地上波 - MBS毎日放送3
http://localhost:40772/api/channels/GR/16/services/2066/stream/
#EXTINF:-1,地上波 - MBS毎日放送携帯
http://localhost:40772/api/channels/GR/16/services/2448/stream/
#EXTINF:-1,地上波 - ABCテレビ
http://localhost:40772/api/channels/GR/15/services/2072/stream/
#EXTINF:-1,地上波 - ABCテレビ2
http://localhost:40772/api/channels/GR/15/services/2073/stream/
#EXTINF:-1,地上波 - ABCテレビ3
http://localhost:40772/api/channels/GR/15/services/2074/stream/
#EXTINF:-1,地上波 - ABCテレビ携帯
http://localhost:40772/api/channels/GR/15/services/2456/stream/
#EXTINF:-1,地上波 - テレビ大阪
http://localhost:40772/api/channels/GR/18/services/41008/stream/
#EXTINF:-1,地上波 - テレビ大阪2
http://localhost:40772/api/channels/GR/18/services/41009/stream/
#EXTINF:-1,地上波 - テレビ大阪3
http://localhost:40772/api/channels/GR/18/services/41010/stream/
#EXTINF:-1,地上波 - テレビ大阪携帯
http://localhost:40772/api/channels/GR/18/services/41392/stream/
#EXTINF:-1,地上波 - 関西テレビ
http://localhost:40772/api/channels/GR/17/services/2080/stream/
#EXTINF:-1,地上波 - 関西テレビ2
http://localhost:40772/api/channels/GR/17/services/2081/stream/
#EXTINF:-1,地上波 - 関西テレビ3
http://localhost:40772/api/channels/GR/17/services/2082/stream/
#EXTINF:-1,地上波 - 関西テレビ携帯
http://localhost:40772/api/channels/GR/17/services/2464/stream/
#EXTINF:-1,地上波 - 読売テレビ
http://localhost:40772/api/channels/GR/14/services/2088/stream/
#EXTINF:-1,地上波 - 読売テレビ2
http://localhost:40772/api/channels/GR/14/services/2089/stream/
#EXTINF:-1,地上波 - 読売テレビ3
http://localhost:40772/api/channels/GR/14/services/2090/stream/
#EXTINF:-1,地上波 - 読売テレビ携帯
http://localhost:40772/api/channels/GR/14/services/2472/stream/
#EXTINF:-1,地上波 - J:COMテレビ
http://localhost:40772/api/channels/GR/19/services/41064/stream/
#EXTINF:-1,地上波 - J:COMテレビ2
http://localhost:40772/api/channels/GR/19/services/41065/stream/
#EXTINF:-1,地上波 - J:COMチャンネル
http://localhost:40772/api/channels/GR/24/services/43128/stream/
#EXTINF:-1,地上波 - J:COMチャンネル2
http://localhost:40772/api/channels/GR/24/services/43129/stream/
#EXTINF:-1,地上波 - J:COMチャンネル3
http://localhost:40772/api/channels/GR/24/services/43130/stream/
#EXTINF:-1,BS - NHK BS
http://localhost:40772/api/channels/BS/BS15_0/services/101/stream
#EXTINF:-1,BS - NHK BS102
http://localhost:40772/api/channels/BS/BS15_0/services/102/stream
#EXTINF:-1,BS - NHK BSプレミアム
http://localhost:40772/api/channels/BS/BS03_1/services/103/stream
#EXTINF:-1,BS - NHK BSプレミアム2
http://localhost:40772/api/channels/BS/BS03_1/services/104/stream
#EXTINF:-1,BS - BS日テレ
http://localhost:40772/api/channels/BS/BS13_0/services/141/stream
#EXTINF:-1,BS - BS日テレ2
http://localhost:40772/api/channels/BS/BS13_0/services/142/stream
#EXTINF:-1,BS - BS朝日
http://localhost:40772/api/channels/BS/BS01_0/services/151/stream
#EXTINF:-1,BS - BS朝日2
http://localhost:40772/api/channels/BS/BS01_0/services/152/stream
#EXTINF:-1,BS - BS-TBS
http://localhost:40772/api/channels/BS/BS01_1/services/161/stream
#EXTINF:-1,BS - BSテレ東
http://localhost:40772/api/channels/BS/BS01_2/services/171/stream
#EXTINF:-1,BS - BSフジ
http://localhost:40772/api/channels/BS/BS13_1/services/181/stream
#EXTINF:-1,BS - BSイレブン
http://localhost:40772/api/channels/BS/BS09_0/services/211/stream
#EXTINF:-1,BS - BSトゥエルビ
http://localhost:40772/api/channels/BS/BS09_2/services/222/stream
#EXTINF:-1,BS - 放送大学ex
http://localhost:40772/api/channels/BS/BS11_2/services/231/stream
#EXTINF:-1,BS - 放送大学on
http://localhost:40772/api/channels/BS/BS11_2/services/232/stream

  • /usr/local/mirakurun/opt/node_modules/arib-b25-stream-test/bin/b25 が配置される

  コマンドラインでb25を起動すると
  error - failed on B_CAS_CARD::init() : code=-3
  となってしまう。

録画webクライアントEPGStationインストール

EPGStationを「Ubuntu20.04 + PT2 + Mirakurun」にインストール - rokkonet に記述した。

録画webクライアントchinachuインストール

TV録画システムchinachuをDocker版mirakurunシステムにインストール - rokkonet に記述した。






・dvb-toolsインストールの次に、DVB用周波数設定をインストールする(Mirakurun3系では不要)
  参考元 PT2+Mirakurun+EPGStationによる録画サーバ構築 - Qiita

$ sudo apt install git
$ cd /usr/local ※設定ファイルを/usr/local/以下に展開
$ sudo git clone https://github.com/Chinachu/dvbconf-for-isdb.git
$ ls /usr/local/dvbconf-for-isdb/conf/
## dvbv5_channels_isdbs.conf  dvbv5_channels_isdbt.confファイルの存在を確認
## dvbv5_channels_isdbt.conf: 地上波周波数ファイル
## dvbv5_channels_isdbs.conf: 衛星放送周波数ファイル


※地上波受信確認(b25エンコードされたままのデータを受信できる)

$ dvbv5-zap -a 1 -c /usr/local/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf -r -P 22 -o 22.ts
 -a 1: 入力アダプタ
 -c FILE: 周波数設定ファイル
 -r: set up /dev/dvb/adapterX/dvr0 for TS recording


※衛星放送波受信確認(b25エンコードされたままのデータを受信できる)

$ dvbv5-zap -a 0 -c /usr/local/dvbconf-for-isdb/conf/dvbv5_channels_isdbs.conf -r -P BS15_0 -o BS15_0.ts



recdvdをインストール(Mirakurun3系では不要、dvbv5-zapが使われる)
参考元 pt2 recdvb mirakurun EPGstation | asuyuki-26のブログ

libarib25をインストールしておいてから、recdvdをインストールする(Mirakurun3系では不要、pcscd、arib-b25-stream-testがインストールされる)