メインコンテンツへスキップ
見出し画像

Node-RED を使って OBS を遠隔操作してみた話(obs-websocket を利用)

    はじめに

    昨今のオンラインイベントのライブ配信等で利用されているオープンソースソフトウェアの OBS は、プラグインを用いることでアプリ外部から制御することもできます。

    プラグインは obs-websocket というものなのですが、このプラグインを使った処理の開発を助けてくれるパッケージ・ライブラリもあります。過去に Node.js用のパッケージを使い、スマホや M5GO(M5Stack)といったデバイスを OBS のコントローラーにする仕組みを作ったことがありました。
    (仕組みの詳細については、下記の記事をご参照ください)

    ●OBS をスマホや M5GO(M5Stack)から遠隔制御 〜 MQTT や obs-websocket を利用 〜 - Qiita
     https://qiita.com/youtoy/items/23fb0e16f1a4428b5c9b

    この時作ったものは、コントローラーにしたデバイスから PC までは MQTT で通信をさせ、PC上の MQTT の受信部分と OBS との間は WebSocket で通信をする形でした。

    画像1

    今回は、コントローラーとなる部分が Node-RED で、OBS との通信には WebSocket のみを用いた構成となるものを試作しました。

    作ったものの概要

    まず、今回作ったものが動作している様子をご覧ください。

    Node-RED から WebSocket で JSON を送り、OBS のシーン切り替える動作をさせた様子を動画にしてみた! https://t.co/dBO6E7sGyV pic.twitter.com/magcQoUwpl

    — you (@youtoy) September 19, 2020

    OBS 側では、以下の 3種類のシーンを設定しており、その 3つのシーンの切り替えを Node-RED で行っています。
     ・「休憩中」と表示されている画面
     ・PC の内蔵カメラの映像が画面全体に表示されているもの
     ・スライドが画面全体に表示され、画面の一部に PC の内蔵カメラの
      映像表示されているもの

    Node-RED から OBS へ WebSocket で送る内容は、obs-websocket の GitHub のページに書かれたプロトコルの仕様に沿った JSON のデータとなります。シーンの切り替えを行う際に送る内容は以下となります。

    {
       "request-type":"SetCurrentScene",
       "message-id":"(適当に決めたID)",
       "scene-name":"(OBS上で設定したシーンの名前)"
    }

    この形式で、"scene-name" が異なる 3種類の JSON を送ると、OBS で設定された 3つのシーンの何れかに切り替わる、という動きをします。

    WebSocket で JSON を送る部分は、Node-RED上で簡単に作成することができました。

    おわりに

    obs-websocket のプロトコルの仕様で今回利用したものはシーンの切り替えの部分のみでしたが、他にも様々な操作をプログラムから実行可能です。
    今後、他に外部から制御できると便利そうな操作がないか調べてみて、見つかったらそれを活用した仕組みも作ってみようと思います。

    【追記】 1年後くらいの状況

    この記事を書いてから1年くらい時間が経過しましたが、その間のどこかのタイミングで、以下のようなノードがリリースされていたようです。

    ●red-contrib-obs-ws (node) - Node-RED
     https://flows.nodered.org/node/red-contrib-obs-ws

     
     
    個人の活動で、ビジュアルプログラミング・IoT・ロボットトイの技術コミュニティを単独・共同で主催しています。また、ガジェットが大好きで、個人でのモノ作り活動に活用しています。技術要素の強い内容はQiita( https://qiita.com/youtoy )で記事を書いてます。

    あなたへのおすすめ