ubuntuとOBSのNDIプラグインでゲーム配信PC

主に自分用のメモとして、過去に何度か作りかけだった環境の更新。根本的な部分で解決はしていない問題が山積みです。過去の環境構築のエントリは以下リンク先。

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

ubuntuを20.04.1 LTSにアップグレード。linux界隈ではゼロから再構築が常道なのかもしれませんが、学習も兼ねてCUIでアップグレード。無事に20.04になったところで、各ツールの動作確認と配信テストをしてみるも、先のリンクと同じ状態でした。配信PC→ゲーミングPCにはNDIプラグインで出力できますが、本来やりたいゲーミングPC→配信PCへの出力が動作しません。そこで、前述のリンク先の手順を試しました。

Windowsのコントロール パネル→ネットワークとインターネット→ネットワークと共有センター→共有の詳細設定の変更にすすむ。「すべてのネットワーク」の閉じているドロップダウンメニューを開いて、「メディアストリーミングオプションの選択」を開いて、「許可」にする。これで、配信側のOBSを一旦手動で閉じて、OBSを起動しなおすとNDI出力に成功しました。ゲーミングPC側のOBSを先に起動してゲーム映像を出力している状態にしてから、配信PC側のOBSを起動すると上手くいくことが多いようです。

安定しないので、テストとしてゲーミングPC単体からの配信をやってみたところ、問題なし。warzoneのチュートリアルだったのですが、負荷の高さが配信パフォーマンスに影響出ているのでしょうか、画質が酷かった。これについてはPCも結構パワーアップしているので、あとで設定見直そう。音声出力とか、配信画面サイズとかもめちゃくちゃでした。

なお、机とラックが広くなったことで、配信PC用にマウスとキーボードを用意しても、あまり邪魔にならない状況になりました。このため、deamonとしてのvncサーバの動作にこだわるのはやめました。これが出来ると、配信PCを起動したあと、配信PCへのログイン前にリモート経由でゲーミングPCからログインできるので、マウスとキーボードが不要というのがメリットになる筈でした。…だったらもうVNC自体意味がないのでは…。

ゲーム内広告は良い試みだと思う

Street Fighter 5(以下、SFV)での、ゲーム画面内広告が不評らしい。youtubeでもTwitchでも、広告が表示されること自体は当たり前と言っても良いぐらいのことで、いまさら「広告が出るなんてとんでもない!!」という人は少数かと思う…。ゲームの大会配信とかでも、休憩がてらの広告があったりするじゃないですか。そういう所から根本的な費用を捻出していることが多いだろう。そういう事情は今どきのユーザーというかファンも十分に承知している所かとおもう。

では自分がプレイするゲーム内に出てくるのはどうか?

受け入れられるかどうかは、内容と出し方による、という当たり前の結論になるかと思う。そのパターンはあまりにも多彩だろう。例えば「マップのローディング画面に出る」とかなら許せるだろう。でも「広告表示が終わるまではローディングが終わっても待たされる」だったら憤慨してしまう。また、文化・政治・宗教・その他いろいろな価値観により、受け入れがたい内容が表示されるというのも避けれるもんなら避けたくないです?(商品の広告でそんなもん少ないとは思いますけどー)せっかくお気に入りのゲームなのにこれは悲しいよ。

広告の内容は、ビジネスのレイヤーで以て調整がされれば良い。どんでもねえ広告をぶっこんで来たらそんな広告主や製作者とおさらばしてしまえばよい。できない時に問題ではあるが…その時はゲームごと炎上してなくなるんだろうか。

さて、広告が出る事自体は受け入れるとして、ゲーム内への実装の段階でどうするか。ローディング画面はCMになって待ち時間は伸びるのか。何もできない時間を少なくできるか、というのはゲーム制作者の技術力の神髄なんじゃないかと思う。長い広告を望むというなら、真逆の話。youtubeでも長い広告はヘイトを集めているもんね。日本の歴史ある大企業、お前らだ聞いてるかF##K

だったら、ゲームプレイ中に邪魔にならねーように出せばよい。キャラクターの衣類や背景に入れるというのはとても良い着地点だと思うのだが、どうでしょうか?SFVなら何の広告入れてもそう違和感ないよ、現実世界でもadidasとか書いてある服着てるんだから。

問題はマッチするかですよ。BFVでもコーラの看板ぐらいなら別におかしくはない。PUBGでは翼を授けるデザインの栄養ドリンクあったよね。スカイリムでは…ポケットを漁ったら大塚製薬のカロリーメイトが!…個人的には面白いと思うんだけど、嫌う人いるかな。

広告を出しやすいゲームと、出しにくいゲームというのが存在することになりそうだ。そうなると、全体的にゲームは広告を出しやすくなっていく可能性がある。これをポジティブに捉えるゲーマーは少ない。逆に、ゲームに登場しやすい製品が増えるという可能性がどれだけあるだろうか…。十年ほど前に、FFに登場するアイテム型のドリンクが売り出されたことがあり、あれはかなり好評だった。スライムの肉まんというのもあった。こっちの方向性はおおむね好評なんでは?自分はingressのロゴのキーホルダー持ってますが、さりげなーく持てるアイテムなんで実用しても大丈夫だ!

大丈夫ってなんだよ。

自分のようなおっさんは、webサイトにいろんな広告が出るようになっていく様子も、youtubeとか動画に広告が載る様子も見てきました。ゲームに於いては今後どうなるか実に興味深いのです。売れる漫画がさらに稼ぐコツとして、おもちゃになりそうなものを作中に出す、というノウハウがジャンプ連載中の作家から語られたことがあります。(記憶では「燃える!おにーさん」だった筈) おりしも、現在は3Dプリンタとやらで、現実世界にアイテムを登場させるのも昔ほど難しくなってないと思います。さあどうなりますか。結果としてナンセンスギャグかよ、って状況になっても笑えるんだったら、自分はまだまだゲームを楽しめると思います。

しかし…何気なく書いたけど、広告表示のためローディング引き延ばしって明日にでも実装されそうでヤダねえ。

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