メインコンテンツまでスキップ

外部 SDK / API

Middle Control は TCP API を公開しており、外部のデバイスやソフトウェアから Middle Control にコマンドを送信したり、カメラや gimbal のライブデータを読み取ったりできます。

この機能が役立つ場面:

  • カスタムデバイスやスクリプトからプリセットのトリガー、録画の開始/停止、gimbal の操作を行いたい
  • Middle Control を放送自動化ワークフローに組み込みたい
  • Middle Control と直接通信するカスタムコントロールパネル(ハードウェアまたはソフトウェア)を構築したい
ポート変更 — API はポート 11584 に移行しました

この API はかつてポート 11581 でドキュメント化されていました。そのポートは Middle Remote (Glue) 接続と共有されており、Middle Remote が Direct モード(macOS のデフォルト)の場合は拒否されます。統合を 11581 で構築していた場合は、ポートを 11584 に変更するだけで対応できます。コマンドとフィードバックフレームは同一です。(この外部 API は macOS の機能です。Windows では Companion ポート 11580 と Glue / Remote ポート 11581 を使用してください。)

注記

APC-R ユニットと直接通信する SDK はありません。すべてのコマンドは、コンピューター上で動作している Middle Control アプリを経由します。

🔌 接続​

デバイスまたはソフトウェアは、Middle Control が動作しているコンピューターにプレーンテキストの TCP コマンドを送信します。各コマンドは短い文字列(例:CAM3、PRESET1、P500)で、改行文字で終端されます — 1 行につき 1 コマンドです。

TCP 接続の詳細

ホスト : Middle Control が動作しているコンピューターの IP アドレス (同一マシン上でソフトウェアを動作させる場合は 127.0.0.1 を使用)

ポート : 11584

終端文字 : \n(LF または CRLF)

知っておくべきこと:

  • コマンドは大文字・小文字を区別します — このページに記載されている通りに送信してください。
  • API はファイア・アンド・フォーゲット方式です。不正なコマンドや未知のコマンドは無視されます(エラー応答はありません)。状態の確認にはライブフィードバックを使用してください。
  • 統合が接続されると、Middle Control の左サイドバーの Controllers の下に External API エントリーが表示されます — 接続が開いている間は表示され続けます。

ターミナルからのクイックテスト — カメラ 1 を選択してプリセット 1 をトリガーする:

printf 'CAM1\nPRESET1\n' | nc <MIDDLE_CONTROL_IP> 11584

🎯 カメラの選択とターゲット指定​

このページのすべてのコマンドはカメラ ID(1〜99)に対して動作します。指定方法は 2 通りあります:

  1. CAMx でカメラを選択する — 以降のコマンドがそのカメラに対して動作し、フィードバックフレームにも反映されます。Middle Control のサイドバーでクリックするのと同様に、選択中のカメラが切り替わります。
  2. コマンドの末尾に @Cx を追加して1 つのコマンドをターゲット指定する — 選択状態を変えずにカメラ x にコマンドを送ります。
コマンド説明
CAM3カメラ/gimbal 3 を選択する — 以降のコマンドがそれに対して動作する
REC_START@C2カメラ 2 の録画を開始する(選択状態は変わらない)
AUTOFOCUS@C5カメラ 5 のオートフォーカスをトリガーする(選択状態は変わらない)
P500@C1カメラ 1 にパンコマンドを送る(選択状態は変わらない)
ヒント

ターゲット指定コマンドを使うと、マルチカメラ操作が簡単になります — REC_START@C1、REC_START@C2、REC_START@C3 を素早く連続送信して、カメラ 1、2、3 の録画を同時に開始できます。

🕹️ Gimbal & PTZ コントロール​

可変スピード​

指定したスピードで軸を駆動します — その軸は 0 を送るまで動き続けます:

コマンド説明
Pxxパンスピード。xx は -2048〜+2048(INT16)
Txxチルトスピード。xx は -2048〜+2048(INT16)
Rxxロールスピード。xx は -2048〜+2048(INT16)
Zxxズームスピード。xx は -2048〜+2048(INT16)
停止するには 0 を送信してください

P500 はパンを開始し、P0 はそれを停止します。安全機構として、軸が動いている状態で TCP 接続が切断された場合、Middle Control はその軸を自動的に停止します。

ボタンコマンドとプリセットで使用されるスピード設定:

コマンド説明
PTSxxパン/チルトスピード設定。xx は 1〜100(INT8)
ZSxxズームスピード設定。xx は 1〜100(INT8)

絶対位置​

1 つのコマンドで gimbal を正確な位置に移動します。フレームフォーマットは次のとおりです:

