見出し画像

ラズパイでATEMスイッチャーのコントローラーを自作する!

まえがき

ATEMスイッチャーのコントロールには様々な方法があります。

本体の物理ボタンから操作 / ATEM Software Control / Advanced Panel のような、いわゆる純正のコントロール方法や 、
Live Command PROX / SKAARHOJ / Stream Deck のような、サードパーティ製のコントロール方法まで様々です。

それぞれにおいて操作性や価格、安定性、可搬性など利点の違いはありますが、今回はRaspberry Piを用いたコントローラー自作方法を紹介します。


なぜ、ラズパイで自作?

わざわざ自作しなくても良いじゃん… と思われるかもしれませんが、GPIO&USBが同時に使えるシングルボードコンピュータは、案外メリットが多いように思います。

例えば、DSK操作のような"ATEM Software Control上でキーボードから操作できないようなもの"も、これを使用すれば実現できます。非常に便利です。

メリット

  • そこそこ安い

  • 設定・運用に別途PCが要らない

  • 自分好みに・簡単に操作コマンドを指定できる

  • コントロールだけでなく、ATEMの情報を受信できる(データロガー的な)

  • USBキーボード・GPIOの両方使用で高いカスタム性

デメリット

  • 安いと言ってもArduino等よりは高い

  • 設定には別途モニタが必要

  • メディアプールの中身変更は今のところ出来ない

  • OSの上に制御ソフトが乗っかるので、他の組み込みマイコンよりは安定性が劣る(とはいえどそこそこ安定してます)


簡単な仕組み

詳細は多分後述しますが、とりあえず大まかな動作原理を説明
使用するソフトは、Node-REDです。

Node-REDはハードウェアデバイス、APIおよびオンラインサービスを新しく興味深い方法で接続するためのツールです。

ブラウザベースのエディタによってパレットに並ぶ多種多様なノードを結びつけて用意にフローを作成でき、さらにシングルクリックで実行環境にデプロイすることができます。

https://nodered.jp/

SKAARHOJ & 有志の方が、Node-RED上でATEMスイッチャーを操作できるライブラリを公開してくれています。今回はこのライブラリを用いて、ラズパイからイーサネット経由で制御信号のやり取りを行います。


必要なもの

  • Raspberry Pi 本体

  • ラズパイ駆動に必要なSDカード・電源・ケーブル類

  • テンキー

  • 設定時:マウス・キーボード・モニタ

たったこれだけです。ラズパイ以外は既にお持ちの方も多いかと思います。気軽に始められるのは良いですね。

あると更に便利なもの

プログラマブルキーボード 

テンキーと違ってボタンの大きさがすべて同じなので見た目が良い!
青軸なのでカチカチ押せて、ボタン感がある!

LED・抵抗など
GPIOピンからタリーランプを作ったりも出来ます。
USBとGPIOの両方が使えるラズパイならではの利点です!


作り方

ラズパイのセットアップまでは軽く紹介します。
ネットでも様々紹介があるのでそちらも参照してください。

① ラズパイOSをSDカードにコピー

こちらのサイト(ラズパイ公式)にアクセス。ラズパイ起動用のメディアが作成できます。

Windowsの場合は"Download for Windows"を選択

ダウンロードしたファイルを開き、画面に沿ってインストールをする

ソフトを起動するとこんな感じ

OSは32bit (or RAM8GB版なら64bit)を選択

ストレージは32GB程度のMicroSDカードを用意。
(OS書き込み時、中身はフォーマットされるので注意)

OS・ストレージを正しく選択したら書き込み開始!
5分程度で終わるかと思います。


② ラズパイ本体のセットアップ

OSを書き込んだSDカードを本体にセット。
モニタ・キーボード・マウス類を接続した状態で、最後に電源を接続。

※モニタを繋がず先に電源を入れると、映像が映らないトラブルが起きる場合があります。
HDMI接続が認識できないと、コンポジット出力になるため? だそうです。
その場合の解決策↓

③ Node-REDのインストール

公式のインストールマニュアル

端末で下記のコードを実行するだけです

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)


本当にインストールしますか? と聞かれるので "Y"(Yes)と入力

Are you really sure you want to do this ? [y/N] ?


ラズパイで使えるノードを追加するか聞かれるので "Y"(Yes)と入力
Noを選択すると、GPIOが多分使えません。

Would you like to install the Pi-specific nodes ? [y/N] ?


最後に、色々な設定を今しますか?と聞かれるので、とりあえずNoを選択
これでインストールは終了です。


