Raspberry Pi地デジ関連記事
※22.12.25追記:Raspbrry Pi 4をお持ちの場合、令和5年(2023年)版最新記事が御座います。
以下、令和2年(2020年)以前の記事になります。
- 2020年最終版
- 32ビット検証
- ①機材編
- ②コマンドライン録画編
- ③ストリーミング編
- Raspberry Pi 4で地デジ4チャンネル同時録画するには
- Ubuntu 20.04.1添付のffpmegは使ってはダメよ検証
- DLNA配信
以前、Rasbperry Piで、地デジを視聴するシステムを作ってみたのですが。
少々不満がありました。
録画したい番組が同じ時間で重複して、うまく録画できない場合がありました。この記事では4チャンネル同時録画可能なチューナーを取り付けて、録画したい番組をすべて録れるようにします。
また空き容量を心配しなくて済むように、USB 3.0端子に1TBのHDDを取り付けてみました。
実際に試してみたのですが、上図のように、Raspberry Pi 4で実際に4チャンネルの同時録画が可能のようです。
このようなシステムの構築手順を記録しておこうと思います。
※20.9.13追記:
半年ほど使っていましたが、microSDカードが壊れました。EPGデータの受信やmariadb等、microSDカードが酷使された感じです。
その後、実用的かつ快適な録画環境を追求したところ、最終的に64ビット+HDD版の次の記事にまとまりました。
以下32ビット+microSDカードの記事になります。
使用する機材
Raspberry Pi 4本体と起動用microSDカード
地デジの録画やエンコード等、負荷が大きいため、Raspberry Pi 4はメモリー4GBモデルを選択します。起動用のmicroSDカードは、ランダムアクセスが高速なUHS-I U3 A2対応がお勧めです。地デジの録画は外付けHDDに行うため、microSDカードの容量はそれほど大きくなくても大丈夫かと思います。USB 3.0対応外付けHDD
コンセント(電源)が付いている3.5インチの外付けHDDを取り付けるのが楽です。その場合、Raspberry Pi、HDD、チューナーの3つのコンセントが必要になります。2.5インチのHDDを取り付けてコンセントを節約したい場合、こちらの記事をご覧下さい。
B-CASカードとICカードリーダ
こちらのカードリーダを使用してみました。4チャンネル対応フルセグ地デジチューナ
録画・視聴したい番組が重なった場合。予約を削除したり何だり調整が面倒ですし、まあどうせなら両方視聴・録画できたほうが便利ということで。通常のチューナと比較して価格は高いですが、見たいと思った番組はほぼ全て視聴・録画できるメリットは大きいかと思います。機材の接続
コンセントは2つ使用しますが、チューナのコンセントをUSBに変換できれば、使用するコンセントは1つで済む感じもします。このあたりは、あとで実験しようと思います。
B-CASカードは、白い面、電極がある面を上にして刺します。
USB端子は、HDD、B-CASカード、チューナで3つ消費します。
マウスとキーボードを接続しようとすると、端子が足りませんが・・・USB端子1つで、マウスとキーボードを同時に接続したい場合、こちらの記事を御覧ください。
ICカードリーダは、実際に地デジを視聴・録画する時に接続すれば良いため、セットアップ中は外しておいても大丈夫だったりします。
地デジ4チャンネル同時視聴・録画システムの構築 Raspbian・EPGStation編
Raspbianのインストール
使用するOSは、Raspbianをお勧め致します。初期設定は次の記事を御覧ください。
Raspbian Liteでも試したのですが、EPGStationのビルドに失敗して、うまく動かすことができませんでした。
通常版のRaspbianを使用しましょう。
外付けストレージのオートマウント
録画用のストレージは、autofs(オートマウント)でマウントしようと思います。アクセスがない場合、自動的にアンマウントされるため、ストレージの寿命を延ばす効果に期待できそうです。
最初に外付けストレージにファイルシステムを作成(フォーマット)します。
sudo fdisk /dev/sda
# Linuxパーティション作成
sudo mkfs.ext4 /dev/sda1
autofsをインストールして、/usb/hdd1にマウントする設定を行いました。
※録画の遅延が発生しないように、timeout=0の設定を追加しました。
sudo apt install autofs
# USB接続ストレージは/usbディレクトリにマウントしようと思います
sudo mkdir /usb
# /etc/auto.master.d/usb.autofsファイル作成
echo "/usb /etc/auto.usb --timeout=0" | sudo tee /etc/auto.master.d/usb.autofs
# /etc/auto.usbファイル作成
echo "hdd1 -fstype=ext4,rw :/dev/disk/by-uuid/"`sudo blkid /dev/sda1 | grep -o '\sUUID=\"[0-9a-f\-]*\"' | grep -o '[0-9a-f\-]*'` | sudo tee -a /etc/auto.usb
# autofsサービス有効化
sudo systemctl enable autofs --now
再起動して設定変更を反映しました。
sudo reboot
再起動後、/usb/hdd1にアクセスすると、ストレージが自動マウントされました。
1TBの外付けHDDを接続、ext4でフォーマットしましたが、空き容量は870GBあります。当分、録画可能な容量を心配せずに済みそうです。
DVBインタフェース設定
Siano Rio DVBインタフェース用のファームウェアを/lib/firmwareにコピーします。
curl -O http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
unzip PX-S1UD_driver_Ver.1.0.1.zip
sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
USBチューナを取り付けます。正しく認識されているか確認してみました。
ls /dev/dvb/adapter*
B-CASカードの確認
ICカードリーダを接続、B-CASカードを使用するため、pcscdをインストールしました。
sudo apt install -y pcscd pcsc-tools libpcsclite-dev
sudo pcsc_scan
Japanese Chijou Digital B-CAS Cardとして認識されているようです。
node.js、PM2インストール
視聴・録画システムは、EPGStationを使用させて頂こうと思います。EPGStationを動かすため、Miraurunのインストールが必要です。Mirakurun・EPGStationともにnode.jsで実装されているようです。node.js、PM2をインストールしましょう。
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install pm2 -g
Mirakurunインストール
MirakurunのAdvancedインストールを行いました。
sudo npm install mirakurun -g --production
sudo mirakurun init # to install as service
sudo mirakurun restart # when updated
dvbv5インストール
Mirakurunで使用するDVBツールをインストールしておきます。
sudo apt install -y dvb-tools
cd /usr/local
sudo mkdir conf
cd conf
sudo curl -O https://raw.githubusercontent.com/Chinachu/dvbconf-for-isdb/master/conf/dvbv5_channels_isdbt.conf
それとデコーダのテスト用にarib-b25-stream-testをインストールしました。
sudo npm install arib-b25-stream-test -g --unsafe
Mirakurun設定
サーバ設定確認
sudo mirakurun config server
チューナー設定
sudo mirakurun config tuners
4チャンネル同時録画可能なチューナ設定を追加します。
- name: PX-S1UD_0
types:
- GR
command: /usr/bin/dvbv5-zap -a 0 -c /usr/local/conf/dvbv5_channels_isdbt.conf -r -P <channel>
dvbDevicePath: /dev/dvb/adapter0/dvr0
decoder: arib-b25-stream-test
isDisabled: false
- name: PX-S1UD_1
types:
- GR
command: /usr/bin/dvbv5-zap -a 1 -c /usr/local/conf/dvbv5_channels_isdbt.conf -r -P <channel>
dvbDevicePath: /dev/dvb/adapter1/dvr0
decoder: arib-b25-stream-test
isDisabled: false
- name: PX-S1UD_2
types:
- GR
command: /usr/bin/dvbv5-zap -a 2 -c /usr/local/conf/dvbv5_channels_isdbt.conf -r -P <channel>
dvbDevicePath: /dev/dvb/adapter2/dvr0
decoder: arib-b25-stream-test
isDisabled: false
- name: PX-S1UD_3
types:
- GR
command: /usr/bin/dvbv5-zap -a 3 -c /usr/local/conf/dvbv5_channels_isdbt.conf -r -P <channel>
dvbDevicePath: /dev/dvb/adapter3/dvr0
decoder: arib-b25-stream-test
isDisabled: false
31行、チューナ設定を追加しました。PX-S1UD_0からPX-S1UD_3までのエントリを追加しました。
mirakurunを再起動しました。
sudo mirakurun restart
チャンネル設定
チャンネルを手動で編集する場合。
sudo mirakurun config channels
下記の内容(餃子のまち向け)を入力しました。
- name: TBS
type: GR
channel: '15'
- name: テレビ朝日
type: GR
channel: '17'
- name: テレビ東京
type: GR
channel: '18'
- name: とちぎテレビ
type: GR
channel: '29'
- name: 日テレ
type: GR
channel: '34'
- name: フジテレビ
type: GR
channel: '35'
- name: NHKEテレ
type: GR
channel: '39'
- name: NHK総合
type: GR
channel: '47'
オートスキャンする場合、次のコマンドのようです。
sudo curl -X PUT "http://localhost:40772/api/config/channels/scan"
mirakurun再起動後、設定変更が反映されているか確認しました。
sudo mirakurun restart
curl http://localhost:40772/api/tuners
curl http://localhost:40772/api/channels
mariadbインストール
EPGStationで使用するデータベース、mariadbをインストールしておこうと思います。
sudo apt install -y mariadb-server
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
75行目付近のexpire_logs_daysを1に変更しました。mariadbの初期設定を行います。
sudo mysql_secure_installation
- rootパスワードを入力
- 必要があれば、rootパスワードを変更
- anonymousユーザ削除
- リモートログイン無効化
- テストデータベース削除
- 特権テーブル再読み込み
EPGStation用のデータベースを作成します。
sudo mysql -u root -p
CREATE DATABASE epgstation CHARACTER SET utf8mb4;
GRANT ALL ON epgstation.* TO epgstation@localhost IDENTIFIED BY 'epgstation';
GRANT ALL ON epgstation.* TO epgstation@127.0.0.1 IDENTIFIED BY 'epgstation';
exit
EPGStationインストール
たっぷり録画できるように。オートマウントした外付けUSBストレージにEPGStationをインストールしようと思います。
sudo apt install git cd /usb/hdd1 sudo chown -R pi:pi . git clone https://github.com/l3tnun/EPGStation.git cd EPGStation # rm -fr node_modules package-lock.json npm run all-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
config.jsonファイルを編集します。
vi config/config.json
dbTypeを変更、mysqlセクションを追加、ffmpegとffprobeのパスを変更しました。
"dbType": "mysql", "mysql": { "host": "localhost", "port": 3306, "user": "epgstation", "password": "epgstation", "database": "epgstation", "connectTimeout": 20000, "connectionLimit": 10 }, "ffmpeg": "/usr/bin/ffmpeg", "ffprobe": "/usr/bin/ffprobe",
EPGStationを起動後、自動起動するように設定しました。
sudo pm2 start dist/server/index.js --name "epgstation"
sudo pm2 save
※20.3.20追記:
Raspberry Pi 4のH264ハードウェアエンコードを使用するため、ffmpegのオプションを変更してみましたが。確かに負荷は減ったものの、画面のアスペクト比がおかしいような?
# -c:v libx264オプションを-c:v h264_omxへ変更しました
# 変更を確認
sed -e 's/libx264/h264_omx/g' config/config.json
# 問題なければ反映
sed -i 's/libx264/h264_omx/g' config/config.json
エンコード機能を使う場合、調整が必要な感じです。
以上でRaspberry Pi 4に4チャンネル地デジ同時録画が可能なシステムを導入してみました。
Webブラウザで
http://<Raspberry PiのIPアドレス>:8888/
にアクセス後、録画予約してみたところ。確かに4チャンネルを同時に録画できました。
無変換で録画しましたが、このときのRaspberry Piの負荷は。
ロードアベレージは1.07程度で、CPUコアを4つ持つRaspberry Pi 4には余裕な感じです。
録画領域の空き容量も接続した1TBのストレージが正しく認識されているようです。
最後に。こちらを使用して、コンセントは1つで済みました。※こちらの製品を利用して正しく動作する保証は致しません。使用は自己責任でお願い致します。
最終的な配線はこのような感じになりました。- 右下のコンセントに電源を接続。
- LANケーブルを接続
- チューナーにアンテナ線を接続
これで4チャンネル地デジ録画・視聴が可能になりました。
親ガメ子ガメ、HDD・Raspberry Pi 4本体・地デジチューナーの3段重ねで、放熱が少々不安ですが。少し動かして様子を見ようと思います。
※20.9.3追記:熱暴走のため、ケースをアーマーケースに変更する必要がありました。
宜しければお試し下さいませ。
Raspberry Pi地デジ関連記事
- 2020年最終版
- 32ビット検証
- ①機材編
- ②コマンドライン録画編
- ③ストリーミング編
- Raspberry Pi 4で地デジ4チャンネル同時録画するには
- Ubuntu 20.04.1添付のffpmegは使ってはダメよ検証
- DLNA配信