Azure に展開した仮想マシンで Teams を利用して OBS でライブ配信できるようにしてみました

12 min読了の目安(約11400字TECH技術記事

@ikkou です。専門は XR ですが時々ライブ配信エンジニアをやっています。

このエントリは、個人的にめちゃくちゃアツかった 『まだ手元のパソコンでイベント配信してるんですか?クラウド上でTeamsを利用してOBSで配信した方が楽ですよ。』 を読んだけれど、クラウド? なにそれ? おいしいの? というクラウド初心者の配信者向け解説記事です。

クラウドであれば Azure に限らず AWS や GCP という選択肢もありますし、ミーティングツールも Team に限らず Zoom や Webex などが挙げられますが、今回は Microsoft Azure × Microsoft Teams という構成で解説します。

ちなみに少なからず費用が発生します。

下準備

Azure アカウントの作成

前述の通り Windows を展開するクラウドとして Microsoft Azure を使用します。
ここからしばらくは Azure 関連の作業が続きます。

Azure アカウントをお持ちでない方は、公式サイトから作成してください。

アカウントをつくるだけならお金はかかりませんが、クレジットカードの登録が必要です。
https://azure.microsoft.com/ja-jp/free/

特に難しいことはありませんが、公式サイトを読んでも「なるほど、まったくわからん」という方は、『Azureアカウントを作成しよう ―利用前の準備と知っておきたい3つのこと』を参照すると良いでしょう。

Windows インスタンスの選択

OBS での配信に際して、普段つよつよ PC で配信しているときと同じように、設定 → 出力 → 配信 → エンコーダで「ハードウェア」を選択するため、GPU が搭載された仮想マシンを立ち上げます。

様々なインスタンスが用意されていますが、元記事と同じ NV シリーズを見てみましょう。

NV シリーズはもっとも安価な NV6 インスタンスでも NVIDIA Tesla M60 の 1/2 相当の GPU が搭載されています。Tesla M60 はゲーミング向け GPU である GeForce で言うところの GTX 980 相当のパワーを持っています。

Azure は従量課金制です。今回の用途の場合は使うときだけインスタンスを起動する形になります。リージョンとインスタンスによって料金体系が異なります。

例えば米国東部リージョンで NV6 インスタンスの場合、起動している間は 1 時間あたり $1.44 の費用が発生します。もしも 24 時間起動しっぱなしにした場合はおよそ $35 の費用が発生します。

デプロイが 2020/10/31 までと決められている NV Promo シリーズであれば、プロモーション価格が適用され、同じスペックでも 1 時間あたり $0.96と、わずかに安価に済みます。

NC シリーズのキャンペーン、NV シリーズのキャンペーン、および H シリーズのキャンペーンを利用できる期間はどのくらいですか?
https://azure.microsoft.com/ja-jp/resources/knowledge-center/how-long-are-the-nc-series-promo-nv-series-promo/

今回は米国東部リージョンに、この NV Promo シリーズの NV6 Promo インスタンスを立ち上げます。

Azure VM で NV6 Promo インスタンスを作成する

立ち上げるインスタンスを決めたので、Microsoft Docs のクイックスタートに従って Azure Portal ( https://portal.azure.com/ ) から仮想マシンを立ち上げます。

クイックスタートに倣いながら、米国東部/インフラストラクチャ冗長は必要ありません/Windows Server 2019 Datacenter - Gen1/Standard NV6_Promo を選択し、仮想マシンを作成してください。

ホーム > Virtual Machines には作成済みの仮想マシンが表示されます。初期状態では何も表示されていません。

無事に作成されると、一覧に表示されるようになります。

ここで大事なポイントとして、作成直後から「実行中」となっています。つまり従量課金が発生しています。気になる方は作成した VM を選択後、一度「停止」してください。「停止」している間は従量課金が発生しません。

作成したインスタンスにリモートデスクトップ接続する

次は作成した仮想マシンに接続し、もろもろアプリケーションをインストールしていく準備をします。
「停止」している人は「開始」し、引き続きクイックスタートに倣って仮想マシンに接続してください。

接続後、まずは Windows Update を済ませておきましょう。

また、デフォルト言語は「英語」なので、不慣れな場合は Setting -> Language の Add a language から「日本語」を追加しましょう。

GPU ドライバーのインストール

無事に立ち上がった仮想マシンですが、GPU ドライバがインストールされていないので、OBS の設定 -> 出力 -> 配信 -> エンコーダが『ソフトウェア(X264)』しか選択できません。

このままでは仮想マシンを使っている意味がないので、ドキュメントに従って Windows Server 2019 向けの NVIDIA GRID ドライバーをダウンロード&インストールします。

Windows を実行している N シリーズ VM に NVIDIA GPU ドライバーをインストールする
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/n-series-driver-setup

同じページには NVIDIA Tesla (CUDA) ドライバーも載っていますが、必要なのは NVIDIA GRID ドライバーです。

インストール後、Windows を再起動し、改めて OBS の設定 -> 出力 -> 配信 -> エンコーダを確認すると、『ハードウェア(NVENC)』を選択できるようになっています。

必要なツールのインストール

特に難しいところはありません。必要なツールを順次インストールしましょう。

一点、このエントリ通りに進めている場合、おそらく標準ブラウザが Internet Explorer 11 になっている且つシステム要件で Microsoft Edge ( Chromium ) をインストールできないという状況のはずです。
IE 11 のまま進めるのは何かと不便なので、ここは潔く同じ Chromium エンジンの Chrome をインストールしておきましょう。

Microsoft Teams のインストール

肝心要のミーティングツールです。これが無ければ始まりません。

Teams のインストールの前に、ブラウザで Microsoft Teams 管理 センターから NDI を利用できるように設定を変更しましょう。デフォルト設定はオフです。

Microsoft Teams 管理 センター
https://admin.teams.microsoft.com/

この設定変更は「管理者権限」が必要です。機能が制限される無償版の Teams では変更できません。有償版の Teams を使うか、会社の Teams を使う場合は管理者の方に問い合わせて変更してもらってください。

左メニューの会議 -> 会議ポリシー -> グローバル(組織全体の既定値) -> 音声とビデオ -> NDI ストリーミングを許可する をオンにします。

NDI の設定をオンにした後は忘れずに画面最下部の「保存」して設定を反映させましょう。

管理センターで変更した設定が反映されるまで少し時間がかかります。その間に Teams のクライアントアプリをインストールしましょう。

Microsoft Teams
https://www.microsoft.com/ja-jp/microsoft-365/microsoft-teams/download-app

設定が反映されると Teams クライアントアプリの設定 -> 権限から NDA をオンにできるようになります。例によってデフォルト設定はオフです。且つ Teams を起動する度に毎回オンに変更が必要です。

// NDA がオンになっている画像を追加する

OBS Studio のインストール

言わずと知れた OBS です。この記事は主に配信者を対象にしているので、既にインストール済みの方が大半だと思います。

OBS Studio
https://obsproject.com/

obs-ndi のインストール

obs-ndi は OBS で NDI のリソースを受信するための「プラグイン」です。

プラグインは GitHub で提供されているので [Releases · Palakis/obs-ndi](Releases · Palakis/obs-ndi · GitHub https://github.com/Palakis/obs-ndi/releases) から obs-ndi-4.9.0-Windows-Installer.exe をダウンロードしてインストールします。バージョン番号は適宜読み替えてください。

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

インストール後、OBS を起動してツールに NDI™ Output setting が追加されていたら成功です。

Main Output にチェックを入れて OK をクリックして閉じます。

これで NDI リソースを扱う準備ができました。

obs-websocket のインストール

OBS websocket は、OBS のシーン操作をリモートで実現する OBS Web を使用するために必要な「プラグイン」です。

obs-ndi 同様に GitHub で提供されているので、[Releases · Palakis/obs-websocket](Releases · Palakis/obs-websocket · GitHub https://github.com/Palakis/obs-websocket/releases) から obs-websocket-4.8.0-Windows-Installer.exe をダウンロードしてインストールします。バージョン番号は適宜読み替えてください。

obs-websocket
https://github.com/Palakis/obs-websocket

VB-CABLE Virtual Audio Device のインストール

Azure で起動している仮想マシンにはサウンドデバイスがありません。

OBS の設定 -> 音声 -> グローバル音声デバイス -> デスクトップ音声には無効となっていて、他の選択肢が表示されず、この状態では obs-ndi で映像が受信できるようになっても音声を配信できません。

この状態を解決するため、仮想サウンドデバイスである VB-CABLE Virtual Audio Device をインストールします。

VBCABLE_Driver_Pack43.zip をダウンロードして解凍後に出てくる VBCABLE_Setup_x64 を実行してインストールします。

VB-CABLE Virtual Audio Device
https://vb-audio.com/Cable/index.htm

Install Driver をクリックし、インストール -> OK と進めてください。

改めて設定画面を表示すると、選択肢として「リモートオーディオ」が表示されるようになっています。

ここで 1 度 Windows を再起動します。
再接続時、元記事に倣ってオーディオまわりの設定を済ませます。

まずは、リモートデスクトップ接続 -> ローカルリソース -> リモートオーディオ -> 設定 -> リモートオーディオ再生 -> リモートコンピューターで再生する を選択して接続します。
この設定はリモートデスクトップ接続の度に必要です。

次に、Windows Audio サービスを自動起動に設定します。

現時点ではスピーカーアイコンの上に「Audio サービスが実行されていません。」と表示されています。

仮想マシンの起動とともに有効化するため、管理ツール -> サービス -> Windows Audio をダブルクリック -> スタートアップの種類が「自動」に変更します。

最終的には OBS のデスクトップ音声で CABLE Input を選択できるようになっていれば、デスクトップ音声が拾えるようになっています。

これで「下準備」は完了しました。

配信

下準備が済んだので、いよいよ Azure に展開している仮想マシンで Teams を利用して OBS でライブ配信をやっていきます。

配信者に OBS での配信方法を説明するのは釈迦に説法なので、肝となる NDI の部分と OBS-web の部分を説明します。

ソースで NDI™ Source から必要な要素を取り込む

NDI をオンにした状態で Teams を起動して適宜関係者を招待したり画面を共有します。あとは普段の配信と同じようにシーンを作り込んでいくだけです。

obs-ndi がインストールされていると、ソース -> 追加で NDI™ Source を選択できるので、ここからスピーカーや発表資料の画面を取り込みましょう。

Teams は NDI で映像を出力していると、追加した NDI™ Source のプロパティ Source name から次のように画面単位で取り込めるようになっているので、トリミングを必要としないことがあります。

  • MS Teams - アクティブなスピーカー
    • 喋っている人
  • MS Teams - 共有画面
    • 画面共有している発表資料など
  • MS Teams - ローカル
    • 自分自身のカメラ映像
  • MS Teams - {$参加者名}(ゲスト)
    • 参加者の数だけ表示される

Teams の NDI による映像の取り込みには次の注意点があります。

  • ホストが共有している画面は NDI で出力されないので、画面共有は他の人に任せる
  • 回線状況で動的に「映像の解像度」が変わるので、対象の NDI ソースを右クリック -> 変換 -> 変換の編集で次のように設定する
    • バウンディングボックスの種類「境界の幅に合わせる」
    • バウンディングボックス内の配置「中央」
    • サイズ「任意のサイズ」

ここまでできたらあとは OBS の「配信開始」ボタンを押して YouTube Live の方も配信を開始するだけです。

OBS-web からの配信コントロール

OBS-web はリモートで先にインストールしたプラグイン OBS Websocket を使ってリモートからOBS を制御するウェブアプリケーションです。複数人によるシーンの切り替えを実現できるようになります。

OBS-web
http://obs-web.niek.tv/

似たようなウェブアプリケーションとして OBS Tablet Remote もありますが、今回は OBS-web を使用します。

OBS Tablet Remote
http://t2t2.github.io/obs-tablet-remote/

OBS のツール -> WebSockets Server Settings から WebSockets サーバーを有効にしておきましょう。「認証を有効にする」のチェックは外しておきましょう。

OBS-web を使う準備

OBS Websocket がポート 4444 を使っているので、仮想マシンに紐付いているネットワーク セキュリティ グループから 4444 を開放します。

仮想マシンに紐付いているネットワーク セキュリティ グループ -> 設定 -> 受信セキュリティ規則 -> 追加から「宛先ポート範囲」に 4444 を指定します。セキュリティ的なアレで「ソース IP アドレス」は設定しておくと良いでしょう。

Windows には OS としてファイアウォールが用意されているので、ポート 4444 を開放しただけでは OBS-web から Azure 仮想マシンの OBS に繋がりません。適宜 Windows 側のファイアウォールも開放してください。

適切に開放することで OBS-web から Azure 仮想マシンの OBS のシーンを操作できるようになります。


というわけで元記事をなぞりながら、Azure に展開した仮想マシンで Teams を利用して OBS でライブ配信できるようにしてみました。

余談ですが本記事のための Azure 使用量は 1,000 円もかかっていません。
実際の運用では 1 配信あたり数百円というのは事実ですね。

個人的な見解は次の通りです。

  • リージョンの選択で変わる余地があるという前提で、それでもやや遅延が気になる
  • 手元につよつよ PC がなくても配信できるのは魅力的だと認めつつ、できる幅は狭まる
  • クラウドは関係なくなってしまうけれど OBS-web は便利

そもそも自分の場合は、手元に配信も意識して調達したつよつよ PC にマイクとかミキサーとか STREAMDECK とかあれやこれやを揃えているので、それらのメリットを差し置いてまでしてクラウドを利用する必要性は感じませんでした。

とはいえ自宅環境以外での配信、例えば屋外での配信など、設定もろもろを済ませておけば何かと捗る気がしたので、常に頭の片隅には置いておきたいと考えています。遅延関係は日本リージョンで試すなどもやってみたほうが良さそう。

せっかくなのでここから拡張して Azure Media Service を使ったライブストリーミングを試してみるのも面白いかもしれません。

現場からは以上です!
良きライブ配信ライフを!


参考にした元記事