9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi で 校内放送受信端末をつくる

Last updated at Posted at 2021-09-29

新型コロナの対応で始業式・終業式など、カメラで中継して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
/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の下のほうを編集

/etc/dhcpcd.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 で オーバークロック設定したらいけました。

参考

9
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?