知識0からRaspberryPi4で録画機を作る!
はじめに
みなさんV6とSexyZoneをご存知ですか?
そうです!
今年26年目にして解散してしまう至高のレジェンドアイドルV6と,今年10周年を迎える人生を共に歩む系アイドルSexyZoneです!彼らが出演した番組全部見逃すわけにはいかない!録画しなきゃ!
...しまった!!!!録画機がない!!!!作ろう!!!!
このような訳で録画機を作りました.
ラズパイを使って録画機を作る記事はたくさんあるのですが,ほぼ無知の状態から始めると躓いたところが多かったので,こちらの記事をベースとして補完する形で書いていきたいと思います.
正直自分自身あまり理解しきれていないところもあるので,詳しいことが知りたかったら元記事を参照することをおすすめします.
環境や用意するものなど
- 作業環境:macOS BigSur
- RaspberryPi4本体
自分は丁度8GBモデルのものを頂いたのでこれを使いましたが,4GBで大丈夫だと思います. - RaspberryPiケース
冷却ファンが付いているものが良いです. - microSDカード
大量の読み書きを行うので高耐久なものが良いです.録画サーバーの用途としては容量はあまり必要ないので16GBなんかでも大丈夫みたいです.自分はSAMSUNGのProENDURANCEの32GBにしました. - USB地デジチューナー
1chのものと4chのものがあります.自分は2グループ担当兼任しているので裏被りを恐れて4chにしました.これが一番高かった.でもそのうちWOWOW対応とかしたいし...
1chのものを複数繋げることも可能ですが,USBの数も限られているのでここはお好みです. - アンテナケーブル
テレビから伸びてるピンみたいな挿し口のケーブルです.これは元記事に書いていなくて焦りました. - B-CASカード
使っていないテレビやレコーダーがあればそこから引っこ抜くと良いです.適当な理由をつけて2000円くらいで再発行してもらうこともできます.(内緒ですが) - B-CASカードリーダー
動作確認されているものを選ぶと良いです. - USBハードディスク
ログや録画データの保存用HDです.奮発して4TBにしました. - 分配プラグ
設置予定の近くのアンテナケーブルの挿し口を探してください.既にテレビなどで使われている場合には分配器(タコ足みたいな感じ)が必要です.ちなみに,分配器+プラグ で買うより 分配プラグ で買った方が多少安いのでお気をつけください.
セットアップ等で必要なもの
- 有線LAN/ Wi-Fi
Raspberrypiの初期設定をするのに有線LANが必要です. - VirtualBox(Ubuntu)
SDカードを長持ちさせるためのF2FS対応に必要です.インストールしてUbuntuの仮想環境を用意しておくと良いです. - SDカードリーダ
OSインストールに必要です
セットアップ
機器の配線などの組み立ては最初からやっておいて大丈夫だと思います.
SDカードにOSイメージを展開
この辺りは元記事通りです.
https://downloads.raspberrypi.org/imager/ からimager_〇〇.dmgとなってるいい感じのファイルをダウンロードしてインストールします.
そして
Choose OS: Raspberry Pi OS (other) > Raspberry Pi OS Lite (32-bit)
Choose SD CARD: (自分が挿したSDカード)
をそれぞれ選択し,WRITEボタンを押します!
終わったら一旦SDカードを抜きます.
この時一応「SDカードを取り出す」という操作を忘れずに!
SSHの有効化
再度SDカードを挿すとbootという名前で認識されます.
SSHを有効化します.
touch /Volumes/boot/ssh
SDカードを安全に取り出してラズパイ本体に挿します.
有線LANによる疎通確認
ここも元記事通り.
ssh pi@raspberrypi.local
初期パスワード:raspberry
でログインします.pが入っているのでスペルミスにご注意.
初期設定
ラズパイの初期設定を行います.
sudo timedatectl set-timezone 'Asia/Tokyo'
sudo apt update && sudo apt upgrade -y
sudo apt install locales-all
sudo localectl set-locale 'LANG=en_US.UTF-8'
また,
sudo vi .bashrc
で.bashrcを開いたら
export LC_ALL=en_US.UTF-8
を適当なところに追記します.
⭐︎viの操作
編集モード:[i]
コマンドモード:[esc]
コマンドモードの操作
1文字削除:[x]
1列削除:[d][d]
変更を破棄して終了: [:][q][!]
変更を保存して終了: [:][w][q]
Wi-Fi設定
wlan0を使えるようにします
sudo rfkill unblock wifi
wpa_passphrase "アクセスポイントのSSID" "パスワード"
と実行して出力された内容をコピーしておきます.
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
でコピーしておいた内容を追記します.
追記が終わったらwlan0を稼働させます
sudo ifconfig wlan0 up
ifconfig
でWi-FiのIPアドレスが振られているか確認します.
IPの固定化
sudo vi /etc/dhcpcd.conf
でdhcpcd.confを開き,以下のように編集します
# Example static IP configuration:
interface wlan0
static ip_address=192.168.0.20/24
static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
コメントを外し,interfaceをwlan0に変更します.
ここでrebootしたり有線LANを外して,動くか確認しておくと良いです.
SDカードの故障対策
録画機で使うとSDカードの読み書き回数が増えるので,故障しやすいみたいです.
録画機には安定稼働してもらいたいものなので,色々な対策を施します.
ログの抑制1
これを後でやるとスワップ領域のエラーが出て面倒なことになったので最初にやっとくと楽です.
sudo vi /etc/rsyslog.conf
以下のようにコメントアウトする.
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
#kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
#mail.* -/var/log/mail.log
#user.* -/var/log/user.log
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
#mail.err /var/log/mail.err
スワップの無効化
sudo swapoff --all
sudo apt-get remove dphys-swapfile
F2FSの利用
SDカードを長持ちさせるため,F2FSというファイルシステムを使います.
RaspberryPi側での作業
あらかじめF2FSのパッケージをインストールしておきます.
sudo apt-get install f2fs-tools
bootとrootfsのパーティションを確認しておく
lsblk
シャットダウンしてSDカードをPCに挿します
VirtualBox側での作業1
F2FSの設定はUbuntu上で行います.
そのため,まずはVirtualBoxでUbuntuの仮想環境を構築します.
メモリ量などの設定はデフォルトのままで良いと思います.
Ubuntuのインストールが終わったら,まずF2FSのパッケージをインストールします.
sudo apt-get install f2fs-tools
ここからSDカードを仮想環境に認識させる操作を行うため,自分をdiskグループに入れます
sudo gpasswd -a ユーザ名 disk
ここで一旦仮想環境をシャットダウンしておきます.
Terminal側での作業
このあたりのSDカードをVirtualBoxに認識させる作業はこちらの記事を参考にしています.
SDカードの割り当てを確認します
mount
bootでデバイス名がdev/disk2s1
のようになっていると思うので,ここのdev/disk2
という部分を覚えておきます.
次に,アプリケーション>ユーティリティ>ディスクユーティリティ
でディスクユーティリティを開き,SDカードをマウント解除します.(※取り出すではないので注意)
SDカードをデバイスとして仮想マシンにマウントできるようにするため,VirtualBox vmdkファイルを作ります./dev/disk2
の部分は上で確認した自身の環境に合わせて変えてください.
sudo VBoxManage internalcommands createrawvmdk -filename ./sd-card.vmdk -rawdisk /dev/disk2
パーミッションを変更します.
sudo chmod 777 /dev/disk2
sudo chmod 777 ./sd-card.vmdk
macではこのあたりでなぜか勝手にまたマウントされているので,ここで一度ディスクユーティリティを開いてSDカードをもう一度マウント解除します.
VirtualBoxを開いて,設定>ストレージ
を開き,コントローラー:SATA
の右にある「ハードディスクの追加」からsd-card.vmdk
を選択する.
OKを押して起動する.(※ここで黒い画面のまま起動しなくなったら,他の起動モードを使うと動く場合もあります)
lsblk
コマンドでSDカードが認識されているか確認します.
さて,本筋に戻ってSDカードマウント用のディレクトリを作成し,SDカードをマウントします.
sudo mkdir /mnt/boot
sudo mkdir /mnt/rootfs
sudo mount /dev/sdb1 /mnt/boot
sudo mount /dev/sdb2 /mnt/rootfs
マウントしたrootfs側のファイル一式をUbuntu側にコピーしておきます.
cd /mnt/rootfs
sudo tar cvzf ~/rootfs.tar.gz .
rootfsをアンマウントしてF2FSファイルシステムを作成します.
cd ..
sudo umount /mnt/rootfs
sudo mkfs.f2fs -f -l rootfs /dev/sdb2
マウントして,先ほど退避させておいたrootfsのファイル一式を展開します.
sudo mount /dev/sdb2 /mnt/rootfs
cd /mnt/rootfs
sudo tar xzvpf ~/rootfs.tar.gz
fstabに書かれたファイルシステムをf2fsに変更します.
sudo vi /mnt/rootfs/etc/fstab
/
のファイルシステムをext4
からf2fs
へ書き換えます.
bootパーティションにある設定ファイルを書き換えます.
sudo vi /mnt/boot/cmdline.txt
rootfstype
をext4
からf2fs
へ書き換えます.
最後にアンマウントします.
sudo umount /mnt/boot
cd ..
sudo umount /mnt/rootfs
VirtualBoxはシャットダウンし,SDカードを安全に抜き,RaspberryPiに挿して電源を入れ,無事起動されるか確認します.
起動後にdf -T
などでf2fsと認識されているか確認しておくと安心です.
ログの抑制2
ログローテーションの頻度を低くします.
ls /etc/logrotate.d
で確認した各設定ファイルをviで開いて,
rotate
を1
,daily
やweekly
をmonthly
に変更します.
log2ramの導入
ログをRAMディスクに書き込むように変更することで,SDカードへの書き込みを減らします.
echo "deb http://packages.azlux.fr/debian/ buster main" | sudo tee /etc/apt/sources.list.d/azlux.list
wget -qO - https://azlux.fr/repo.gpg.key | sudo apt-key add -
sudo apt update
sudo apt install log2ram
sudo vi /etc/log2ram.conf
USE_RSYNC=true
に変更します.
ここで一旦reboot
しておきます.
FFmpegでH.264のハードウェアエンコードができるようにする
echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0666"' | sudo tee /etc/udev/rules.d/10-vchiq-permissions.rules
PX-S1UD V2.0 チューナーのドライバインストール
wget 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/
再起動してから,
dmesg | grep PX-S1UD
を実行するとPX-S1UD Digital TV Tuner
が4つ見えると思います.
カードリーダーの準備
sudo apt install build-essential pcscd libpcsclite-dev libccid pcsc-tools
インストールが終わったら,
sudo pcsc_scan
でJapanese Chijou Digital B-CAS Card (pay TV)
など出ていればOKです.
B-CASデコード用のライブラリをインストール
こちらを使います.
sudo apt install cmake g++
git clone https://github.com/stz2012/libarib25
cd libarib25
cmake .
make
sudo make install
録画用コマンドをインストール
sudo apt install automake
wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz
tar xvzf recdvb-1.3.2.tgz
cd recdvb-1.3.2
./autogen.sh
./configure --enable-b25
EXTRA_SID=1 make
sudo make install
recdvb --b25 --strip --dev 0 20 10 test.m2ts
と実行してみると,物理チャンネル20を10秒間録画してtest.m2ts
に保存できているはずです.(Recorded 10sec
と出ているとOKです)
外付けHDDをUSBポートに接続する
lsblk
コマンドで外付けハードディスクのパーティションを確認しておく.
以下の場合は/dev/sda1
が外付けハードディスクのパーティションとしています.
sudo mkfs.ext4 /dev/sda1
sudo mkdir /data
sudo mount /dev/sda1 /data
外付けハードディスクのパーティションのIDを調べます.
sudo blkid /dev/sda1
実行結果のPARTUUID
をコピーし,/etc/fstab
に追記します.
sudo vi /etc/fstab
PARTUUID=調べたID /data ext4 defaults,nofail 0 0
を追記します.
ここで一度rebootして,マウントされるか確認しておくといいです.
Dockerのインストール
curl -sSL https://get.docker.com | sh
Docker Composeのインストール
aptコマンドでインストールするdocker-composeはバージョンが古いのであれこれがんばります.
どうも調べていると,Raspberry Pi OS Lite (32-bit)ではバイナリを持ってくるやり方が使えないらしく,自分でビルドするらしいけど上手くいかない…
docker-compose公式のインストール手順を見て試行錯誤の末,pipコマンドを使った方法で最新版のインストールに成功したので書いておきます.
これは弄くり回したやり方なので,もっとスマートなやり方があるかもしれない.
まずpipを入れます.
sudo apt install python-pip python3-pip
バージョンを見てみると古〜い!ついでにpythonも古〜い!
とりあえず見つけた記事にあったようにpipをアップデートしてみる.
pip install -U pip
しかしどうもpythonの様子がおかしい.調査しているとpythonコマンドとpython3コマンドが別物になっているみたいです.docker-composeのインストールをするにあたってpythonコマンドでPython3を使えるようにしておくのが良さそうです.
そのため,LinuxのAlternativesを利用してpythonコマンドでpython3を呼び出せるようにします.
詳しいことはこちらの記事で見てください.
まずはpythonコマンドが何を示しているか確認します.また,python3の実行ファイルがあるかも確認します.
ls -al /usr/bin/python
ls /usr/bin/ | grep python
確認したら実行可能ファイルを登録します.
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2
ここら辺は上で確認したご自身の環境に合わせてください.
登録したpythonのバージョンを選択します.
sudo update-alternatives --config python
自分はpython3.7のmanual modeのものを選びました.
これでpython --version
で調べてみて最新版になっていれば成功です.
さて,ようやくdocker-composeを入れます.
pip install docker-compose
最新版が入っているか確認します.
docker-compose -v
最新版ってどれ!?となったら公式リポジトリに書いてあります.
もしできなかったら,公式のインストール手順に依存パッケージとして記述されていた以下のパッケージを入れるといいかもしれません.
sudo apt install python3-dev libffi-dev libssl-dev gcc libc-dev cargo make
curl https://sh.rustup.rs/ -sSf | sh
自分にはこれが必要だったのか否か確認する術がないです.
MirakurunとEPGStationのセットアップ
ここから元記事で使用していたリポジトリが動かなかったので,こちらの記事を参照します.
MirakurunとEPGStationのインストールにはこちらのリポジトリを使わせてもらいます.2021/5/27の時点で動きました.
ソースコードを取得
cd /data
git clone https://github.com/CH3COOH/docker-mirakurun-epgstation.git
sudo chown pi:pi docker-mirakurun-epgstation
configファイルをコピー
cd docker-mirakurun-epgstation
cp epgstation/config/operatorLogConfig.sample.yml epgstation/config/operatorLogConfig.yml
cp epgstation/config/epgUpdaterLogConfig.sample.yml epgstation/config/epgUpdaterLogConfig.yml
cp epgstation/config/serviceLogConfig.sample.yml epgstation/config/serviceLogConfig.yml
エンコードのためにFFmpegを入れます
sudo apt install ffmpeg
ffmpeg -encoders | grep h264
を実行してh264_omx
が見えればOK
ここを参考に設定ファイルを書き換えます.
which
コマンドでffmpeg
とffprobe
の場所を調べておき,設定ファイルで該当箇所を編集します.多分,特にいじっていなければデフォルトのままでOKです.
which ffmpeg
which ffprobe
sudo vi /data/docker-mirakurun-epgstation/epgstation/config/config.yml
docker-composeを使ってビルドを開始します
cd /data/docker-mirakurun-epgstation
sudo docker-compose run --rm -e SETUP=true mirakurun
sudo docker-compose up -d
ここは30分弱くらいで完了するかと思います.
ここで一回http://RaspberrypiのIPアドレス:8888
にアクセスしてEPGStationが見れるか確認しておくと良いです.
Mirakurunのチャンネルスキャン
一応やっておきます.
curl -X PUT "http://raspberrypi.local:40772/api/config/channels/scan"
Sambaで録画したデータを見れるようにする
PCから録画したデータを見れるようにしたいので,Sambaを導入します.
ここはこのへんの記事を参照しています.
さて,まずはSambaサーバーをインストールします.
sudo apt install samba samba-common-bin
ここで何か聞かれるのでデフォルトのままnoを選択します.
設定を行います.
sudo nano /etc/samba/smb.conf
こんな感じのことを書けば良いらしい.
[pi] #共有フォルダの名前
comment = RaspberryPi-shared-folder #コメント自由記述
path = /home/pi/ #共有フォルダのパスを指定する
guest ok = no #ゲストアカウント(パスワード不要)で接続を許可するかどうか。
read only = no #読み取り専用かどうか。書き込みもしたい場合は、no
force user = pi #ファイル操作を、ユーザー「pi」 によって実行。
たしか自分は録画用ハードディスクを/data
にマウントしたので書き換えてみます.
[share]
comment = RecordedData
path = /data/docker-mirakurun-epgstation/recorded
guest ok = no
read only = no
force user = pi
保存したら[Control]+[x]
で閉じます.
Sambaユーザーのパスワードを設定します.
sudo smbpasswd -a pi
pi
はユーザー名です.デフォルトのユーザー名がpiみたいですね.
Sambaを再起動します.
sudo systemctl restart smbd
Sambaの起動状況を確認します.
sudo systemctl status smbd
おお動いてる…!Active: active (running)
となっていればOKです.
一応もう一度IPアドレス確認しておきます.
ip a
wlan0:
の箇所のinet
に続くところです.
そしてMacから繋げてみます!
MacのFinderから移動>サーバへ接続
を開き,
smb://RaspberryPiのIPアドレス
を入力し,接続します.
ログインを求められると思うので,登録ユーザで
ユーザ:pi
パスワード:Sambaユーザのパスワード設定で設定したもの
を入力して接続します.
ラズパイのIPアドレス” 上のマウントするボリュームを選択してください
と聞かれるので,OKを押すとFinder内で録画したデータが見れるようになります!やったー!
使ってみる
できたっぽいが,肝心の使い方が乗ってる記事が見つからない笑
docker-mirakurun-epgstationのリポジトリが一番それっぽいのでやってみる.
とりあえず起動したままだったので停止する
sudo docker-compose down
そしてまた起動!
sudo docker-compose up -d
mirakurun の EPG 更新を待ってからブラウザで http://DockerHostIP:8888 へアクセスし動作を確認する
とのことなのでhttp://RaspberrypiのIPアドレス:8888
にMacからアクセスしてみます.
自分はここでちょっとエラーが起こりましたが,EPGStationのセットアップ周りをやり直したら直りました.やったー!録画できるー!
試しに適当な番組録画してみました.
エンコードをしてからみれるっぽい?雰囲気です.
ffmpegを入れた時に確認したh264_omxにしておけば良さそうですね.
エンコードは中々時間掛かりましたが………見れたー!!!
すげ〜同じWi-Fiならスマホからでも録画できる…!
15日間の死闘を推しのために戦い抜きました…感慨深い…!!!
初期化手順
まずSDカードをUSBリーダーに挿した状態でRaspberryPiImagerを起動し,以下のように設定してWRITE
を押します.
Choose OS: Erase
Choose SD CARD: (自分が挿したSDカード)
ディスクユーティリティで確認して空になっていたらOKです.
次に,過去の接続情報を消します.
ssh-keygen -R raspberrypi.local
また,F2FSのあたりでつまづいた場合はVirtualBoxの仮想環境も作り直した方が楽なのでいいと思います.
Virtual Box上で該当の仮想環境を削除し,userディレクトリの直下にあるvmdkファイルも消しておきます.場合によってはVirtualBox内にvmdkファイルが残ってしまってエラーになる場合もあるので,次に作る時は少し名前を変えるなどすると良いと思います.
ここまでしたら一番初めに戻ってOSのインストールからやり直します.
ここは根気です!推し駆動開発でがんばりましょう!
Discussion