linuxとOBSのNDIプラグインで安価に配信PC作ったが

以前に作った環境ですが、配信用(全然配信なんてしてないな…)PCのマザボとCPUを交換した所、どうも起動できない。DVDブートでインストーラーも動かない状態になり、困り果てていたのだが、電源も交換するとDVDブートしてubuntu18.04 LTSのインストーラーは起動した。この状態でSSDから起動しても、エラーになってしまう。ググったところ、どうも去年ぐらいの時点で、ryzenとubuntuの相性の問題があるらしいと判明。対応できそうなほど高度なlinuxの知識はないので、諦めてubuntu18.04で新しい環境を作ることにしました。以下、本題の環境準備手順。

結論から言うと、どうにか動作はするのですが、配信PC側でOBSのブラックスクリーン問題が発生します。いろいろいじっていると、何故か一回だけ動作したのですが、根本的な解決には至っておりません。引き続き調査中という感じです。解決したら書きますが、自力解決はほぼ諦めムードです。

殆どの人はゲームする環境はありますので、配信PCでの作業となります。インターネットにつながる状態であることを確認したうえで、いろいろインストールしていきませう。勿論、ゲーミングPCとは同じセグメントのLANにいる必要があります。ゲーミングPCと、配信PCのそれぞれから、同じルーターにLANケーブルが刺さっていれば大体はOK。

VNC関係のインストール

リモートでアクセスできるように、VNC関連の環境を整えたほうが楽なんだけど、実はこれがいろいろ上手く動作させるには難しかったりするし、OBSとはまた別の話になってしまうのでここでは触れません。すみません。(配信PCへのログインまでリモートから出来ると楽なのですが、それが出来る+OBS配信できる環境の組み合わせがなかなか…)

配信PCのOBSインストール

FFMPEGインストールして
sudo apt-get install ffmpeg

OBSがVLCのライブラリを使っている?っぽいので、VLCをインストール。配信以外にも便利なので入れておこう。
sudo apt-get install vlc

OBSのリポジトリを追加
sudo add-apt-repository ppa:obsproject/obs-studio

ubuntuのアップデートする。追加したリポジトリが更新されるんじゃないの多分。
sudo apt-get update

OBS本体のインストール。
sudo apt-get install obs-studio

NDIプラグインのインストール。ubuntuなので、debパッケージからインストールできる楽ちん~~。
https://github.com/Palakis/obs-ndi/releases
libndi3_3.0.1-1_amd64.4.debと、 obs-ndi_4.4.0-1_amd64.debをダウンロードして、ダブルクリックインストールできちゃう。

ゲーミングPCのOBSとNDIプラグインも、配信PCとバージョンを合わせ方が無難な気がします。今回の環境ではWindowsとlinuxなので厳密には合いませんが、どっちも最新版にしてみました。

インストールが無事に終われば、ubuntuのアプリケーションの一覧からOBSを起動させる。ゲーミングPCのOBSで、NDIoutputを有効にして何かソースを選ぶと、それが配信PC側OBSでも受信できるようになっている…筈なんですが、ここが上手くいってないのは冒頭に書いた通りです。OBS上での設定は、ゲーミングPCのOBSでツール→NDI output settingsで、Enable NDI outputにチェックを入れる。名前は適当で。配信PC上のOBSで、ソースにNDI Sourceを選択する。以上。

ゲーミングPCのOBSとNDIプラグインも、配信PCとバージョンを合わせ方が無難な気がします。今回の環境ではWindowsとlinuxなので厳密には合いませんが、どっちも最新版にしてみました。この記事を最初に公開した時点で、配信PCのOBS 22.1.0(Ubuntu)ゲームPCのOBS 22.1.2(Windows)

ここまでできれば、あとは実際の配信の準備をするだけです。フレームレートがどうのこうの、配信キーがどうの…。今までOBSで配信をやっていた人は特に困る事もない筈。配信作業の処理は配信PC側のOBSで行うので、場合によっては各種設定とかを手作業でやり直しになるんですが、その辺はしょうがないですね。どうせ端末が変われば配信設定などはどこかしら変えるものでしょう…。これも最初に書きましたが、リモート環境が整うと、リモートで配信PC側の設定変更が出来るのでかなり便利です。お金がある人は分配器やらPC切り替え機やら投入しましょう。

何かエラーか?

本当はこれだけでOKという凄く簡単作業なのですが、自分の環境では、配信PC上のOBSからNDIプラグイン経由で、ゲーミングPCのNDI出力が見れませんでした。配信PCのOBSヘルプメニューからログを表示してみると、あれこれが読み込みに失敗していると言われているようです。ググって対応を探ります。

