RaspberryPiで卒展にぴったりなメディアプレイヤーを作った話

2月後半にもなると、各展示施設は卒業展示ラッシュですね。4年間の製作や研究の成果を社会に発信する貴重な機会ですから、できるだけ展示の内容や品質にはこだわりたいものです。
これを読んでいる方の中には、「成果物を映像にまとめて上映する」という人もいると思います。映像を上映する方法として、次のようなものが考えられます。

- ノートPCをどこかから調達してきて、HDMIか何かでディスプレイに出力して再生する。（展示のときには、ノートPCを見えないところに隠す）
- iMacを置いて再生する。
- メディアプレイヤーを購入し、USBで動画データを転送して、再生する。 

一見すると、ごく普通のことだと思いますが、それぞれ盗難・破損のリスクや予算とのバランスなどの問題が付きまといます。~~とくに、メディアプレイヤーはまともな品質のものは滅多にありません。~~

# その問題、Raspberry Piで解決しよう
Raspberry Piは、安価で小型のシングルボードコンピューターです。Amazonや電子部品を取り扱う店舗、最近ではIoTブームで家電量販店でも取り扱われています。

https://www.raspberrypi.org/products/
![RaspberryPi](https://www.raspberrypi.org/homepage-9df4b/static/a6331df010eb56a7fafb04466af3f1aa/43eee/3a15d4da-46e3-4940-8be6-9fc7d201affe_RPi_4B_FEATURED.jpg)

全部乗せのフルセットでも1万円ちょっとで買えたりします。
[https://www.amazon.co.jp/s?k=raspberry+pi](https://www.amazon.co.jp/s?k=raspberry+pi)

![amazon](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279082/8bb797c2-2175-4303-a106-844c9bd7b862.png)

---
このくらいの価格なら、一気に複数個の購入も現実的で、仮に盗まれても大きな損失にはならないと思います。盗むこと自体は犯罪です。絶対やめましょう。

このRaspberryPiにOSMCというメディアサーバー用のOSをインストールして、動画の自動再生機能を追加して展示用メディアプレイヤーにしたいと思います。

# 必要なもの
RaspberryPiを動作させるのに必要なものはだいたい次の通りです。**RaspberryPi 3 Model B以上の性能があれば十分**です。

- RaspberryPi(3B, 3B+, 4B)のいずれか
- 電源アダプター(各モデルに合ったものを選ぶ)
- microSDカード(32GB以上がおすすめ)
- HDMIケーブル(4BはMicroHDMI)
- インストール作業用のPC(Windows, macOS, Linuxのいずれか)

ケーブルをどうやって選べばいいか自信がない方は、セットで購入するのがおすすめです。

# OSMCのインストール
OSMCのインストールについては、こちらの記事がいちばんわかりやすいと思います。

[第58回「ラズベリーパイでOSMC！インストール～日本語化まで」 | Device Plus - デバプラ](https://deviceplus.jp/hobby/raspberrypi_entry_058/)

このような詳細な説明を定期的に投稿・更新してくれる方々に敬意を表します。

# USB内の動画の自動再生機能を追加する
RaspberryPiと作業用PCとを同じLANに接続し、IPアドレスを調べます。
Buffaloの無線LANであれば、ブラウザやアプリから見られます。

[【動画FAQ】Wi-Fiルーターと通信(接続)している機器を確認する方法(iPhone編、Android編、Windows編)](https://www.buffalo.jp/support/faq/detail/15741.html)

IPアドレスがわかったら、SSHコマンドでRaspberryPiにログインします。

XXX.XXX.XXX.XXXはIPアドレスです。osmcは、デフォルトのユーザー名です。初期パスワードはosmcです。

```shell
$ ssh osmc@XXX.XXX.XXX.XXX
```

ログイン後に、次のコマンドを実行して、autoexec.pyを開きます。

```shell
# ユーザーのデータが入っているディレクトリまで移動
$ cd ~/.kodi/userdata

# autoexec.pyという名前のPythonのスクリプトを編集する
$ sudo nano autoexec.py
```

nanoというエディター上で、Pythonのプログラムを書きます。
WriteOut（保存）するときは、`Ctrl + O`です。
Exit（終了）するときは`Ctrl + X`です。

```python

import xbmc
import glob

# USBドライブは/media以下にマウントされる
# ワイルドカードで/mediaにあるすべてのmp4の動画のパスを取得する

videoFiles = []
for videoFile in glob.iglob("/media/*/*.mp4")
    videoFiles.append(videoFile)

# プレイリストを作る
playList = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
playList.clear()

# プレイリストに追加する
for videoFile in videoFiles:
    playList.add(url=videoFile)

# 再生する
xbmc.Player().play(playList)
```
このプログラムは、RaspberryPiを起動したときに、自動で実行されます。これで、**RaspberryPiを起動したときに、mp4形式の動画を保存したUSBから、自動で繰り返し再生する機能**が追加できました。

念のため、再起動しておきましょう。

```shell
$ sudo reboot
```

## コマンドラインが嫌いな人は…
記事を読んでいる人の中には、コマンドなんて打ちたくないという変わった人もいると思います。SSHコマンドでの操作は、[WinSCP](https://forest.watch.impress.co.jp/library/software/winscp/)や[Cyberduck](https://cyberduck.io/)でSFTPのプロトコルでログインすればリッチなGUIで同じことができます。
![_2020-01-21_20.55.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279082/051cdfb0-02ac-c174-9f69-4a1bf4a3a84b.png)

# 再生中のUIを消す
展示の際は、動画再生のUIなど「作品に関係ないものは極力映したくない」ものです。
OSMCはデフォルトの設定だと、動画が再生されたときにシークバーなどが表示されます。これは設定を変更することで消すことができます。

SSHコマンドでログインして、DialogSeekBar.xmlという設定ファイルを編集します。

```shell
# ディレクトリに移動
$ cd /usr/share/kodi/addons/skin.osmc/xml
# 編集する
$ sudo nano DialogSeekBar.xml
```

WinSCPなどのソフトウェアでも同様に編集できます。
![_usr_share_kodi_addons_skin.osmc_xml_DialogSeekBar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279082/ffbb4f20-41ef-e692-6f76-582123197b90.png)

↑の画像で示されている

```xml
<visible>[Player.Seeking | Player.DisplayAfterSeek + !Player.Paused.....]</visible>
<visible>VideoPlayer.IsFullscreen | Window.IsVisible(visualisation)</visible>
```
と`<visible>`タグで囲まれている行を削除して保存しましょう。

ここでも念のため、再起動しておきましょう。

```shell
$ sudo reboot
```

これで、再生したときにシークバーなどが表示されなくなります。「消しちゃっていいの？？」と思うかもしれませんが、これで数日の展示期間を乗り切りました。

# 突っ込まれそうなポイント
どのくらいの画質まで再生できる？
> Model BでフルHDかつ60FPSの動画は難なく再生できました。RaspberryPiには、H.264のハードウェアデコーダーが入っているので、安定した再生が可能になっているそうです。

SSHコマンドって何よ
> 正式な名称は**S**ecure **Sh**ellというもので、主に遠隔操作で使われます。SSHで通信して、ログイン先のコンピューターのシェルを操作しているというイメージです。Windows, macOS, Linuxには最初から入っています。

コマンドラインとか意味わかんないし怖い
> 例え、失敗してOSとかをぶっ壊したとしても、作業用PCにはとくに影響はありませんし、OSは何回でもインストールして作業をやり直せます。安心してください。「隙あらば自分語り」ですが、私はmacOSをGUIからぶっ壊したことがあります。一度ぶっ壊した経験があれば、何も怖くありません。

この作業を何回もやるのつらい
> SDカードはクローン出来ます。Win32DiskImagerがおすすめです。
https://sourceforge.net/projects/win32diskimager/

セキュリティとかは大丈夫？
> 運用時はLANに接続しなければ大丈夫だと思います。ただ、デフォルトのユーザーとパスワードのままだと危険なので、変えましょう。

```shell
# ログイン中のユーザーのパスワードを変更する
$ sudo passwd

# 別のユーザーを追加し、sudoできるようにする
$ sudo adduser <ここにユーザー名>
$ sudo gpasswd -a <ここにユーザー名> sudo

# OSMCからadmとsudoを外してもいいと思います
$ sudo gpasswd -d osmc sudo
$ sudo gpasswd -d osmc adm
```

# 最後に
以上の作業を行うことで、

- 安価（コスト）
- USBを差して起動だけで再生できる（運用）
- 割と高品質（品質）

なメディアプレイヤーが完成しました。コスト面・運用面・品質面で卒展にはぴったりだと思います。

「全然実際に動いている画像とか図がないじゃないか（怒）」と思う方がいましたら、すみません。実は、これは2020年にまとめたノウハウをずっと忘れたまま放置し、2021年に投稿したものになります…。画像はあるっちゃああるんですが、許可が必要なものが映ってしまっているのです…。
しかし、この記事によって長い間卒展で求められていたメディアプレイヤーを実現できるかもしれません。

質問やご指摘があれば、随時更新・追加していきます。お気軽にコメントにてご連絡ください。