min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi3 omxplayer を bashコマンドで操作する(mkfifo /tmp/omx-input)

RaspberryPi専用の動画再生ソフト omxplayer。

OMXPlayer Builds

言わずと知れたその性能は凄まじい。RaspberryPi搭載のGPUを余すことなく使ってスムーズに動画を再生してくれる。

 

例えば gakki2.mp4 という動画を再生するには、sshして以下のコマンドを打つだけ。

$ omxplayer gakki2.mp4

f:id:min117:20180604222914p:plain

 

RaspberryPi の HDMI につないだテレビで、即座に動画再生される。

f:id:min117:20180604222845j:plain

 

300円でMPEGキーを買えばハイビジョンも激速再生可能。

min117.hatenablog.com

 

そんな omxplayer での、動画再生の停止は Ctrl + C

f:id:min117:20180604223716p:plain

動画停止する。

f:id:min117:20180604223058p:plain

 

 

動画の一時停止は p

f:id:min117:20180604223813p:plain

一時停止するが

f:id:min117:20180604223855p:plain

f:id:min117:20180604223436j:plain

もう一度 p を押せば再生を開始する。

f:id:min117:20180604223936j:plain

 キー割り付け(Key binding)は公開されている。

OMXPlayer Builds

f:id:min117:20180604224523p:plain

 

この一連の流れをキーボードからではなくプログラムからやりたい。プロセスにコマンドを送ることで、一時停止したり再開したりしたい。長年望んでいてなかなか実現できずにいたのだが、fifoという機能を使えば実現できるらしい。素晴らしい記事があった。

takuya-1st.hatenablog.jp

 

 

 

 

記事のとおりやってみる。

まずは fifo ストリームを作る。

$ mkfifo /tmp/omx-input

f:id:min117:20180604225258p:plain

mkfifo は「make first in first out device」くらいの意味だろう。

平たく言えば /tmp の下に一時的な入力デバイスomx-input)を作ってるだけ。その入れ物の性質が fifo(first in first out)なものだと思っておけばよさそう。

 

次に、この fifoバイスに動画ストリームを繋ぐ。omxplayer が fifo からの入力を読み込むようにする。平たく言えば、omxplayerがキーボードの代わりに /tmp/omx-input からの入力を受け付けるようにする。標準入力を使う。 

$ omxplayer gakki2.mp4 <  /tmp/omx-input &

f:id:min117:20180604225906p:plain

input のあとに & をつけたのはバックグラウンド実行にするため。

 

あとはコマンドを送り込むだけ。

$ echo -ne p > /tmp/omx-input

f:id:min117:20180604230740p:plain

再生した!

f:id:min117:20180604230717p:plain

すごい。キーボードで「p」を押したのと同じ状態を作り出せる。例えば phppython から shell を呼んで「echo -ne p > /tmp/omx-input」すればomxplayerを遠隔操作できるということ。

f:id:min117:20180604231113j:plain

キーバインド 「2」を送り込めば倍速再生になる。

$ echo -ne 2 > /tmp/omx-input

f:id:min117:20180604231606p:plain

すごい。コレすごい。動画再生アプリすぐ作れる。とりあえず次記事ではphp実装してみる。

 

※ こんなすごい記事もあった。phpfifoを作れるらしい。

github.com

 

※ omxplayer を python から制御する方法もあるようだ。いずれ試す。

OmxplayerをPythonコードから停止させる

f:id:min117:20180604232025p:plain