Node-REDが自動起動するようにする

このままでは、ラズパイの電源を入れるためにNode-REDを起動する必要があります。
現場ですぐに使えないので、自動起動の設定を行います。

端末で下記のコードを実行するだけです

sudo systemctl enable nodered.service


設定が終わったら、一度再起動しましょう。

④ Node-REDを起動・ATEM用のライブラリを入手

インターネットブラウザで下記のアドレスを開きます

http://localhost:1880/

Node-REDが正しく起動していると、こんな画面が出るはずです。

Node-RED起動画面

まずはATEMスイッチャーのライブラリを入れます。
右上の 三 から、パレットの管理をクリック

ノードを追加 から、 「ATEM」と検索し、
下記のノードを追加します。

画面左のパレットに BlackMagic というノードが追加されました。

ノードをドラッグアンドドロップし、ダブルクリックすると設定が開きます。
下記のように設定してください。

Name / Network / Output Mode / Send Time Command / Send Initial Data / Send Status Updates
を設定

Networkの鉛筆マークをクリックし、接続したいスイッチャーのIPアドレスを設定 & 更新

図の場合は、192.168.10.240のATEMに接続・操作できる

⑤ ラズパイのIPアドレスを設定する

ラズパイのイーサネット設定から、IPアドレスを固定にしてください。
この際、ATEM本体と同じネットワークになるように適切な値への設定が必要です。

設定は以上です!


⑤ 動作テスト

まずはこちらをダウンロードしてください。

このファイルは、下記のようなノード構成が保存されています。
スイッチャーのIPアドレスは192.168.10.240です。

読込は、左上の 三 から読み込みをクリック

読み込むファイルを選択 から、ダウンロードした.jsonを開きます。

読み込んだら、右上のデプロイを押します。
これにより、自分で作ったノードが実行可能な状態に変換されます。

デプロイが終わったら、いよいよ動作確認です。
ラズパイとATEMをLANケーブルで接続してください。
10秒ほどで、Connected となるはずです。

この状態で、"クリックで動作"の■をクリックしてみます。

"CUT"動作が確認できれば、成功です。
おめでとうございます。

自分好みの操作方法・内容に変更する

このままではマウスのクリックでCUTができるだけです。
これでは使いにくいので、まずは

①いろんな動作
②キーボード
③ATEMからの情報取得
までできるように変更していきます。

① いろんな動作

このライブラリでは、次のような操作が出来ます。

  • PGMソースを変更

  • PRVソースを変更

  • Inputのプロパティを取得・変更

  • CUT

  • AUTO

  • DSKの情報を取得・変更

  • USKの情報を取得・変更

  • AUXソースの変更

  • ATEMのタイムコードを取得

  • AUTOのトランジション状態を取得

  • SuperSourceのコントロール

  • カメラ制御

  • オーディオの設定

  • MVの情報取得

  • マクロの実行

  • 警告情報の取得

  • ATEM本体の性能を取得

見て分かる通り、大体なんでもできそうです。

ここでは、よく使いそうなものだけ紹介します。
詳しくは↓のサイトに詳細の説明があります。

https://github.com/haydendonald/blackmagic-atem-nodered/blob/master/howToUse.md

PGMソースを変更

var msg = {
    "payload": {
        "cmd": "programInput",
        "data": {
            "ME": 0,
            "videoSource": {
                id: 1,                
            }
        }
    }
}
return msg;

"ME": 0 ・・・ ME0のPGMSourceを変更 (ATEM Mini等では0で良い。)
id: 1 ・・・ 変更するソース

$$
\begin{array}{|c|c|} \hline
id & ソース内容 \\ \hline
0 & Black \\ \hline
1 & IN1  \\ \hline
2 & IN2  \\ \hline
3 & IN3  \\ \hline
4 & IN4  \\ \hline
5 & IN5  \\ \hline
6 & IN6  \\ \hline
7 & IN7  \\ \hline
8 & IN8  \\ \hline
9 & IN9  \\ \hline
10 & IN10  \\ \hline
11 & IN11  \\ \hline
\end{array}
$$

他にも数値飛んで1000番台~10000番台でMPやColor, Barsなど、それぞれにidが割り当てられています。時間があれば追記します。

PRVソースを変更

var msg = {
    "payload": {
        "cmd": "previewInput",
        "data": {
            "ME": 0,
            "videoSource": {
                id: 1,
            }
        }
    }
}
return msg;

PGM変更ほぼ同じです

CUT & AUTO

