LoginSignup
7
8

More than 5 years have passed since last update.

enebular AWS IoT agent を使用してラズパイのマルチモニター環境を制御してみた。

Last updated at Posted at 2019-01-04

はじめに

ラズパイで TCPSClient (INetSyphon) を用いてマルチモニター環境を構築してみた。
マルチモニターの映像構成や映像配信元 (TCPSyphonServer または TCPSpoutServer) を簡単に切り替えられるようにするため、ラズパイ上の TCPSClient を enebular AWS IoT agent を用いて制御 (コントロール) してみた。

きっかけ

IoTLT 放送部の活動で OBS-NDI というプラグインを使用してネットワークを介して他の PC の映像を中継して配信することが可能だということが分かった。

  • NDI: Network Device Interface
    NewTek 社によって開発された複数の映像システムを IP ネットワークを介して双方向にやり取りすることができ、リアルタイムに大量の高品質、低遅延かつ高フレーム精度でエンコードし、ビデオ制作ワークフロー支援プロトコル。SDK が無償で配布されています。

NDI SDK を調べていくと異なる VJ ソフトウェア間で映像の共有・連携をする際に Mac では Syphon 、Windows では Spout が使用されることが分かった。また、Syphon、Spout は共有メモリを介したプロセス間通信で映像を取得するため、NDISyphonSpout to NDI のツールを使用してネットワークを介して映像を共有・連携をすることが分かった。例えば、VDMX5 は無償版では設定を保存できない制限があるが、フル機能 (NDI/Syphon) を使用可能であるが、TouchDesigner は無償版 (Non-Commercial) だと NDI In/Out TOP が使用できないので、Syphon Spout In/Out TOP と NDISyphon や Spout to NDI のツールを組み合わせると同じことが実現できる。


調べていく過程で、過去に TCPSyphonTCPSpout という同じ目的の取り組みが存在することが分かった。こちらは Syphon、Spout を TurboJPEG に変換してネットワークを介して映像を共有・連携する仕組みである。(TCPSyphon という名前は INetSyphon に改められている)
現在、ツールの配布は終了しているようだが、まだ直接ダウンロードできるので URL を残しておく。
https://mypage.techlife.sg/products/TCPSyphon.zip
https://mypage.techlife.sg/products/TCPSpout.zip

また、TCPSyphon、TCPSpout を受信できるライブラリとして SDK が公開されており、ラズパイでも受信できるツール TCPSClient も公開されている。TCPSClient はトリミング(部分表示)機能を持っているため、部分表示するラズパイを複数組み合わせることでマルチモニター環境を構築できることが分かった。(参考)

※ NDI SDK は ラズパイ等の ARM ライブラリでは送信は対応しているが、受信は対応していない。(NDI SDK Documentation.pdfより抜粋)

構成

例えば、ラズパイ 4 台で 1 つの映像を表示するマルチモニター環境を構築する場合、各ラズパイ上の TCPSClient は以下の引数を指定して起動する。

# ① 配信元の画像の左上1/4を表示
$ TCPSClient.bin -s 0,0,0.5,0.5 -d 0,0,1920,1080
# ② 配信元の画像の右上1/4を表示
$ TCPSClient.bin -s 0.5,0,1,0.5 -d 0,0,1920,1080
# ③ 配信元の画像の左下1/4を表示
$ TCPSClient.bin -s 0,0.5,0.5,1 -d 0,0,1920,1080
# ④ 配信元の画像の右下1/4を表示
$ TCPSClient.bin -s 0.5,0.5,1,1 -d 0,0,1920,1080

また、映像配信元 (TCPSyphonServer または TCPSpoutServer) を切り替える場合は以下の引数を指定して起動する。

$ TCPSClient.bin -c [映像配信元のIPアドレス] -p [映像配信元のポート番号]

複数のラズパイ上の TCPSClient を簡単に制御できるようにするため、enebular editor でフローを作成し、enebular AWS IoT agent を使用してフローをデプロイする。

手順

1. Raspberry Pi を AWS IoT に繋いで enebular と連携

以下のページを参照して enebular AWS IoT agent をインストールする。
https://qiita.com/TakedaHiromasa/items/b6828e4ac434bf99325d

enebular-runtime-agent(公式) のインストールスクリプトを実行して、AWS IoT 上にモノ (管理) と証明書 (安全性) が追加されることを確認する。

$ ssh -t pi@[ラズパイの IP アドレス] \
"wget -qO- https://raw.githubusercontent.com/enebular/enebular-runtime-agent/master/tools/install/install.sh | sudo -E bash -s -- \
--aws-iot-thing-name=[モノの名前] \
--aws-access-key-id=[AWS Access Key ID] \
--aws-secret-access-key=[AWS Secret Access Key] \
--aws-iot-region=[Region]"

[AWS Access Key ID] と [AWS Secret Access Key] は AWS IoT 用 IAM ユーザーを作成した際に取得するアクセスー ID とシークレットアクセスキーを設定する。
下記の例では [モノの名前] は

  • enebular-test-01
  • enebular-test-02
  • enebular-test-03
  • enebular-test-04