aGLOB;aPxx;aTxx;aRxx;aZxx;ss
パーツ説明
aGLOBフレームの先頭に必ず記述する
aPxx絶対パン位置。1/10 度単位(INT16)
aTxx絶対チルト位置。1/10 度単位(INT16)
aRxx絶対ロール位置。1/10 度単位(INT16)
aZxx絶対ズーム位置。0〜4096(INT16)
ssトランジション時間(秒)

例: パン 20°、ロール 2°、チルト 7.5°、ズーム中間値まで 5 秒かけて移動する:

aGLOB;aP200;aR20;aT75;aZ2500;5

現在のトランジションスピードを使って、単一軸だけを送ることもできます:

コマンド説明
aPxx / aTxx / aRxx1 軸を xx に移動する(1/10 度単位)
aZxxズームを xx に移動する(0〜4096)

ボタンとユーティリティ​

ボタン押下と同様に動作します:

コマンド説明
PAN_L / PAN_Rgimbal を左/右にパンする
TILT_U / TILT_Dgimbal を上/下にチルトする
ROLL_L / ROLL_Rgimbal を左/右にロールする
停止コマンドが必要です

上記の各移動コマンドの後、70ms 以上の遅延を置いてから対応する停止コマンドを送信する必要があります:

移動停止コマンド
PAN_L / PAN_RPAN_IDLE
TILT_U / TILT_DTILT_IDLE
ROLL_L / ROLL_RROLL_IDLE

停止コマンドの前に接続が切断された場合、Middle Control は自動的に移動を停止します。

コマンド説明
ZOOM+ / ZOOM-ズームをステップ単位で拡大/縮小する
SPEED+ / SPEED-パン/チルトスピードを増加/減少させる
ZSPEED+ / ZSPEED-ズームスピードを増加/減少させる

Gimbal ユーティリティ:

コマンド説明
RECENTERgimbal を中心に戻す
ACTIVETRACKアクティブトラックを有効化/無効化する
GIMBALSLEEP / GIMBALWAKEgimbal をスリープ/ウェイクする
GIMBALAUTOCALIBGimbal オートキャリブレーション(Autotune)を開始する
MOTORAUTOCALIBフォーカスモーターのオートキャリブレーションを開始する

🎥 カメラコントロール​

利用可能なコマンドはカメラのブランドと接続方法によって異なります(一部のコマンドは Sony 専用、一部は ATEM リンクが必要)。

絶対値​

カメラの値を直接設定します:

コマンド説明
aFxxフォーカス。xx は 0.0〜1.0(FLOAT)
aIxxアイリス。xx = F 値(FLOAT) — 最も近いサポート済み F ストップ(おおよそ f/1.2〜f/22)にスナップされる
aWBxxホワイトバランス。xx は 2500〜10000 ケルビン(INT16 — 整数のみ)
aTINTxxティント。xx は -100〜+100(INT8)
aISOxxISO / ゲイン(dB)。xx は -12〜+36(INT8)
aSHUTxxシャッター。xx = 分母(INT16 — 例:aSHUT50 は 1/50 秒)
NDxx / NDCLEARND フィルター。xx = 分母:ND4 = 1/4、ND16、ND64、ND256、ND1024(内蔵 ND を持つすべてのブランドの標準ラダー);Sony の可変 ND 機では 2〜4096 の任意の値も使用可能;NDCLEAR(または ND0)でフィルターを解除する。フィードバックフレームでは aND として読み返される

ATEM スイッチャー経由で制御されているカメラ(カラーコレクター値):

コマンド説明
aSATxxサチュレーション。xx は 0〜100
aCONTxxコントラスト。xx は 0〜100
aBLACKLEVxxブラックレベル(リフト輝度)。xx は -2.0〜+2.0
aMIDLEVxxミッドレベル(ガンマ輝度)。xx は -4.0〜+4.0
aWHITELEVxxホワイトレベル(ゲイン輝度)。xx は 0〜16.0

ケルビン/ティントの代わりにレッド/ブルーゲインを使用する VISCA カメラ:

コマンド説明
aRGAINxxレッドゲイン。xx は 0〜255
aBGAINxxブルーゲイン。xx は 0〜255

ステップとトグル​

1 コマンドにつき 1 インクリメント:

