Open6

Discord Streamkit Overlay の仕組み

odanodan

「VC に誰がいるか?」や「今発話しているのはどのユーザーか?」は RPC を使って取得されている

この RPC は WebSocket で通信を行う仕組み

以下の流れで接続が確立される

  • Discord のアプリは起動時に 6463 ポートを listen する
  • Discord Streamkit Overlay は ws://127.0.0.1:6463 に接続する
odanodan

余談

6463 が使用済みだった場合に備えて他のポートに fallback する仕組みも実装されている

odanodan

この挙動なので、以下のような使い方はできない

  • アカウントA で Discord アプリを開いて VC に入る
  • アカウントB でブラウザで Discord を開いて VC に入る
  • アカウントAの VC を Discord Streamkit Overlay を使って配信画面に表示する
  • アカウントBの VC を Discord Streamkit Overlay を使って配信画面に表示する (←これが無理)
    • Discord アプリ (アカウントA) の RPC に接続してしまうため
odanodan

Discord Streamkit Overlay は x-frame-options: SAMEORIGIN ヘッダーを返しているため、iframe で VC の画面を Web ページに埋め込むことができない

これは例えば配信画面を OBS のブラウザソースで作成していて、その画面に iframe で Discord Streamkit Overlay を表示できないことを意味する

OBS に Discord Streamkit Overlay を表示する場合は直接ブラウザソースで扱う必要がある

odanodan

Discord には Testing Client が存在する

https://support.discord.com/hc/en-us/articles/360035675191-Discord-Testing-Clients

これは Discord アプリとは別のアプリ扱いになっていて、それぞれの起動や別アカウントでのログインもできる

当然 RPC のエンドポイントも独立に listen している

# 普通の Discord アプリ
$ lsof -i:6463 | grep Discord
Discord   39431 odan   49u  IPv4 0xc09d1a7ecd8a9365      0t0  TCP localhost:6463 (LISTEN)

# PTB の Discrod アプリ
$ lsof -i:6464 | grep Discord
Discord   87855 odan   42u  IPv4 0xcf8dd03a0562a01f      0t0  TCP localhost:6464 (LISTEN)

なので、Discord Streamkit Overlay を2つ起動して片方は 6463、もう片方は 6464 に接続されるようにすれば↑↑で難しいと書いていたアカウント2つでの運用が可能になる可能性がある