放置してるゲームを配信、視聴する環境を作ってみた

おはようございます。めぐみそです。
人間、それよりも優先するべきことがあるのに、どうでもいいことに時間を注いでしまうことがありますよね。それの集大成がこのブログです。

というわけで今回はめぐみそサーバー上で稼働してる放置ゲーを配信、それらをブラウザから視聴できるようにする環境を構築したので、それの仕組みとかを紹介していきます。

放置ゲー

今回放置してるゲームは、「パトネットリゾート」というものです。

ゲームセンターにあるようなメダルゲームがPCでオンラインで遊べるような感じのゲームです。楽しい。

たまに目標達成でもらえるお土産(課金チケットなど)を回収しなければならない手間はありますが、ゲーム内で放置プレイする機能があるので、そちらを利用しています。

環境

今回は以下の材料..環境を利用しています。

・仮想マシンx2
・VPSx1
・CloudFlare Workers x1
・CloudFlare DNS x1

仮想マシンA

仮想マシンAには、Windows 10を利用しています。
スペックは 3仮想コア、6GBメモリです。

この仮想マシンでは、実際のゲームとOBSが稼働しています。
OBSでゲームをキャプチャーして、配信サーバーに送り続けています。

言ってしまえばここは仮想マシンじゃなくても、ネットにさえ繋がればどこに置いてあるパソコンでも大丈夫です。

仮想化した理由は、そのほうがサーバーっぽいから!

仮想マシンB

仮想マシンBには、Ubuntu Serverを利用しています。
スペックは 2コア, 2GBメモリです。

このマシンでは、hlsサーバーを動かしています。
このサーバーで、obsからの映像を受け取って配信をしています。

hlsサーバーの稼働には、nginxを使用しています。

設定方法は、こちらのページを参考にしています。
とは言ってもnginxのソースにrtmpモジュールを追加してビルドしてるだけですが…

# RTMP configuration
rtmp {
  server {
    listen 1935; # Listen on standard RTMP port
    chunk_size 4000;

    application show {
      allow play all;
      live on;
      hls on;
      hls_nested on;
      hls_path /HLS/live;
      hls_fragment 10s;
    }
  }
}

nginxのrtmpのconfigはこのようになっています。

初期設定から変えてないのと、問題だらけなので検証用以外には参考にはしない方がいいです。

VPS

VPSはProxyサーバーとして利用しています。

もともとhttp関係の受付サーバーとしてVPSを利用しているので、その中の一つに設定として追加しています。

VPS側の受付ポートは443ですが、オンプレ側では443は別のものに使われているため、ここのポートを曲げるためにもVPSが使われています。

CloudFlare Workers

ここでは映像閲覧用のhtmlファイルの送信に使用しています。
普通にオンプレ側でホストしても良かったのですが、せっかくなのでCloudFlare Workersを使用してみることにしました。

初めての使用でしたが、ドキュメント通りに動かすだけなのでとても楽です。

ドキュメントはこちらのCloudFlare公式のものを参考にしています。
ライブラリ等は使用していませんでしたが、適当に./publicを作ってhtmlを突っ込んだら動いてくれました。

CloudFlare DNS

みんな大好きCloudFlareさんです。

普通にDNSとして使用しています。
現在もCFを通したProxyを設定していますが、CloudFlare的にはライブ配信としての使用は制限をかけられるみたいなので、どこかでCFの設定を外しておこうと思います。

They limited my account because they thought I was using Cloudflare for streaming.

https://serverfault.com/questions/897890/Cloudflare-proxy-slow-http-download-speed

視聴環境

https://afklive1.megumiso.com で視聴可能です。何も起こってない限りは視聴可能です。

何も書いてないので寂しいですが、気が向いたら整備します(しなさそう)。

問題点

・hlsサーバーにパスワードをつけていない。
今回はローカルからローカルに配信しているため、外部からの接続を拒否すれば問題ないですが、通常はパスワード保護をするなりしないと誰でも配信可能な状態になります。(視聴URLから配信サーバーの情報が見れる)

・配信が重すぎる
仮想サーバーでゲームを動かして配信するのは控えましょう。やるならグラボをパススルーした方が100%いいです。
たまに止まるのはOBSがエンコードに失敗してるからなのではないかと思います。

・ラグがすごい
配信のラグは30-40秒くらいあります。設定を変更すれば5-6秒くらいまで軽減できそうですが、特に意味はないのでこのままにします。

今後とかとか

まだ作りたてなので機能はほとんどありませんが、JPを取った時に自動で動画を撮る機能や、ブラウザからスクショできる機能をつけることを目標にします。

メダルを入れる機能をつけると今度は規約違反になりそうなのでやめておきます。