raspi の64bit OS にはomxplayer がない
omxplayer が死ぬので、代替手段を考える。
omxplayer はその名の通り OpenMax を使ったものである。OpenMAX=OMXである。
しかし、32bit 版だけの対応である。64bit 版では対応していない。OpenMAXからソース提供やライブラリ提供が行われないため64bit版に対応不可能らしい。また、32bit 版は legacy 扱いなので今後の展開は期待できない。また、raspi4 からOpenMAXが外されたので今後の使えることはない。
そのうち対応するのかなと思って3年待ったがもう駄目のようです。
代替方法を考える必要がある。
実現したいこと
RaspiにSSHでログインして、動画を再生したい。
ディスプレイ・ミラーリングじゃ面倒くさいし、手元の動画をリモートに送るのが面倒くさい。
URLを叩いてRaspiに接続されたHDMIモニタに動画を流したい。
手元で見ている動画をテレビで流したい。
デジタルサイネージも同じように管理できる。
もし、遠隔から動画を再生できるのであれば、動画を流すだけのサイネージ・システムも手軽になるわけです。
独立したシステムなど要らず、SSHでコマンドを実行するだけで管理できる。
いままではomxplayer で出来てた
いままではRaspberryPiと HDMIモニタを使ってSSH経由でOMXPlayerを起動だけで、簡単に実現ができていた。
OmxPlayerなら、TVリモコンで「停止・再生」や「早送り・巻き戻し」が可能になって便利だった。
しかしomxplayer は死んだ。
omxplayer の代替としてのmpv
Xウインドウに直接画面を表示するにはいくつか方法があるが、キーボードから操作ができるものはmpv以外には無い。
そこで、mpv を使うことにする。
mpv でサイネージ(リモート再生)
例えば、次のようにすれば、mpv で再生ができる。
DISPLAY=:0 mpv --fullscreen 'http://192.168.100.5/sample.mp4
--fullscreen
は --fs
でもいけるっぽい
mpv のインストール
mpv は apt install でインストールが可能
sudo apt install mpv
簡単です。
mpv の操作
キーボードショートカットで操作できる。
f
は、小文字です。A
は大文字(Shift+a) です。
キー | 効果 |
---|---|
f | フルスクリーン切替 |
O(オー) | 時間表示切替 |
P | 画面表示(押してるときだけ) |
p | pause ポーズ 切替 |
SPACE | pause ポーズ 切替 |
↑ | 1分進む |
↓ | 1分戻る |
→ | 5秒進む |
← | 5秒戻る |
} | 再生速度 倍(200%) |
{ | 再生速度 半分(50%) |
] | 再生速度 +10%( 1.1倍, 1.21倍, 1.33倍...) |
[ | 再生速度 +10%( ..1.33倍, 1.21倍, 1.1倍, 1.0, 0.91, 0.83...) |
BACKSPACE | 再生速度 1.0倍に戻す |
9 | ボリュームアップ |
0 | ボリュームダウン |
* | ボリュームアップ |
/ | ボリュームダウン |
m | ミュート 切替 |
s | スクショ保存 |
L | ループ再生 |
A | アスペクト比率 強制切替 |
q | 停止 |
Q | 停止(再生位置を記憶しレジューム可能で終了) |
詳しくは 公式サイト を参照
なお、このキーボードショートカットは、設定ファイルで更新可能である。
キーボードとリモコンの関連付け。
後は、HDMIのCEC機能を使って、リモコンのボタンとMPVのキーボードショート・カットを割り当ててしまえば
Omxplayer と同じようにリモコンから操作ができるはずである
SSH経由で再生が開始すれば、あとはTVリモコンから制御ができる。
TVリモコンで制御するほうが簡単である。CEC使えるならリモコンでRaspiとMpvを紐づけしてしおけば、録画ファイルも簡単に視聴できる。
Raspi4 で再生時のCPU使用率
hevc コーデックの動画を再生した場合の負荷を測定した。720p
mpv はraspi4 で 遅延なく低負荷で再生できていて嬉しい。
デコードを明示したときでも、CPUパワーはそこまで使わない。
明示したときでも
mpv --hwdec=yes --hwdec-codecs=hevc_v4l2m2m
そんなに変換しない。メモリもそこまで使わない。
明示してもしなくてもCPU負荷が変わらないので、mpvでhevc を再生するときは、なにもしなくてもハードウェア・デコードが効くのかもしれない。
Raspi4でHEVCを再生してこのパフォーマンスであれば、全然有りである。
録画ファイルはHEVCにして容量を削減
TV録画のファイルは HEVC h265 にしてしまえば、h264 よりも容量を70%ほど削減できる。
そもそも、地上波なんてものは、720pでしかないしパラパラのスライドのような動画である。HEVCで容量削減しても情報量はさして変わらない。地デジはスポーツ番組ですらひどいエンコード画質なので、もともと画質良くないので、圧縮しても、地デジだしそんなものだろうという程度である。
Raspi4 でHEVCがリモート再生できるのであれば、もうこれで再生して地デジのアーカイブは圧縮してしまおうと思った。
omxplayer はhevc 未対応だったのでmpv にすることで録画ファイルの取り扱いが軽くなる。私が動画ファイルに求めるのは情報である。画質ではなく情報であるため、画質はそこまで求めないとすれば、mpv でH265再生でいい気がする。
その他の方法
今回の解決方法は、mpv にDISPLAY環境変数をつけるだけである。
DISPLAY=0
これだけで行けるために、VLCやmplayer や ffmpeg (ffplay)でも同じように再生ができると思う。
https://zenn.dev/yakumo/articles/24eee761d4534ca79c5ffcd9882c57f1
ほかにも、ブラウザのキオスクモードで再生させるという手段も有り得る。動画の再生速度制御・ループ・プレイリスト対応を考えるとmpv でいい気がする。スライドを再生するよりファイルをURLで制御するほうがサイネージ的には使いやすいだろうしね。
ただ、まぁTV用リモコンからの制御も含めて考えると、やはり、mpv が望ましい。
raspi 以外でも
n97 / n100 のミニPCでも mpv が動けば、同じことができると思われる。
omxplayer は openmax で raspi 専用コマンドだったが、mpv であれば汎用性は高い。