以前の記事で、cec-clientなるプログラムを使えばRaspberryPiからテレビを操作できることが分かった。
今回も cec-client を使うが、やりたいのは(電源オンオフより)もっと複雑。
リモコンで押されたキーを捕捉したい。つまりこうなる。
状況としては、まずテレビにRaspberryPiがHDMIで繋がっていて
そのテレビに向けてリモコンを押すと
テレビのリモコンの信号がHDMIケーブル経由でRaspberryPiに送られるので、RaspberryPi側ではその信号を cec-client で受け取る。
受け取った信号の内容は上のようにズラズラと出てくる。
赤枠の部分がリモコンで押されたキーを意味する行になる。
さらにその中の青枠の部分が押されたリモコンの矢印方向を意味するので、ここだけを取り出せれば、リモコンでどの方向のキーが押されたかを把握することができる。
この記事にやり方がバッチリ載っていた。
cec-client の出力を grep して必要な部分に絞り込んでいけばよい。
$ cec-client | grep 'key pressed'
key pressed: と (3, 0) に囲まれた left が取り出せればよい。
$ cec-client | grep --line-buffered -Po '(?<=key pressed: )\w+(?= \(\d, \d\)$)'
grep の -Poオプション の意味はこれ。
-o マッチした行のうち、必要な列(フィールド)のみ取り出す
-Po '(?<=key pressed: )\w+(?= \(\d, \d\)$)'
とすれば \w+ でキャプチャされた文字列を捕捉することができる。
--line-buffered は1行単位で出力させるオプション。
これでテレビのリモコンからの信号を RaspberryPi が解釈できるようになった。これを omxplayer に送れば「一時停止」「巻き戻し再生」「早送り再生」ができるようになる。
次記事に続く。