var msg = {
    "payload": {
        "cmd": "performCut", //AUTOなら、"performAuto"
        "data": {
            "ME": 0
        }
    }
}
return msg;

DSK オンエア & オフエア
USK オンエア & オフエア

var msg = {
    "payload": {
        "cmd": "downstreamKeyer", //USKなら、"upstreamKeyer"
        "data": {
            "id": 0,
            "state: true //オフエアなら、"false" 
        }
    }
}
return msg;

AUXソース変更

var msg = {
    "payload": {
        "cmd": "auxSource",
        "data": {
            "id": 0,
            "videoSource": {
                "id": 0,                
            },
            "mask": true
        }
    }
}
return msg;

data の id ・・・ Constellation等AUXが多い場合はこのidで出力先指定
videoSourve の id ・・・ PGM/PRVソースのid説明と同じ

マクロ実行

var msg = {
    "payload": {
        "cmd": "macroAction",
        "data": {
            "macroId": 0,
            "action": "run"
        }
    }
}
return msg;

macroId ・・・ 何番目のマクロを実行するか

このあたり抑えておけばある程度の操作は行えると思います。

② キーボードで操作

ラズパイの専用ノードを使います。

キーボード入力は rpi - keyvoard
gpioで制御するなら rpi - gpio in
ATEMからの出力でタリーランプなどを作るには rpi - gpio out
を使います。

まず、下記のように配置しましょう。

Pi Keyboardでは、キーが押されたときに対応するキーコードが出力されます。
おおよそこんなキーコードです。一部違うかもしれません。

例えば、1! ~ 9) のキーコードは2~10になります。

1つ目のSwitchノードでは次のような処理をします。

Pi Keyboardから出力された値が2のときは… 3のときは… といように、受け取ったキーコードに応じて先の関数を分岐させるイメージです。

2個目のSwitchノードでは、キーを押したとき・離したときの分岐です。
これをしておかないと、長くキーを押したときにリピートが発生し、2回以上実行されてしまいます。

これを使って、

1! キーで PRVを1に変更
2" キーで PRVを2に変更
3# キーで PRVを3に変更
4$ キーで CUT
5%
6& キーで AUTO
7' キーでDSK1 ON
8(
9) キーでDSK1 OFF

するようにプログラムしたサンプルコードがこちらです。

③ ATEMから情報取得

このライブラリでは、ATEMを操作するだけでなく、
ATEMの情報を取得・記録することも出来ます。

情報取得例

timeのみ非出力(速度向上)
ATEMの出力をそのままデバッグに繋ぐと、毎秒60個のデバッグ分が飛んできます。(フレームごとに信号が来るため)
そのため、不要であればその情報を削ぎ落とす必要があります。
一部検証環境では、この処理をしないとNode-REDが落ちる不具合が落ちました。処理落ちでしょうか。

デバッグに表示するだけでなく、それをファイルに保存したい場合は、write file ノードを使用します。

(パスの設定が必要)

おまけ

CUT, AUTO, AUX, DSK, USK をすぐに設定できるノードを作成しました。
これを参考に他のノードも作成してみてください。


実使用例

DSK操作ボードとして

実際に現場で使用した例です。
ATEM TelevisionStudio HDのDSK操作をラズパイ経由で行いました。

SWの上に置かれた黒いケースがRaspberry Pi


右下の9キーボードでDSKのオン・オフを操作

現地では、電源・LANケーブル・キーボードを接続し、電源を入れるだけですぐに使用可能になりました。
30秒も待たないと思います。

3日間使用しましたが、一度もトラブル起きず安定して動作してくれました。
比較的少ない・軽い処理だと、安定して動くように感じます。


使用したキーボード

9個のキー1つ1つに、独自のキーを設定出来ます。
1! ~ 9) を設定することで、サンプルコードが実行できるようになるはずです。

この用途以外にも、通常利用でショートカットキーボードとして使用できるので何かと便利です。

また、青軸のためカチッと押した感が伝わります。
配信のような押した感を求める環境では、青軸のキーボードがおすすめです。(少しうるさいので場所にもよりますが)

設定の様子

実際に設定をしていた様子です。

ノードをつなぐだけなので、グラフィカルに設定が可能です。
黒い画面を背景にちまちまコードを記述しなくて良いのは嬉しいですね。
手元にモニタさえあれば簡単にすぐ設定変更できます。


まとめ

比較的安価に始められ、簡単かつ自由に設定できるこのシステム

現在の配信オペレーションを少し楽にしたい!という方にはおすすめです。

ぜひお試しください。


この記事が気に入ったらサポートをしてみませんか?