diff --git a/content/BrightSignをネットワーク経由でシークできるようにする.md b/content/BrightSignをネットワーク経由でシークできるようにする.md index 88267910..112fc7da 100644 --- a/content/BrightSignをネットワーク経由でシークできるようにする.md +++ b/content/BrightSignをネットワーク経由でシークできるようにする.md @@ -35,7 +35,7 @@ date: 2024-08-02 16:50 プレイヤーに読み込ませるSDカードを用意する。 -BA:Connectedを立ち上げ”Player Setup”を選択。IPアドレスを192.168.1.2に設定。デフォルトゲートウェイとDNSは、ルーターが接続されてるならそのアドレスを、なければ適当にホストのPCと同じにしておく。 +BA:Connectedを立ち上げ”Player Setup”を選択。IPアドレスを192.168.1.2に設定(BSを2台以上使うなら1.3,1.4,,,と増やしていく)。デフォルトゲートウェイとDNSは、ルーターが接続されてるならそのアドレスを、なければ適当にホストのPCと同じにしておく。 ![[img/スクリーンショット 2024-08-02 19.07.22.png]] またここで、Publishing ModeをLocal Networkにしておくと、動画ファイルの更新をSDカードの差し替えではなくLAN経由でSDカードに書き込める。(4k動画とかだとギガビットイーサネットでは速度が遅くなるかもしれないが、動画のファイルの差し替えをしない限り設定の更新のアップロードは一瞬で終わるので便利) @@ -68,5 +68,34 @@ Presentation SettingのInteractiveという項のNetworkingで、UDPという項 有効化するとこんな見た目になる。 上のEvents一覧を真ん中あたりまでスクロールすると、UDPという項目があるので、これを一度クリックして選択状態にする。 ![[img/スクリーンショット 2024-08-02 20.04.18.png]] -この状態で動画下側のファイル名が表示されてるあたりをクリックすると、UDPイベントが紐づけられる。 +この状態で動画下側のファイル名が表示されてるあたりをクリックすると、UDPイベントが紐づけられる。これだといかにも動画再生をトリガーにUDPを送信するみたいな見た目をしているが、実際にはUDPの受信イベントもここで制御する。右側のEvent Propertiesで、Specify UDP inputに対して`position:`と記述する。(Labelも同時に記入されるが、ここは気にしなくていい)また、ここでAssign input to variableにチェックを入れる。こうすることで、例えば”position:1000”というUDPメッセージが送られてくると、先ほど作ったpositionというUser Variableが1000に更新されるようになる。 +![[img/スクリーンショット 2024-08-02 20.07.15.png]] +## UDPイベントからプラグインを発火させる + +最後に、Event Propertiesの一番下のAdvancedを開く。Commandsで+をクリックしてイベントと同時に起動するコマンドを作る。Commandは"Send"、”Command Parameters”はSend plugin messages、送り先はcustom(これしか選べないはず)にする。 +最後のPlugin messageの内容だが、`seek!{{position}}`とする。`{{variable}}`でPresentation内のUser Variableを埋め込むことができるが、これはBA:Connectedの仕様で、普通のBrightAuthorの場合は`$$variable$$`で埋め込む必要がある。 + +今回は一つしか動画を使ってないが、`seek!(zoneの名前)!{{position}}`のようにすれば、2つの再生動画の位置をそれぞれ変更するようなこともできる。 + +![[img/スクリーンショット 2024-08-02 20.10.37.png]] +これで、真ん中右上のセーブアイコンをクリックしてプロジェクトを保存したら、その右のPublishボタンをクリックしてBrightSignに転送する。 + +BrightSignにSDカードを入れて、LANケーブルをPCと接続して起動する。(SDカードに書き込んでから初回の起動は少し時間がかかる。) + +BA:Connected上で転送タイプをLocal Networkにし、Networked Playersの+をクリックして、転送先に先ほど指定したIPアドレス(192.168.1.2)を指定すると、Publishできるようになる。Publishできたら即座にBrightSignは再起動して、普通に動画のループ再生が始まる。 + +## MaxからLAN越しにシークしてみる + +Maxでは、udpsendオブジェクトで指定したIPの5000番ポート(標準)に、`position:2000`みたいなメッセージを送れば良い。数値はミリ秒単位で整数。jit.movieで同じ動画ファイルを読み込ませて、シークバーっぽいインターフェースで同じフレームへジャンプできるパッチをこんな感じで作った。 + +![[img/スクリーンショット 2024-08-02 20.25.24.png]] + +`jit.movie~`(`jit.movie`や`jit.qt.movie`ではない方)を使用する。このオブジェクトは非常に奇妙な仕様なので、動画の再生状態を全てアトリビュート経由で取得しなければならない。写真のパッチでは動画の長さと再生位置を`getattr`オブジェクトで取得している。 + +注意点としては以下の通り。 + +- シークするたびにそのフレームにジャンプしているが、シークして以後は特段同期しておらず各々フリーラン状態 + - そもそもUDPでのシンクはフレーム単位で同期してるわけではない。フレームレベルでの同期が必要ならBrightWall使うのが無難 +- 自動ループする時、BrightSignのほうが若干ラグがあってからループする。そのため、実際には`jit.movie~`が自動ループしたタイミングでudp信号を送るのが良い。 +- 内部がどういう仕組みかわからないが、UDPのメッセージのキューは割と簡単に詰まる。シークバーをぐりぐり動かすみたいな使い方はできない。 diff --git a/content/img/スクリーンショット 2024-08-02 20.07.15.png b/content/img/スクリーンショット 2024-08-02 20.07.15.png new file mode 100644 index 00000000..ce8ed4f4 Binary files /dev/null and b/content/img/スクリーンショット 2024-08-02 20.07.15.png differ diff --git a/content/img/スクリーンショット 2024-08-02 20.10.37.png b/content/img/スクリーンショット 2024-08-02 20.10.37.png new file mode 100644 index 00000000..f87922db Binary files /dev/null and b/content/img/スクリーンショット 2024-08-02 20.10.37.png differ diff --git a/content/img/スクリーンショット 2024-08-02 20.25.24.png b/content/img/スクリーンショット 2024-08-02 20.25.24.png new file mode 100644 index 00000000..f2b63b08 Binary files /dev/null and b/content/img/スクリーンショット 2024-08-02 20.25.24.png differ