NDIを使った2PC配信について

今回はNDIを使用したOBSでの2PC配信について考察したいと思います!

2PC配信とは

読んで字のごとく、2台のパソコンでゲームと配信を行うことです。

ただ、構築方法が複雑だったり、トラブルが発生した際に対応できる知識が必要となってきます。

また、構築によってもメリットデメリットがあるので、取捨選択が必要となります。

その中でも、よりシンプルな構築をできるNDIでの配信をご紹介します。

メリット

・メインPC(ゲームするPC)の性能を100%発揮できる

・ゲーム中のフレームレートを高く維持できる

・配信の画質を向上することが出来る

・配信PCと分けるため、メインPCのトラブルを分離できる

デメリット

・高い初期費用

・構築の複雑さ

・トラブル発生時に対応する箇所が増える

実際の構築方法について

NDIを用いた構築

メリット

・比較的、機材費用が抑えれる

・低遅延で配信PCへ映像を送信できる

・DCT(離散コサイン変換)圧縮による、高画質高効率の映像送信

デメリット

・NDIで一度エンコードされるため、わずかに画質が落ちる

・NDI送信時にメインPCにてCPUエンコードを行われるので、メインPCにわずかな負荷が発生する

・無線ルーターでNDI使用し他のデバイスを使用している場合、ルーターの処理不足や帯域不足が発生する可能性があり、映像が正常に表示されない場合がある

・ファイヤーフォールやセキュリティソフトで映像を受信できない場合がある

OBSのソース設定

それぞれのPCにOBSNDI Runtime、OBS NDIプラグインをインストールし、ゲームPCにはマイクとヘッドホンを接続します。

ゲームPCでOBSを立ち上げ、ソースにゲームとマイクデバイスを設定します。

ソース設定

ゲームキャプチャ:対象のゲームを選択

※モードは「特定のウィンドウキャプチャ」がおすすめ。

映像キャプチャデバイス:ウェブカメラ(使用する場合)

アプリケーション音声キャプチャ:ゲーム音声

※これを使用しなくてもゲーム音声はOBSに取り込むことが可能ですが、ゲームとマイク以外の音声が入り事故を防ぐため、一応設定しています。

音声入力キャプチャ:マイクデバイス

デスクトップ音声を規定(Windowsで指定しているデバイス)にすると、配信(NDI)にWindowsのシステム音やブラウザの音声が入り込むので、ここは無効にしておくと更に事故が防げます。

設定 → 映像から基本解像度を1080PにFPS共通を60FPSに設定しておかないと、NDIでデータを送信した際にカクついた映像になる。

NDIの設定(ゲームPC側)

上記の設定が完了したら、OBSのツールを開くとNDI Output Settingsが追加されているので、これを開くとNDIの送信の設定を行うことが出来ます。

NDIの設定(ゲームPC側)

Main Output:プログラムの映像を送信

Preview Output:プレビューの映像を送信

※要検証ですが、Preview Outputにもチェックを入れると、プレビュー映像もエンコードされて送信される可能性があるので、オフにしています。

Tally:プログラムとプレビューのタリーを送信

※タリーとは映像業界で使用されている、タリーライトの事だと思います。ここでは使用することはないので、オフで問題ないです。引用:株式会社Cerevo

NDIのMain OutputをオンにしOKボタンを押した時点で映像が送信されるので、OBSの映像設定周りを変更する場合はオフにすれば変更することが出来ます。

NDIの設定(配信PC側)

ゲームPCと同じようにOBSNDI Runtime、OBS NDIプラグインをインストールします。

ゲームPCの映像を受信するためには、OBSのソース+ボタンを押すことで、NDI Sourceを選択することで取り込むことが出来ます。

受信側のNDI設定

同一のネットワークにゲームPCがあれば、Source nameにゲームPCが表示されるはずです。

Source name:送信元PC

Bandwidth:ネットワーク帯域

※詳細がよく分からないので、Highestでヨシ!

Sync:同期タイミング?

※こちらもSouece TimingとNetworkで違いが分からなかったので、環境にあわせて設定してみてください。

Allow hardware acceleration:受信した映像をデコードする際に、GPUで処理を支援する機能だと思います。

Fix alpha blending:不明(色々試してみましたが、謎でした)

YUV Range:Partial(部分的)がおすすめ、Fullにすると全体的に白っぽくなります。

YUV Color Space:YoutubeではBT.709の色空間に対応しているらしいで、BT.709に設定しておきましょう。

Latency Mode:レイテンシーモード。Lowにすると高確率でコマ落ちが発生するので、NormalでOKです。

Enable audio:これをオンにしないと音声を受信できません。

これで無事、配信PCに映像が受信できたのであれば、これで配信することが出来ると思います。

キャプチャボードを使用した配信構成は、またいつか記事にできれば…

余談

NDIではフレームレートの制約がないので、OBS&NDIで120フレーム以上の録画ができるのでは?と調べたところ、

OBSの映像設定からFPS分数値を240/1にすることで、240フレームのプレイ動画を録画できると思います。

ただし、送信データが肥大化するので、ネットワークハブに問題なくデータを送信できるか確認が必要となります。

NewTek, Incが公開しているAdding NDI™ to Your Networkによると、1枚のフルHD(1080p)約60フレーム映像をメインPCから配信PCに送る際に125Mbps(=15.625MB/s)を必要とするそうなので、理論上はスイッチングハブは1Gbps(=0.125GB/s)であれば、間に合うかと思います。

240フレームの映像を録画する場合、フルHD(1080p)の1フレームが(125Mbps ÷ 59.94 =)約2.08Mbpsなので、2.08Mbps x 240 =約500Mbps(=62.5MB/s)となるので、理論上1Gbpsのスイッチングハブで間に合いそうですが、

バックグラウンドの通信やゲーム等で帯域を使用されることを考えると厳しそうではあります。

10Gbpsのネットワークハブ等を使用すれば、帯域的には余裕をもって映像を送信できそうですね。

2 件のコメント

  • OBSの設定はこのブログ通りにしたのですが
    メインPCと配信PCがつながりません。。。
    配信PCのOBS、NDIソースにメインPCが出てきません
    同一ネットワークにいないということなのでしょうか?
    PCは自宅のモデムからそれぞれ有線で繋がれいるんですが…

    • 記事をご覧いただきありがとうございます!
      配信PC側でNDIソースが表示できないことは、様々な要因があるので難しいところです。
      まず、ゲームPCと配信PCで同一のローカルネットワークなのか確認する方法として、
      1. コマンドプロントを起動し、ゲームPCと配信PCに「ipconfig /all」と打ち込みます
      2.(例)「IPv4 アドレス . . . . . . . . . . . .: 192.168.0.2」と表記が出てくると思うので、このアドレスが使用しているローカルIPアドレスとなります。
      3. 次にコマンドプロントで「arp -a」と打ちこみます。
      4. 「インターフェイス:192.168.0.2」と表示され、その下にローカルネットワークに接続しているIPアドレスが表示されます。(192.168.0.1など)
      5. その一覧の中から2.で確認したIPアドレスが表示されていると同一のローカルネットワークに接続出来ています。

      また、同一ネットワークでもNDIソースが表示されない場合は、セキュリティソフトやWindowsのファイヤーウォールに引っかかっている可能性があるので、ゲームPCと配信PC共にOBSの通信を許可してみてください。
      https://flowlight-music.com/blog/obs-ndi_firewall/