新型コロナの対応で始業式・終業式など、カメラで中継してHR教室で見させるという形になっています。
教室はいろんな設備が整いつつありますが、
職員室にいるスタッフが休憩室のテレビでゆったりみられるようにしたいなと思って、やってみました。
環境
- LAN内にnginx-rtmpでたてた中継サーバがあり、HLSで動画を配信します。(この構築の仕方は他の情報で…)
- Raspberry Pi 3 model B
#OS
RaspberryPi OS Lite を Raspberry Pi Imager でインストール
(frame bufferに直接出力するので、GUI環境は不要です)
参考:https://qiita.com/HeRo/items/c1c30d7267faeb304538
#必要なパッケージのインストール
動画再生用に omxplayer
配信してない間に静止画を表示するのに fim うまく表示されないTVがあったので修正(10/1)
配信してない間に静止画を表示するのに ffplay
を使います。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install omxplayer ffmpeg -y
#再生用のスクリプトをホームディレクトリにつくる
$ nano /home/pi/kiosk.sh
#!/bin/bash
target_url="http://***.***.***.***/live/index.m3u8"
message=`curl -m 2 -o /dev/null -s -w %{http_code} $target_url`
ps_play=`ps aux | grep omxplayer.bin | grep -v grep | wc -l`
ps_stop=`ps aux | grep ffplay | grep -v grep | wc -l`
if [ "$message" == "200" ]; then
if [ $ps_stop -ne 0 ]; then
killall ffplay
fi
if [ $ps_play -eq 0 ]; then
omxplayer -o hdmi --display 0 $target_url &
fi
else
if [ $ps_stop -eq 0 ]; then
ffplay -fs -loglevel quiet -i /home/pi/screen.png &
fi
if [ $ps_play -ne 0 ]; then
killall omxplayer.bin
fi
fi
target_urlには nginx-rtmp で生成されるHLSのindexファイルを指定する。
↓デバッグ用にアップルのサンプル動画も使えます。
(解像度が低いので、本番運用のチェックにはあまり使えない)
http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8
スクリプトに実行権限を与える
$ chmod +x /home/pi/kiosk.sh
#配信していないときの画像をホームディレクトリに
上の例では screen.png として画像を指定している。
確認
$ ls /home/pi/
kiosk.sh screen.png
$
#crontab で定期的にスクリプト実行
$ crontab -e
no crontab for ****** - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]: 1
一番下の行に
「*/1 * * * * /home/pi/kiosk.sh」を追加
~前半省略~
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/1 * * * * /home/pi/kiosk.sh
*/1 は1分間隔という意味
これで、LAN内に端末をつないで、配信が開始されて1分ほどしたら自動的に再生が開始されるはず…!
固定IPで運用する場合
学校内で使うときに、DHCPがあるところと、固定IPで指定するところがあるので
$ sudo nano /etc/dhcpd.conf
DHCPがなかったらfall backして固定IPになるように、dhcpd.confの下のほうを編集
~前半省略~
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/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
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
profile static_eth0
static ip_address=192.168.***.***/24
static routers=192.168.***.***
static domain_name_servers=192.168.***.***
# fallback to static profile on eth0
interface eth0
補足
OBS or ATEM Mini Pro --rtmp--> nginx-rtmp --HLSに変換--> Client(iPadのSafari等)
という流れで配信しています。
フルHD1920x1080 30fps の設定でなんとか移りました。(60fpsは映像がずれるとかコマ落ちするなどなど)
Raspberry Pi 2 model Bでも試しましたが、 raspi-config で オーバークロック設定したらいけました。
参考