うちはGTX960が配信PCに挿してあるのですが、これのドライバーが古いのか、おかしいのか?画面はちゃんと表示されていて、挙動に不自然なないのだが、数点のファイルを開けないと言われている。ではついでに、nvidiaのドライバをインストールする。今では簡単なコマンドで自動でゴリゴリとインストール出来るらしい。なお、自分はOBS配信のためだけの環境を作っているので気軽にゴリゴリとか言っていますが、他の用途でも使う必要があるとかならドライバー関係はちょっと慎重になった方がよろしいかと思う。

sudo ubuntu-drivers autoinstall

ドライバの更新が終わったら、PCを再起動する。

これをやっても、ブラックスクリーン改善せず。同じ状態の人はネット上に多々居るようなので、何か解決策がある筈なのですが。以前までの環境ではできていたので大変に悔しい。気長に探っていくか、各ライブラリやソフトウェア作者の頑張りに期待するしかないのか。しかし諦めきれないのでいろいろやってみました。以下の記録がどなたかの役に立つことを願いつつ…。

出力と入力を逆にやったらどうかと試してみたところ、なんと正常動作しました。配信PCであるubuntuの画面をNDI出力して、ゲーミングPCのNDISourceで取り込んだところ、画面取得できました。こうなると、どちらかPCのネットワーク関連の設定、firewall、アンチウイルスソフトなどが怪しいです。しかも自分の環境はゲーミングと配信でOSが違うという状態なので。

ネットで発見でした対応策は以下の通りです。

2番目のリストの内容は、Windowsのコントロール パネル→ネットワークとインターネット→ネットワークと共有センター→共有の詳細設定の変更にすすむ。「すべてのネットワーク」の閉じているドロップダウンメニューを開いて、「メディアストリーミングオプションの選択」を開いて、「有効にする」とかそんなボタンをクリックこの辺うろ覚えです。自分も一度はこれで出力を取得できましたが、今現在はまたブラックスクリーンです。解説動画ではこの辺の設定変更を毎回設定しなおす必要がある、と言っています。

【参照サイト様】
https://qiita.com/pochy9n/items/7b456acb0cb3d37756b3

https://qiita.com/KentaKawamata/items/c5826dbcc113321fbbcd

https://taktak.jp/2018/05/01/2974

※英語です。
https://www.youtube.com/watch?v=V27QZVOVMT4

VNCサーバをx11VNCに変更でどうにかなった

Ubuntu側のVNCサーバを、x11VNCというものに変更しました。これにしたところ、Windowsからのリモートセッション上で、OBSの起動が可能になりました!!肝心の配信を確認しようと思ったところで、サービスとしての起動が上手くいかずつまずいてしまいました。サービスとして登録できれば、Ubuntu側へのログインが、Windowsからのリモートセッションで処理できるので、以前にも書きましたけどUbuntu端末にマウスキーボードディスプレイが不要になります。そうじゃなきゃいろいろ大変だと思うんですけど、実際配信勢はどうしているの?PC切り替え機とか使うのかな。

いろいろ調べてもだめで、どうしたもんかと思ったんですけど、参考にしたサイトに記載されていた入力が必要なコマンドが、ブログのデザイン上右のほうが見切れていて、入力の不足に気付かなかったとか酷いオチでした。これで解決なら良いのですが、今度は想定通りに動くときと動かない時が出てきてしまいまって…。でもま、一応はうまくいっているので環境はできたという事にしましょう。

PC構成はこんな

UltraVNCで接続したら配信端末でOBSが起動できない…