コマンド説明
FOCUS+ / FOCUS-フォーカスを近く/遠くに動かす — アプリのフォーカスボタンと同様の動作:1 コマンド = 微小な 1 ステップ;連続コマンド(ボタン長押し、エンコーダーの素早い回転)はランプアップし、最後のコマンドから 200ms 後に停止する
FOCUS+0.002 / FOCUS-0.002レンズ移動量の指定した割合だけフォーカスを近く/遠くに動かす(ランプなし)(0 < size ≤ 1;FOCUS+0.01 は 4.0.4 以前の単体コマンドのステップ量)
IRIS+ / IRIS-アイリスを増加/減少させる
WB+ / WB-ホワイトバランスを増加/減少させる
ISO+ / ISO-ISO を増加/減少させる
TINT+ / TINT-ティントを増加/減少させる
SHUTTER+ / SHUTTER-シャッターを増加/減少させる
ND+ / ND-ND フィルターを増加/減少させる
SHARP+ / SHARP-シャープネスを増加/減少させる
CONT+ / CONT-コントラストを増加/減少させる (ATEM)
SAT+ / SAT-サチュレーションを増加/減少させる (ATEM)
BLEV+ / BLEV-ブラックレベルを増加/減少させる (ATEM)

ボタン長押し中のフォーカス操作​

押し続けるタイプのボタン(Stream Deck やコントローラーキー)では、押したときにスタートコマンド、離したときにストップコマンドを送信します — フォーカスはマウスでアプリ独自のフォーカスボタンを押し続けたときと同様に動作します:最初に微小なステップ、その後ランプアップします。

コマンド説明
FOCUS_IN / FOCUS_OUTフォーカスを近く/遠くへの移動を開始する(FOCUS+ / FOCUS- と同方向)
FOCUS_IDLE停止する

FOCUS_IDLE の前に接続が切断された場合、Middle Control は自動的に移動を停止します;また、停止コマンドなしに 10 秒が経過した場合も長押し状態が解除されます。3 つのコマンドはいずれも @C<n> カメラサフィックスに対応しています。

オートモードとモニタリングのトグル:

コマンド説明
AUTOFOCUSオートフォーカスをトリガーする
AUTOIRISオートアイリスをトリガーする
AUTOSHUTTERオートシャッターをトグルする
AUTOGAINオートゲイン / ISO をトグルする
AUTOWBオートホワイトバランスをトグルする
COLORBARSカラーバーを表示する
ZEBRAゼブラガイドを表示する
FALSECOLORSフォルスカラーガイドを表示する
FOCUSPEAKINGフォーカスピーキングをトグルする
STATUSVIEWカメラの HDMI 出力にステータスビューを表示する
DIGITAL_ZOOMデジタルズームをトグルする (Sony)
RESETCCUCCU / カラーコレクター値をリセットする

メニューナビゲーション(Sony)​

コマンド説明
BTN_MENUメニューボタンを押す
BTN_OKOK ボタンを押す
BTN_LEFT / BTN_RIGHT / BTN_UP / BTN_DOWN矢印ボタンを押す
MULTISEL_LEFT / MULTISEL_RIGHT / MULTISEL_UP / MULTISEL_DOWNマルチセレクターを動かす
MULTISEL_PRESSマルチセレクターを押す
CUSTOM_C1 … CUSTOM_C6カスタム機能 C1 … C6 をトリガーする

録画​

コマンド説明
REC_START録画を開始する(現在選択中のカメラ)
REC_STOP録画を停止する(現在選択中のカメラ)
REC_START_ALLすべてのカメラで録画を開始する
REC_STOP_ALLすべてのカメラで録画を停止する

フィードバックフレームは、現在録画中のカメラを REC_LIST[…] に一覧表示します。

📌 プリセット​

コマンド説明
PRESET1 … PRESET12現在選択中のカメラのプリセット 1 … 12 をトリガーする
PRESET1@C5 … PRESET12@C5カメラ 5 のプリセット 1 … 12 をトリガーする(Middle Control のプリセット 5.1〜5.12)
SPRESET1@C5 … SPRESET12@C5カメラ 5 のプリセット 1 … 12 を保存する(Middle Control のプリセット 5.1〜5.12)

プリセット再生のコントロール:

コマンド説明
STOPPRESET実行中のプリセット移動を停止する(特定のカメラを停止するには @Cx を追加)
PRES_Dxxプリセットのトランジション時間を設定する。xx は秒単位
PRES_Exxプリセットのトランジションイージングを設定する。xx は 0(リニア)〜100 — PRES_D と同様にすべてのカメラに共通の値 (APC-R ファームウェア 2.0 以降)

🔁 オートメーション​

Automations ページのオートメーションを開始、停止、調整します。すべてのコマンドは @Cx ターゲット指定に対応しています。

Camera Shake

コマンド説明
SHAKE-START / SHAKE-STOPカメラシェイクを開始/停止する
SHAKE-SPEEDxxシェイクスピード。xx は 1〜100
SHAKE-AMPLxxシェイク振幅。xx は 1〜100

Zoom Loop

コマンド説明
ZLOOP-START / ZLOOP-STOPズームループを開始/停止する
ZLOOP-SPEEDxxズームスピード。xx は 1〜100
ZLOOP-DURATIONxxズーム移動時間。xx は秒単位(0.1〜60)
ZLOOP-RESTDURATIONxxループ間の停止時間。xx は秒単位(0.1〜15)