[Region] は

  • ap-northeast-1 (アジアパシフィック(東京))

で作成した。

2. TCPSClient for Raspberry Pi をインストール

ラズパイへ SSH でログインして、以下のコマンドを実行する。

# pi ユーザで実行
$ sudo apt-get install libavahi-compat-libdnssd-dev

# enebular ユーザで実行
# $ sudo su - enebular
$ git clone https://github.com/z37soft/INetSyphon_RaspberryPi_SDK
$ cd INetSyphon_RaspberryPi_SDK/RaspberryPi3_Stretch/
$ chmod +x TCPSClient.bin
$ cp TCPSClient.bin ~/

3. video グループに enebular ユーザを追加

enebular ユーザで TCPSClient.bin が起動されるため、video グループに enebular ユーザを追加する。

$ sudo gpasswd -a enebular video

4. enebular agent を enebular editor と連携

enebular editor からラズパイ上のフローの動作を確認したり、フローを操作する場合、enebular agent を —dev-mode オプション付きで起動する必要がある。
/etc/systemd/system/enebular-agent-enebular.service
を変更して —dev-mode オプションを追加する。
ExecStart=/home/enebular/enebular-runtime-agent/ports/awsiot/bin/enebular-awsiot-agent --enable-syslog --daemon-mode
 ↓
ExecStart=/home/enebular/enebular-runtime-agent/ports/awsiot/bin/enebular-awsiot-agent --enable-syslog --daemon-mode --dev-mode

# 上記の変更
$ sudo vi /etc/systemd/system/enebular-agent-enebular.service

# 設定を反映
$ sudo systemctl daemon-reload

# プロセスを再起動
$ sudo systemctl restart enebular-agent-enebular

# ログを確認 (省略可)
$ sudo journalctl -ex -u enebular-agent-enebular.service

5. enebular editor でフローを作成

デスクトップを選択してフローを作成する。

ブラウザからアクセスすると TCPSClient が起動・停止するフローを作成する。(括弧内はアクセス先の URL)

  • 全画面表示 (http://[ラズパイの IP アドレス]:1880/on)
  • ①配信元の画像の左上1/4を表示 (http://[ラズパイの IP アドレス]:1880/1)
  • ②配信元の画像の右上1/4を表示 (http://[ラズパイの IP アドレス]:1880/2)
  • ③配信元の画像の左下1/4を表示 (http://[ラズパイの IP アドレス]:1880/3)
  • ④配信元の画像の右下1/4を表示 (http://[ラズパイの IP アドレス]:1880/4)
  • 停止 (http://[ラズパイの IP アドレス]:1880/off)

※ ニーズがあるかどうか分かりませんが、enebular でフローを公開しておきます。(´・ω・`)
 https://enebular.com/discover/flow/47b455f5-f4c1-4ca4-94af-267ae9b61705

6. enebular editor でフローをラズパイへデプロイ

デプロイを選択してフローをラズパイへ配信する。

7. enebular editor の編集 (リモート) でフローの動作を確認 (省略可)

enebular agent を —dev-mode オプション付きで起動すると enebular editor からフローを編集できる。ラズパイ上の動作を確認したり、フローのデバッグ情報を確認する場合に使用する。

まとめ

マルチモニター環境を構築する製品に Triplehead2GoDatapath X4 がありますが、ラズパイを使用して安価・簡易に構築してみました。また、enebular AWS IoT agent と enebular editor を使用して画面構成を操作できるようにしてみました。
みなさんも 良き enebular AWS IoT ライフを!

(追伸: nrgpio のエラー対処方法)
journalctl コマンドで enebular agent のログを確認すると起動時にエラーが出力されていることが確認される。Node-REDから GPIO ピンを制御する場合に使用される rpi-gpio nodes です。

$ sudo journalctl -ex -u enebular-agent-enebular.service
・・・
service.node-red: 30 Dec 11:07:05 - [error] /home/enebular/enebular-runtime-agent/node-red/node_modules/@uhuru/enebular-node-red/nodes/core/hardware/nrgpio needs to be executable
service.node-red: 30 Dec 11:07:09 - [warn] ------------------------------------------------------
service.node-red: 30 Dec 11:07:09 - [warn] [node-red/rpi-gpio] Error : nrgpio must to be executable
service.node-red: 30 Dec 11:07:09 - [warn] ------------------------------------------------------
・・・

エラーを解消するためには nrgpio ファイルに実行権限を付与し、改行コードを変更する必要がある。Windows(CRLF) → Unix(LF)

$ chmod +x /home/enebular/enebular-runtime-agent/node-red/node_modules/@uhuru/enebular-node-red/nodes/core/hardware/nrgpio
$ sed -i.bak 's/'$'\r//' /home/enebular/enebular-runtime-agent/node-red/node_modules/@uhuru/enebular-node-red/nodes/core/hardware/nrgpio
7
8
0

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
7
8