配信用PCのGUI上でOBSを操作して配信というところまではできた、しかもubuntu+NDIプラグインという予算抑える環境で。ドヤ( ・´ー・`)というのが前回まで。

今度は、配信用PCにリモートで接続しての配信を試みます。これが上手くいけば、配信用PCでディスプレイやキーボードを繋ぐ必要がありません。ゲーミングPC上での操作だけで全てが解決します。リモート接続のソリューションはUltraVNCです。これも最初は上手くいかなかったのですが、いろいろ試すうちに何とかPC起動すると自動でvncserver起動するようにまで設定完了。あとは配信するだけなんですが。

結果、うまくいきませんでした。UltraVNCから接続すると、なんと配信PCのOBSが起動しません。焦ってディスプレイ繋ぎなおして配信PCに直接ログインすると、OBSはあっさり起動。配信も普通にできました…。VNC経由で接続すると、グラフィックドライバとかOpenGLか何かがおかしいっぽい…。エラーメッセージでぐぐるとhit自体はするので、何か原因と対策はありそうなのだけども。結構本質的なlinuxの知識が要りそうじゃないですか…。

お財布と相談した結果の理想の環境までもうちょっとなんですけどね…。実は他に配信PCでnginxとrtmpで配信サーバを立ててしまうという方法もあると知ったのですが。これはまた次に手詰まった時に試そう。

OBSとNDIプラグインで2PC配信環境作ったもののゲームPCから配信のほうがマシだった

2018年6月の新しいPC構成で、再チャレンジしております。

まあ配信用PCのスペックが足りないのか。

目的

ゲーム用PCから出力した映像を、配信用PCに送り、そこからTwitchなどで配信。配信時のゲームPCの負荷低減と、あまったPC環境の有効活用。これ自体はゲーム配信ガチ勢には良くある構成で、ゲームPCに配信の負荷をかけないという利点があります。配信殆どしたことない勢ですが、OBSのNDIプラグインを使えば、特別なデバイスが不要になる、linuxでも構成できるということでやってみました。結論から言うと、確かに配信はできます。従来の一般的な構成に加えると、キャプチャボードなどの機器や、配信用PCのOSとして用意するwindowsのコストが浮きます。

用意した構成

ゲーム用:Windows10
配信用:Ubuntu 16.04(64bit)
詳細は当ブログ内のPCスペックのページで。もちろん二台は同じLAN内にいます。どちらのPCにもOBS Studioをインストールして、追加でNDIプラグインをインストール。

OBSバージョン:どちらのPCも 20.0.1

NDIプラグイン
Ubuntu:obs-ndi 4.1.1(libndi3_3.0.1-1_amd64.1.debと、obs-ndi_4.1.1-1_amd64.deb)
windows:obs-ndi 4.1.1

実際に環境を作るのに両方のPCにそれぞれモニタとマウスキーボードがあったほうが捗る。環境構築の途中、windowsのfirewallでネットワーク許可聞かれるので、プライベートネットワークでの通信を許可します。詳細忘れちゃった…。

作業

OBS本体は情報豊富なので割愛。ubuntuにも普通にインストールできます。

https://github.com/Palakis/obs-ndi/releases

上記からOBSのNDIプラグインをダウンロードしてインストール。linux版もここから。debパッケージなのでdebian系といわれるubuntuは楽です。それ以外のディストロでも使えるものがあるかも…。NDIプラグインのインストール後にPCの再起動が必要です。ubuntuのほうも自分の環境では再起動したらうまく動いたのでやっておく。

配信用の設定をざっくりと書きます。

出力

配信
レート制御:CBR
ビットレート:1500-2000で何度か変えながら
プリセット:fastからveryfastで変えながら
プロファイル:main

音声:ビットレート 96

映像

基本解像度:1280×720
出力解像度:1280×720
縮小フィルタ:バイキュービック
FPS共通値:30FPS

配信

先にゲームPCでOBSを動作させておきます。ツール→NDI Output settingsで窓開く。名前は配信用PCから見える名前になるので、どのPCか判別できるような名前に。仮にgamingPCとしておきます。その上のEnable NDI Outputにチェックを入れると準備完了。すでに配信環境が出来上がっていて、配信やってます~なんて人はこれだけです。

配信PCでも同じように、OBSを起動する。ツール類のインストールが問題なく済んでいれば、ソースのところにNDI Sourceというのが増えている。選択するとSource nameで先に起動したゲームPCからの出力をソースとして選択できる。選択後少しすると、ゲームPCから出力された画面が見える。これを配信用PCでエンコードして配信するというわけです。これも過去に2PC配信したことある人だったら困るところはないと思います。

ゲームPCからの映像が来ないぞーという人はwindowsのfirewallかアンチウイルスソフトとかでゲームPCと配信PC間の通信が止められているかもしれません。また、自分の環境ではゲームPCのOBSを先に動作させて、Enable NDI Outputにチェックを入れておかないと配信PCのSourceに取り込めませんでした。

こうしてあっさりとtwitchで配信できました。しかし自分の環境では配信PCのスペックが足りないのかもしれない。720Pで映像bitrateが1800でもなかなか厳しいものがありました。これはネット上の情報でこのぐらいの設定で配信するもんだという情報をもとに設定したのですが、動きが激しくなるとすぐにカクカクです。配信ノウハウに乏しいので設定に問題があるのかもしれませんし、あるいはOSがubuntuというところに原因があるのかもしれません。またはNDIプラグインの原因なのかもしれません。まだまだ発展途上という感もあります。そう多くはない環境で地雷を踏んでいる感もありますが、仕事でやってはないのでこの状況を楽しんでいるという塩梅です。

twitchの「過去の配信」から自分のテスト配信を見ると、もっと画質周りの落としても満足できるクオリティになっている気がするが…。どのぐらいでみんな配信するもんなんでしょうね?そして、ゲームPCでゲームしながらTwitch配信しても正直PCの負荷的には余裕だったのが驚いた。bf1(ゲーム内画質低め)+配信でCPU10%ほどしか使わねえの…これがryzenの力か。やりよるわ。

その辺の配信のビデオ置いておきますね。ご参考になれば。

https://www.twitch.tv/nikahya/videos/all