Presets Sequence

コマンド説明
PRESETSEQ-START / PRESETSEQ-STOPプリセットシーケンスを開始/停止する
PRESETSEQ-BANKxアクティブなシーケンスバンクを選択する。x は 1〜7
PRESETSEQ-SPEEDxxシーケンスのトランジションスピード。xx は秒単位(0.1〜15)
PRESETSEQ-RESTDURATIONxx各プリセットでの停止時間。xx は秒単位(0.1〜15)

フィードバックフレームは、選択中のカメラの各オートメーションのライブ状態を報告します:SHAKE_RUN、ZLOOP_RUN、PRESETSEQ_RUN(実行中は 1)、および PRESETSEQ_BANK(アクティブなバンク)。

🖥️ Live View & Multi View​

Middle Control が動作しているコンピューター上のモニタリングウィンドウを開閉します:

コマンド説明
LIVEVIEW_OPEN / LIVEVIEW_CLOSE現在選択中のカメラの Live View ウィンドウを開く/閉じる(先に CAMx で選択してください)
MULTIVIEW_OPEN / MULTIVIEW_CLOSEMulti View ウィンドウを開く/閉じる (Middle Control Pro — ライセンスがない場合は無視されます)

📡 ライブフィードバック​

Middle Control は同じ TCP 接続を通じて、約毎秒 4 回ライブステータスフレームをプッシュします。フレームは現在選択中のカメラの状態を反映します。これにより、gimbal とカメラの現在の状態を読み取ることができます — フィードバックディスプレイやリアクティブなワークフローの構築に役立ちます。

注記

カメラ値のフィードバックは、Middle Control が ATEM スイッチャーまたは有線 LAN 経由でカメラに接続されている場合に利用できます。APC-R がカメラにリンクされている場合は Gimbal の角度も含まれます。

TCP Feedback Frame — example
{CAM5;REC1;AF0;DZOOM0;aWB5600;aF0.45;aI6.5;aUI5.4;aTINT10;aISO12;aSHUT1/50;aSAT50;aCONT50;aBLACKLEV0.4;SHAKE_RUN0;ZLOOP_RUN0;PRESETSEQ_RUN1;BRANG_RUN0;PRESETSEQ_BANK1;aPAN523;aTILT124;aROLL890;aZOOM3992;PTS85;ZS24;PRES_D8.0;PRES_ACTIVE0;PRES_E50;REC_LIST[5];CAM_CON_LIST[1,2,5];APCR_CON_LIST[5]}

各フレームは \n で終わる 1 行です:{CAM<id> の後に ; 区切りのトークンが続き、} で閉じられます。トークンの順序:

トークン意味
CAM選択中のカメラ ID
REC / AF / DZOOM選択中のカメラの録画 / オートフォーカス / デジタルズーム(1 または 0)
aWBホワイトバランス(ケルビン)
aFフォーカス位置(0.0〜1.0)
aI / aUIアイリス F 値(ストップロック / アンロック)
aTINTティント(符号付き)
aISOゲイン(dB)
aSHUTシャッター(分母、例:50 または 1/50)
aNDND フィルターの分母(4 = 1/4、16、64 …);フィルターがクリアの場合またはカメラに ND がない場合は -
aSAT / aCONT / aBLACKLEVサチュレーション、コントラスト、ブラックレベル (ATEM リンクカメラ)
SHAKE_RUN / ZLOOP_RUN / PRESETSEQ_RUN選択中のカメラでそのオートメーションが実行中は 1、それ以外は 0(BRANG_RUN は予約済み、常に 0)
PRESETSEQ_BANKアクティブなプリセットシーケンスバンク(1〜7)
aPAN / aTILT / aROLLGimbal の角度(1/10 度単位)(APC-R リンク時)
aZOOMズームモーター位置(0〜4096)(APC-R リンク時)
PTS / ZS現在のパン/チルトスピードとズームスピードの設定値
PRES_Dプリセットのトランジション時間(秒)
PRES_ACTIVEプリセット移動の実行中は 1、それ以外は 0
PRES_Eプリセットのトランジションイージング(0〜100)。APC-R ファームウェア 2.0 以降がない場合は -
REC_LIST[…]現在録画中のカメラ ID
CAM_CON_LIST[…]現在接続中のカメラ ID
APCR_CON_LIST[…]APC-R gimbal が接続されているカメラ ID
位置ではなくトークン名でパースしてください

カメラのブランドと接続方法によっては、フレームから一部のトークンが省略される場合があります。また、利用できない値は -(ダッシュ)として送信されます — パーサーがすべてのトークンが常に存在し数値であると仮定せず、両方のケースを処理できるようにしてください。