ブラウザ同士で簡単に映像送信ができOBSにも取りこめるVDO.Ninja

VDO.Ninjaの情報を求めて来られた方は次の見出しまでジャンプしてください!

■屋外UTの中継をするための試行錯誤

先日、複数の場所を往復しながら実施するUTがありました。インタビュー部屋とプロダクトを触る部屋が異なる、みたいな感じ。しかも後者はWi-Fiが使えない屋外。どうにかこれらの映像をシームレスに記録と見学者への配信を行いたい、というニーズ。セッション全体の1/3、30分位の時間ですが炎天下の屋外に移動する為、バッテリーが保つこと、機器やネットワークが安定した機能することも視野に入れなければなりませんでした。

250mほどの距離で当然HDMIケーブルやLANケーブルが敷ける距離でもなく、Wi-Fiも届きません。同一ネットワーク下にないので先日紹介したNDIなども使えません。別記事で紹介したRTMPも受信拠点側をポート開放する必要があったり遅延が大きめだったりで微妙に使いにくい。すぐに思い付くのはZoomやTeamsといったオンライン会議ツールでの参加ですが、スマホのカメラは光学ズームが弱いので、物理で寄らないと手元など細かい対象を撮ることができず、ソーシャルディスタンスやラポール形成的に不利。できれば光学ズームのビデオカメラ映像を使って配信したいなと思いました。(ちなみに最近では望遠レンズを備えたスマホもありますが、Zoomなどのアプリはそれらを使えません。ピンチズームしても標準カメラの像がデジタル拡大されるのみです。Android版に至ってはピンチズーム自体できませんでした(執筆時点)。屋外なので騒音対策としてきちんとワイヤレスマイク(Wireless GO 2)を使った音声収録をしたいのですが、これら外部マイクもスマホ版アプリは制限が大きかったりします(後述)。

そんなこんなでどこにも行けない御盆休みは手持ちのRTMP配信カメラ(HXR-NX80)、GoPro Hero9、スマホ版Zoomアプリ、UMPCなど持てる機材をあーでもないこーでもないと組み合わせて試行錯誤をしておりました。

本題と関係ないですが、その試行錯誤の様子を貼っておきます。

まずは手持ちスタイル案。

手持ちスタイル案

ビデオカメラのHDMI出力をAndroidでも使えるHDMIキャプチャアダプタBU110を経由してGalaxy Note 10+に入れています。ブラケットやホルダーも含めると845gにもなりました(笑)。ビデオカメラのバッテリーは小さいものだし、スマホのUSBポートもキャプチャで塞がるので外部給電もできず、スタミナにも不安。前述の通りAndroidのZoomアプリは外部カメラやマイクを認識しないので配信系のアプリでRTMP送信するしかない点もイマイチ。

そこでモビリティは落ちるものの、安定性やスタミナ重視で組んでみた装備がこちら。

三脚+UMPC案

三脚にセリアで買った木製パンチングボードをタイアップで吊り、そこに各種装備を固定しまいた。三脚の根元にぶら下げているだけなので、足をたたんで移動することも可能。PCは手持ちラインナップでCPUパワーとサイズのバランスをとってOneMix 3 Pro。Surface Go2 (CoreM3 + LTE版)だと見た目はスッキリしますがちと配信能力に不安があったので。OneMixはLTE非搭載などで別途モバイルルーターを追加。さらにはUSB PD給電のためのモバイルバッテリー、とか詰んでいったらこれまたエラい重量になってしまいました。ドリーが欲しいところです。ただWindowsなのでZoomなどのプライベート通信サービスでも外部カメラ、外部マイクは区別なく使えるので映像、音声の品質は向上させられます。

ちなみにどちらもビデオカメラ側で録画ができるので、保存用としての品質は保持できます。あと、最近の家庭用ビデオカメラによくあるスマホ用プレビューアプリを使い、スルー画をスマホに映した状態をZoom等の画面共有で流す、という方法も検討しましたが、

  • スマホプレビュー中はビデオカメラ側の液晶が真っ黒になってしまい、撮影に支障が出る(SONY、Panasonic)
  • Panasonicはアプリから音も拾えるがそれをZoomでキャプチャして流すことはできない。SONYはそもそも音は聞けない。
  • スマホに直接マイクを接続した場合も、やはりアプリが認識しなかったり、しても絵との同期に問題が出そう。

などの問題があってボツ。

で、結局のところどうなったかというと、先ほど先方から連絡があり、関係者に発熱者が出て実施が無期限延期になりましたorz。難しいですね。炎天下の屋外作業を伴うプロジェクトだったので発熱はしますわ。自分も昨年の案件で軽く熱中症と思われる発熱。PCR検査では陰性でしたが安全優先で実査を中止にさせてしまったことがあります。涼しくなった頃にまたリトライできるといいなと思います。

で、やっと本題。今回の試行錯誤の中で見つけたとある映像伝送手段が色々と応用が利きそうで、まだあまり日本語の解説ページが多くなさそうだったので、ご紹介してみようと。

■VDO.Ninjaの紹介と簡単な使い方(ここから本題)

上記の試行錯誤をしている間に、たまたまFacebookの(英語の)OBSグループで名前を見かけ、調べてみたらスゴいじゃんこれ!となりました。ちなみに少し前まではOBS.Ninjaという名前だったぽいです。実際にはOBS Studio以外でも使える汎用性の高いサービスなので改名したんでしょう。

簡単にいうと、ブラウザ同士で簡単に映像&音声伝送が低遅延で行えるサービスです。OBSには「ブラウザソース」という指定URLの内容をソースとして扱う仕組みがあるので、わざわざブラウザで当該ページを開いてそれをウインドウキャプチャする必要なく映像を受けることができます。無料です。

少し技術的な説明をした方が理解が深まりそうなので、ベースとして用いるWebRTCというプロトコルについて先に説明します。

WebRTCはモダンなブラウザが実装している映像、音声を伝送する標準規格で、暗号化もブラウザが受け持ってくれて、ZoomやTeamsがブラウザからも参加できているように、HTML5上で比較的簡単に映像、音声を伝送するサービスを構築することができる仕組みです。利用者は専用アプリをインストールしたりしなくていいし、開発者も本来高いスキルを要する映像通信技術の大半(ファイアウォール超えや暗号化、GPUのハードウェアエンコード支援の利用、etc.)をOSの区別すら必要なく実装できてしまいます。しかもRTMPのような従来のプロトコルよりも遅延が低いとか。

さてそのWebRTCですが映像伝送自体はPeer-to-Peer、つまり端末同士の直接通信で行われ、暗号化も自動で行われます。ただし最初のハンドシェイクの部分だけはインターネット上のサーバーが仲介する必要があります。VDO.Ninjaはその互いの紐付けの部分を代行してくれるWebサービスという理解でいいと思います。実際の映像通信はここのサーバーを経由しないので比較的小規模で運用できるのか、Steveさんという個人主体のプロジェクトのようです。しかもサーバー一式はGithubで公開されているので、自前サーバーや完全閉鎖LAN内で稼働させた人はそちらを利用することも可能でしょう。Steveさんはサーバー代月$1,500を支援するスポンサーを募集していますので、VDO.Ninjaが有用で長く続いて欲しいと思う方は是非寄付を検討しましょう。Github Sponsorsによる継続支援やPayPalなどによる一時寄付も選べます。

■VDO.Ninjaを使ってみる

全体的に英語UIですが、手順はクッソ簡単です。サービス名であるVDO.ninjaは実はそのままサービスのURLになっています(.ninjaなんていうgTLDがあったんだ…)。つまりブラウザのアドレス欄に「vdo.ninja」を打ってリターンをします。いくつか方法はありますが、まずは映像を送信する側の端末(スマホ等)で開きましょう。

トップページ

「Add your Camera to OBS」はカメラ映像の送信、「Remote Screenshare into OBS」は画面共有です。ただし現状スマホからは画面共有は使えずボタンも出現しません。

ここでは全者をPCから開いてみます。

準備画面(カメラ/マイク設定。実際には黒枠にカメラ映像が映ります)

「Video Source」と「Audio Souce」プルダウンメニューにOSが認識しているカメラとマイクが表示されるので選択します。その前にブラウザからカメラとマイクへのアクセス許可ダイアログが表示されるので許可します。一度拒否してしまうとこのサイトがブラックリストに入れられてダイアログも出ずに不許可になってしまう場合がありますが、その時は(操作はブラウザによりますが)プライバシー設定などから除外対象サイトから外すなどします。(ちなみにこのようにWebRTCはブラウザがカメラやマイクにアクセスする際に必ずユーザの許可を得る仕組みになっているので、URLを踏んだだけでカメラやマイクが不正アクセスされることはありません。)

実際には黒枠内に選択したカメラの映像が見え、「Audio Source」見出しの脇に音声に応じたピコピコ(レベルメーター)が表示されます。

次ページで発行されるURLの乱数部分が含まれますが偶然一致してしまう可能性もあるので、ここでパスワードを付加することもできます。

で、「START」を押すと送信が開始されます。

送信中画面(実際には黒枠内にカメラ映像)

右上にグリーンで表示されているURLが受信者用のURLになります。このURLを相手方にメールやMessengerなどで伝え、ブラウザで開いてもらえば映像と音声が流れるはずです。

ここの時のURLのフォーマットを比較してみると、

  • 送信者用: http://vdo.ninja/?push=hogehoge
  • 受信者用:https://vdo.ninha/?view=hogehoge

という感じで、pushかviewかの違いのみになります。要するに=の後のhogehgoeの部分が一致すれば映像/音声が流れます。このサイトでは乱数で決めてくれますが、自分で他の人とかぶらない文字列を指定しても大丈夫なはず。かぶりそうな時はパスワードを追加します。パスワードがついたURLは、

  • 送信者用: http://vdo.ninja/?push=hogehoge&pw=abcdef
  • 受信者用:https://vdo.ninha/?view=hogehoge&pw=abcdef

となります(abcdefがパスワード)。

OBS Studioにソースとして取り込む(1)

2つの方法があります。1つ目はもっとも簡単な方法で、OBS Studioのソースとして「ブラウザ」ソースを使います。

OBSの「ブラウザ」ソースに設定

URLに発行したID、PW入りのURLを貼り、表示したいサイズを指定、音声も取り込みたい場合は「OBSを介して音声を制御する」チェックボックスをONにします。

OBS Studioにソースとして取り込む(2)

もう一つの方法は作者のSteveさんがリリースしているElectron CaptureというビューワーでURLを入れ、表示された映像をOBS Studioのウインドウキャプチャで取り込む方法です(Windowsのみ)。一見、外部ツールを使う分効率が悪そうですが、Steveさん曰く「it may offer a more flexible and reliable method of capturing live video than the browser source plugin built into OBS.」とのことです。マウスカーソルが完全に隠せるとか、バッファー指定で音声同期が外れにくいなどあるようです。メリット一覧はこちら。パケットロス耐性が高く、システム負荷が低いということなので、面倒ですが使った方がよさそうですね。

送信側のハードウェアエンコード支援を使用する

一般にOBSを動かしたりする受信側ハードよりも、スマホ等を使う送信側の方が非力であることが多いでしょう。その時、ローエンドなCPUやモバイルSoCでも映像をリアルタイムに圧縮して送信するにはGPUのハードウェア支援を使用することが重要になってきます。WebRTCベースである利点として、ここいら辺は各OSのブラウザが(ハード的に対応していれば)活用してくれるという点。VDO.NinjaでこれをONにするには圧縮コーデックにH.264を指定するのみです。H.264はBlu-rayなどにも使われるメジャーなコーデックなので数年前のCPUやスマホでもフルHDくらいなら支援が受けられます。

送信側でハードウェア支援を有効化する為に、H.264を使うぞという宣言を受信側のURLオプションを使うのがミソです。

  • パスワード無し: http://vdo.ninja/?push=hogehoge&codec=h264
  • パスワード有り:https://vdo.ninha/?view=hogehoge&pw=abcdef&codec=h264

ブラウザにもよるかも知れませんが、標準ではVP9というYoutubeなどで使うコーデックが優先されるようです。ただ最新のハードだとVP9でもハードウェア支援が受けられたりするので、あまり違いは出ないかも知れません。スマホや非力なPCの場合に試してみて、画質やCPU付加を比べて良い方を使えば良いでしょう。

ちなみに送信側でハードウェア支援を活用できているかの確認は、映像送信中に送信側のブラウザ上でCtrlキーを押しながらプレビュー映像をクリックします。

送信側で詳細情報を確認

するとこんなリストが出てくるので「video_encoder」の欄が「ExternalEncoder」になっていればOKです。試しにURLから「&codec=h264」をなくすと「libvpx」となりVP8か9のソフトウェアエンコーダーライブラリが使われているのがわかります。

URLパラメーターにはコーデック以外にも色々指定できます。使い方はこちら。パラメーター一覧はこちらです。ビットレートを指定したり、カメラ/マイクデバイスのリストでデフォルト選択されるデバイス名を埋め込んだりできるようです。

再利用可能なリンクを作る

上記の手順でAdd your Camera to OBS」や「Remote Screenshare into OBS」から送信URLを生成すると毎度ランダムな文字列のIDが発行され、OBS Studioなど受け側で毎回URLを書き換えなければならず不便です。また上記のようなオプションパラメーターをURLに埋め込むのも骨がおれる作業です。

そういう場合はこちらのジェネレーターを使ってGUIでオプションを指定してURLを作成し、送信側、受信側に渡せば何度でも再利用することができます。

ルーム機能について(検証途中)

まだしっかり試せてないのですが、サーバー上に仮想ルームを作成し、一旦そこに複数のカメラ映像を集め、ブラウザ上でスイッチャーのように使ったり、音声のノイズ低減やテキストチャット機能が使えたりするぽいです。

■まとめ

驚くくらい簡単に遠方の端末のカメラ映像、音声、画面共有を表示したり、OBS Studioなどのソースに入力できるVDO.Ninjaを紹介しました。原理的にはNDIの遠隔版であるNDI Bridgeとほぼ同じ仕組みだと思いますが、送信側がブラウザなのは同様で、受信側があちらは専用ツールが必要、こちらは不要という点が異なります。厳密に画質や遅延、処理負荷などを比較したわけではないですが、おそらく原理上は似たり寄ったりになるんではないかと思います。だとしたら手軽さでは断然こちらに分があるのではないかなと思います。

望みはスマホからUSB(UVC規格)経由のWebカメラやHDMIキャプチャアダプタ経由のビデオカメラ映像を送信できるようになることですね。これはOS側の対応待ちというところです。ちなみにChromeOSはUSBカメラをソースとして指定できました。できるだけ軽量安価な端末というと現状ではChromeOS+Chromeが候補でしょうか。Raspberry Pi4やJetson NanoにLinuxを入れてChromeを使ってもいいようなので、いずれ自作でVDO.Ninjaエンコーダーユニットを組んでみたい気もします。

私の理解ではファイアウォールを超えられつつもきちんと暗号化でP2P通信ができるので、なんだかんだでZoomやTeamsになりがちな業務案件でも説得の余地があるかなと。最悪ソースもってきてローカルサーバーを建てたらどうなの、とか。まぁ企業さんだと現場寄りの人を説得するだけでなく、そこから伝言ゲームで情シスとか上司とかに納得してしてもらう必要があるので難しいかもですが…

ともあれ非常に汎用性が高く、手軽で、遅延が少なく、安全な映像伝送手段としてNDIと並んで注目株ではないかなと思います。どこか機会があったら活用してみようと思います。

RTMP実験続き。HDMIキャプチャ+Android経由にて。

前回の屋外UTに向けた配信環境の検討実験。

Androidでも使えるHDMI-USBキャプチャアダプタBU110で、スマホ画面にビデオカメラからの映像を映し、それをZoomやTeamsの画面共有で送ったらいいかなと思ってセットアップしてみた。

AVerMedia UVCキャプチャーデバイス BU110 DV456

AVerMedia UVCキャプチャーデバイス BU110 DV456

29,880円(06/15 17:25時点)
Amazonの情報を掲載しています

そしたら以前に購入してあったUSB Camera Proというアプリが、(USB WebカメラやHDMIキャプチャの多くが対応する)UVC入力映像を表示するだけでなくRTMP始め多くのプロトコルで配信できることを発見。前記事で構築したOBS Studio + NGINXの受信環境に対して送信テストしてみました。

USB Camera Proの特長として、

  • ハードウェアエンコーダによるH.264またはHEVC(H.265)エンコード対応
  • 自動または固定ビットレート、キーフレームの挿入秒数を指定可能
  • 解像度とそれに応じたフレームレートも指定可能。
  • 音声はステレオ48kHz固定(多分)
  • 複数のRTMPサーバー設定を記憶し、送信時にリストから選択可能
  • UVCカメラ検出時に自動起動
  • 起動時に自動RTMP送信開始
  • その他、録画や動体検知なども可能

という感じ。600円にしてはなかなか多機能です。UIは最低限でかなり使いづらいけどw。解像度とフレームレートは一定の関係があるらしく、例えば1280×720の場合、50~60fpsしか指定できず、30fpsや15fpsに落としてレートを稼ぐということはできないぽい。

WiFiで試した感じは先のビデオカメラ(NX80)内蔵のエンコーダーよりもかなりマシで1秒遅延くらい。音もきちんと届きます。

WAN経由は使ったAndroid端末のGalaxy Note 10+に入っている楽天モバイルMNOのSIMだとなぜかエラーになってつながらず。仕方ないのでまたしてもdocomo契約のiPhoneにテザリングさせたらすんなりOK。さすがにWAN経由だと遅延や画質が酷くなるかと思いきや、調子がいい時はWiFiとかわらない1秒遅延で収まることも。ただしその幅自体が不安定で、45秒くらいになったり音が途切れたり。途中で設定変えるとおかしくなりがちで、OBS再起動したり、「メディアソース」のプロパティ画面を一度開いてOKすると治ったり。ちょっと実務で使うのは不安が大きいかなー。

H.264と265ではビットレート1/2で同等の画質といわれるくらいデータ効率が良くなってるはずですが、ここもあまり差は感じず。ハードウェア支援が入ってる端末なら負荷もそんなに変わらないのかな?長時間送信し続けた時のバッテリーの減り方などまでは検証できておらず。

バッテリーの減りはやはり激しいです。問題なのは唯一のUSBポートがキャプチャアダプタで塞がるので充電しながら使えないという点。一応USB PD給電対応のハブで使えはしました。ただ充電しながらで発熱などはどうなるかは未知数。

■Teamsで画面共有してみる

とりあえずスマホ画面にカメラのスルー画を映すこと自体はできたので、今度はこれをTeamsの画面共有で送信してみました。結果としてはさすがにオンライン会議ツールだけあって遅延はかなり少なく1秒あるかないか位で安定。画質が犠牲になってそうですが、RTMPよりは安定してる印象。Teamsは解像度をかなり動的に変化させますがさほど見づらさなどな感じず。圧倒的にこちらを使った方が良いです。Teamsならば個別のストリームをNDIで取り出せるのでOBSに入れるのも楽勝。

ただPCの様に画面共有時にシステム音声を送信する機能はないので、カメラからの音声をTeamsに流すことはできなそう。スマホ本体のマイク音声になってしまうかも。Wireless Go2のようなUSB外部マイクの音を入れるにはさらにUSBポートが必要になるし、どうかなーって感じです。なおUSB Camera Pro自体は音声モニター機能がありUVCから来た音声をスピーカーで鳴らすことはできます。

■まとめ

RTMPはやはり古い規格なせいか、遅延やビットレート辺りの画質の安定性ではしんどいなーという印象。Teamsが直接UVCカメラの映像や音声を共有してくれたらなーと思えてなりません。

 

RTMP送信できるビデオカメラ(NX80)からOBS Studioに入力してみる

今度、屋外でユーザーテストをする予定があって、映像をどう撮って見学者に配信するか検討をしています。屋外である製品を試用している参加者の様子を、見学者部屋またはリモートにリアルタイム中継したいという感じ。スマホで撮ってZoomとかTeamsに流せば簡単なんですが、やはり参加者が持つスマホの手元をアップで撮りたかったり、バッテリー含め連続稼働時間の問題や通信途絶時にも映像は録画しづづけたいも。やはりビデオカメラ自体でも録画をしつつ送信をしたい。HDMI出力映像ネット送信できてバッテリーでも稼働するものといえば、パッと思いつくのはLiveShellシリーズとXperia Proでしょうか。

LiveShell ProはATEM MINIと入替で手放してしまったし、Xperia Proは高い上にHDMI入力を使えるアプリは限られていてバクチ要素も高い(例えばZoomは現状ダメっぽい?)。

もうちょっと手持ち機材でなんとかできないかなと思いついたのがHXR-NX80がもっているRTMP/RTMPSの送信機能です。以前にちょっと試して上手くいかなくて諦めたんですが、再挑戦してみることに。OBS Studioのソースの1つとして入れられれば他の映像とミックスして記録ができます。

■RTMP/RTMPSとは?

RTMPはNDIやWebRTCなどよりも昔から(FLASH時代?)からある映像伝送のプロトコルです。RTMPSはSSLで暗号化するバリエーション(以下まとめてRTMPと記述します)。今でもYoutube LiveやTwitchなどのライブストリーミングサービスへの送信に使われてたりします。USTREAM華やかなりし頃のビデオカメラは単体でWi-FiにつながりRTMP/RTMPS送信する機能がついていました。ただUSTREAMが終わってしまった現在、あくまでUSTREAMを想定した設計になっていた製品と、カスタムサーバーを手入力して使えるものとで命運が分かれ、Panasonicなどは「ライブ配信機能自体の終了」のお知らせを出してたりします。そこはちょちょっとファーム修正してカスタムサーバーに対応して欲しかったものです。

とりあえず手持ち機材ではSONYの業務用カメラであるHXR-NX80がカスタムサーバー(URLとストリームキー)指定による送信に対応しているので、まずはこれでテスト。受け側であるOBS Studioは「メディアソース」ソースで「ローカルファイル」のチェックを外すとURLが入力できるフィールドが出現し、そこから設定できる_はずでした_。

■RTMPにはpushとpullがある!

さて早速NX80からOBSに映像を流してみようとするも、ちょっと様子がおかしい。

こちらはNX80のRTMP接続先の設定画面。URL欄とストリームキー(暗号キー)欄があります。

そしてこちらはOBSの「メディアソース」ソースのプロパティ画面。

どちらにもURLを指定する欄があります。一方OBS側にストリームキーを指定する欄はありません。ストリームキーはURLの最後につければ良いみたいとわかりましたが、それぞれが相手のURLを指定するってあんまり見ない設定方法です。OBS側は受け口をパスとストリームキーをまとめてURLの形で指定するのかなと思い、自身のIPアドレスをベースに適当に作って見てもダメ。

おかしいと思ってググってみるも、OBSからRTMPサーバーに配信する時の記事ばかりでなかなかOBSでソースとしてRTMPを受けることに関する情報が見つけられません。NX80側もYoutube Live向けの簡単な例があるだけ。

それでも調べているうちにわかったこととして、RTMPにはpushとpullに2種類の指定方法があって、文字通りpushは映像出力側(エンコーダー)から受け側のURLを指定して送りつけるもの、pullは映像受信側(デコーダー)が送り側のURLを指定するものです。そしてNX80はpushのみに対応し、pullの受け役はできない。OBSはpullのみに対応し、pushの受け役にはなれない。つまりどちらもクライアントとしてサーバーに要求する側であって、サーバーとして待ち受けすることができないという訳です。NX80は送る側、OBSは受ける側でマッチしているにも関わらず、どちらも自分が言い出しっぺになれなければ気が済まず、「聞く耳」は持たない、という感じでしょうか。

■仲介者としてRTMPサーバーを用意する

ということで、聞く耳持たないクライアント両方からの声を聞き互いを仲介する者としてRTMPサーバーが別途必要だということがわかりました。これの仕事はあくまで取り持ちだけなのでそんなに処理性能は求められないらしく、Apacheのライバル的なWebサーバーソフトであるNGINX(エンジンエックスと読みます)にRTMPエクステンションを組み込めば実現でき(両方とも無料で使える)、Raspberry Piなどでも充分実用になるようです。Raspberri PiでRTMPを受けてオンボードのHDMI出力から出力するというBlackmagic designのStreaming Bridgeみたいなこともできてしまうぽい(遅延は大きそうなものの、これはいずれチャレンジしたい)。

とりあえず今回は本当につながるかテストする為、OBSを動かしているWindows PC上にDockerで仮想サーバーを建てて実験してみました。

参考にしたのは以下の動画。

ただしLinuxでコマンドラインでの説明だったのを、WindowsのDocker Desktop(GUI)向けに適宜読み替えて進めました。Docker Desktop自体、初めてでよくわからず、なんでもできそうで以外とコマンドラインに頼る感じ?少なくとも最初にDockerイメージをもってくるところはシェルからやる必要がありました。ポイントは、動画の1:15くらいにあるように

としてやることです。-p 1935:1935がポイントで、ホストPCのポート1935と仮想PCのポート1935 を紐付ける(ポートフォワード)してやるわけです。これをしないでダウンロードサイトの例文で導入してしまうと通信ができない状態になります。コレでハマりました。きっと後からでも変更できるんでしょうけど、Docker Desktopからは見つけられませんでした。GUIでやろうとする場合はお気を付けください。

設定が完了するとこんな感じになりました。右上の5つのボタンの真ん中で起動した状態です。

「Ports」欄の上段がIPv4、下段がIPv6のポートです。IPv4が「0.0.0.0:1935」となっていますが、これで「(ホストPCのIPアドレス):1935」で通信が届きます。

5つボタンの左から2番目を押すとシェル(コマンドプロンプト)が出現するので、あとはまた動画に従い、nano(テキストエディタ)をインストールし、/etc/nginx/nginx.confを書き換えます。

完成形はこんな感じ。 これで、エンコーダー(今回はNX80)からは

を指定し(ストリーム名は空欄)とし、OBS Studioの「入力」欄は

とします(Dockerを動かしているホストPCのIPアドレスが192.168.0.153と仮定)。

NX80ではRTMP設定画面で「実行」し、カメラ映像画面に戻ったあと更に「THUMBNAIL」ボタンを押さないと配信が開始されないので注意。もちろんNX80上で同時に録画もできます。

■LAN内でも遅延が2秒程度、WAN経由で45秒!

ついにこれでNX80のリアルタイム映像をOBSソースとして入れることができました。NX80の内蔵Wi-Fi(2.4GHz)経由で自宅内LANでのやりとりですが遅延が2秒くらいあります。配信解像度が「640×360」と「1280×720」から選べますが、どちらも遅延は変わらない印象。DockerとはいえホストPCの能力はそれなりにあると思うので、NX80のエンコーダーによる遅延でしょうか。あるいはRTMPというプロトコル自体がそういう傾向なのかも知れません。

他のカメラやマイクとあわせることを思うと2秒という遅延はかなり厳しいですね。これがWAN経由だとどうでしょう?iPhone 12 Pro Maxにテザリングして、docomoの4G回線でテストしてみました(自宅側はdocomo光 PPPoE)。結果は45秒程度の遅延がありました。更に厳しいですね。

ちなみにOSB側の「メディアソース」プロパティで「可能場合ハードウェアデコードを使用」オプションはONにしてしまうと絵と音がズレてダメでした。なんでもハード支援を使えばいいってもんでもないですね。絵だけGPU処理になって同期が外れてしまうんでしょうか。音ズレが発生している場合は確認してみてください。

個人的メモ:RTX1210側の設定として、NATのポート開放、フィルタリングでポート1935のTCPおよびUDP通信をホストPCに向け、フィルター型ルート設定でIP+1935を送信元と宛先それぞれのフィルターを追加してやる必要がありました。

 

現地では中継拠点(受け)とカメラ側双方がモバイルルーター+LTE回線環境になることを考えるとさらに酷いかも知れません。また受け側はグローバルIPアドレスが必要になる点も注意が必要でしょう。ゲストWi-Fiなどが提供されていたとしても使えません。

そう思うとちょっと現実的には使いづらい方法な気がしてきました。

やはりTeamsを経由して受け側でNDIで取り出してOBSに持ってく方が素直かも知れません。

■まとめ

とりあえず定期的に興味がわきつつもなかなか成功しなかったRTMPが実際に動かせてみられて有意義な実験となりました。今後他のファクターも加味して活用の場を見定めていきたいと思います。

ユーザテストで活用するOBS Studio 日本語ガイドを公開しました

とあるお客さん向けにOBS Studioのハンズオン勉強会を実施することになり、その時の資料をもったいないので公開しました。

今後もちょいちょい手入れするかもしれないのでGithubに置いておきます。ユーザーテストでOBSを使ってみたいという方の参考になれば幸いです。

2021年、配信時代のUTビデオカメラの期待の星を予約しました SONY ZV-E10

以前、「UTに向きそうなビデオカメラ2020」と題して、UT撮影用カメラの要求仕様を解説しつつ、PanasonicのVX992Mというモデルを買ったという記事を書きました。

2019年のモデルですが、いまだ現役モデルで先日もばっちり活躍してくれました。

ちなみに、その前には2015年にもUT視点の要求仕様をまとめつつ、SONYのCX670を購入した記事を出しました。

これもまだウチでは現役。6年も経ってますがあれから1世代しかモデルチェンジしてなくてCX680がフルHDランナップでは現役スタンダードモデルというからビデオカメラ業界の衰退ぶりはドン引きするレベルです。

(しかしメーカー長期欠品中でAmazonではプレ値がついてるっぽいのでご注意ください)

その他、ブログ書くのすっかり書き忘れていたようですが、SONYの業務用ビデオカメラHXR-NX80というのも導入してみました。

かなり清水ダイビングなお値段でしたが、さすが業務用だけあってきめ細かな設定ができるし安定感あります。SDカードが2スロットあって録り逃しを不正でくれるところなんかもまさに業務用という感じ。XLRマイクがつなげられたり、HDMI出力端子がミニやマイクロではないフルサイズのコネクタなところなんかも良いです。

そんなビデオカメラ事情ですが、コロナ禍におけるUTの実施スタイルも大きく変わることとなり、要求仕様も段々変化してきているように思います。前回2020年1月のまとめから1年半。改めて最新のオススメスペックをまとめつつ、個人的に新しく予約したカメラの紹介をしたいと思います。

■UT配信時代に求められるビデオカメラの仕様とは?

ウィズコロナUTの大きな違いは密室に見学者が集まることを避けリモート見学になったことと、感染防止対策(マスク、アクリルシールド、ソーシャルディスタンス、換気、etc.)による音声収録の重要性が増したことじゃないかと思います。スマホアプリ等のフルリモートでUTが実現できる案件やインタビュー調査の場合はともかく、やはりハードウェアを伴うUT案件だと会場調査が必要で、感染拡大状況と綱引きしつつどうにか実施している現場も多いのではないでしょうか。その際に少しでも人が集まる機会を避ける為、見学者はネットワーク中継された映像を見る形式が増えています。本記事ではこの形態をセミリモートUTを呼んでおくことにします。参加者とモデレーターは会場に集まるものの、その様子はリアルタイムでZoomやTeamsなどのオンラインミーティングツールを使って中継し、見学者はそれを見ながらチャットで議論したりモデレーターに追加質問を投げたりといったスタイルです。

こうした配信に適したビデオカメラのスペックという観点が2021年のカメラ選びには必要な気がしています。配信の場合、ビデオカメラ単体で本体に直接録画できる映像はあまり重要ではなくて、OBS Studioのようなツールに映像ソースの1つとして入れるキャプチャ前提の映像出力デバイスという位置づけになります。UTでは大抵複数の映像ソース(手元、表情など)を扱い、それをOBS上で合成して録画したり配信したりという形になります。極端なことを言うと録画機能を持たないWebカメラを使う手もありますが、それだと

  • 光学ズームがないので設置範囲に制限がつく(邪魔になるような近くに置くなど)
  • USBケーブルが直付けで長さが適切に調整できない(延長ケーブルは不安定化の原因になりがち)
  • 露出やホワイトバランス調整ができないと画面を映した時に白トビしたりおかしな色味になる

などの限界もあり、個人的にはやはりビデオカメラを使いたいなと思います(一部のWebカメラの中にはこれらに対応できるものもあります)。表情カメラなどあまり画質や厳密なフォーカス調整を要しない部分にWebカメラを組み合わせるのはアリでしょうし、要は適材適所だと思います。

で、配信前提のUT用ビデオカメラとして私が重視したいポイントは、

  1. HDMI出力がクリーンである
  2. 本体で録画してなくてもデモモードや省電力モードにならない
  3. 各種マニュアル調整ができる(露出、ホワイトバランス、フォーカス)
    • それを電源切っても記憶してくれるか、設定セットとして保存できる
  4. 外部給電で安定して動く
  5. HDMI端子がフルサイズだとなお良し

辺りかなと思います。

・HDMI出力がクリーンである

正式な機能名ではないのですが、HDMI出力時に、本体液晶画面に出るようなOSD(操作UI)を含まない純粋な映像を取り出せるかどうかです。当然ながらOBS側で受け取る映像に録画インジゲーターや残量表示、操作ボタンなどがあっても邪魔なだけです。しかしこれ、地味すぎてカタログページの仕様表とかみても載っていないし、共通した機能名すらないので調べたり店員さんに聞いたりしてもわからないことが多いです。一般にある程度より上のグレードや業務用はOK。また最近めの機種では大丈夫なことが多い気がしますが、断言は難しいです。ネット掲示板などで既にもってる人に聞いてみるなどするしかない気がします。新製品を予約で買う時はこれが一番不安です。

・本体で録画してなくてもデモモードや省電力モードにならない

配信形態ですと、カメラのHDMI出力を使うだけで本体に録画する必要はありません。まぁ録っておけばOBSがコケた時にバックアップになるというのもありますが、どちらかというと、録画開始するのを忘れて本番中に電源が切れたり店頭デモモードに切り替わったりする方が問題かなと思います。また基本カメラ側をあまり見ないので録画可能残量を見落としがちで、これまた本番中意図しないタイミングでトラブルになったり。

バックアップ録画してもしなくても電源が落ちない、というのが理想かなと。割と最近の機種ならHDMI出力中は落ちないものが増えた気がします。2015年に買ったSONYのCX670は落ちたりデモモードに入ったりしがち。

・各種マニュアル調整ができる(露出、ホワイトバランス、フォーカス)

これはあまり配信かどうかと関係ないですが、UTでは自発光デバイスである液晶画面をアップにして撮ったりします。こういう時、通常のオート撮影だと問題が起きがち。部屋の明るさ基準で画面部分が白く飛んでしまったり、ホワイトバランスが極端に青白い方に寄ったり。またオートフォーカスも大抵まともに機能しないです。したとしても、参加者の手がかぶった時にいちいち手にピントが映ったりするとフラストレーションです。これらは全てマニュアルで固定しておける方が安定した映像になります。

・それを電源切っても記憶してくれるか、設定セットとして保存できる

UTは1時間セッションをして30分休憩、といったことの繰り返しです。あるいはお昼休みだったり空のセッションスロットなどもまたぐし、なんなら日を超えて連日実査ということも少なくありません。その時はさすがに一旦電源を落としたくなります。この場合に上記の設定が毎回リセットされてしまうと再調整が面倒くさいしトラブルの元になります。電源を入れ直しても設定を復帰してくれたり、いっそユーザプリセットのような機能で丸っと状態を保存し、いつでも呼びだせる機能があると重宝します。セッテイングの日にいた詳しい人が実査当日にいない、なんて場合でも、設定呼び出し手順さえわかっていれば簡単にその日の担当者が設定を復元することができます。

これはそもそもマニュアル操作があるカメラとセットなことが多いですが、やはりある程度上の機種になる気がします。デジタル一眼カメラなら割とありますが、ビデオカメラだと家庭用はそうないかも知れません。

・外部給電で安定して動く

これも配信するかどうかあまり関係ないですが、ビデオカメラならほぼ問題ないと思います。後述のデジタル一眼カメラの場合、仕様としての連続撮影時間がそう長くなかったり、本体の温度が上がりすぎると暴走を防ぐために強制的に録画を停止してしまうものもあります。

またリチウムイオンバッテリーは常時フル充電だと劣化が早く進行します。ほぼ室内、外部電源ありでしか使わないUT用カメラの場合、バッテリーは抜いてACアダプタのみで稼働できた方が、バッテリーの無駄な劣化も防げるし、本体の発熱源を減らせるメリットもあります。これまたカタログではなかなか判断できない要素です。

・HDMI端子がフルサイズだとなお良し

これは一部の業務用モデル以外は望むべくもないという感じですが、本体についているHDMI出力端子がmini HDMIやmicro HDMIといった特殊サイズでない方が、ケーブルを選ばずに使えて便利です。mini/micro HDMIケーブルだとどうしても選択肢が限られますし、変換アダプタはトラブルの元です。特にmicro HDMIのような小さな端子に変換アダプタ+HDMIケーブルのプラグという荷重が長時間かかることは破損の可能性が高まりまます。三脚のように高い位置につけたカメラだとケーブルの床面までの重さも上乗せされてしまいます。ケーブルを上手く固定してコネクタへの負担が軽減されるよう配慮しましょう。

■ミラーレス一眼カメラがいいかも?

そもそも最近ビデオカメラというカテゴリが衰退期になっており、各メーカーとも新製品をほとんど出していません。Canonに至っては家庭用ビデオカメラからは撤退しています。「スマホでいいじゃん」層と「デジタル一眼カメラで高品質な”作品”を録りたい」層の二極化のあおりでしょうか。コンデジ同様元気がないジャンルです。最新のセンサー技術や画像処理技術もスマホかデジタル一眼カメラに投入され毎年のように新型モデルが登場している一方、いわゆるビデオカメラの方は数年単位で更新が滞ってる”冬の時代”となっています。2019年のVX992M以降、これといって興味を惹かれる機種も出てないですね。この機種は上記要件、microHDMI端子であること以外はほぼ満たしているので、現状オススメしやすい機種ではあります。

そんな折、先日実務でカメラを3,4台使う必要があって、プライベートで猫撮りメインで買ったミラーレス一眼カメラのSONY α6600を投入してみたんですが、なかなか良かった。HDMIクリーンだし、マニュアル設定は微妙な色味も含めてかなり細かく調整効くし、それをユーザプリセットで保存できる。レンズを交換すれば適正な画角と明るさが得られる。ビデオカメラよりセンサーサイズが大きいので室内でもノイズを抑えた映像になるなど。ちょっと割高だけどHX80みたいなガチ業務機よりは(レンズを合わせても)安いし、別売りアクセサリでXLRマイクも付くし、もうちょいだけ安いヤツをCX670とのリプレイスでほしいなーなんて思い始めました。

■UTに最適かも知れないミラーレス機が出た!

そんあタイミングで噂だけ聞こえていた動画志向のミラーレス機が出ました!SONYのZV-E10というモデルです。

ZV-1というVlog向けのコンパクト機があったんですが、それをセンサーサイズをAPS-Cにしてレンズ交換可能にした感じの上位モデルという位置づけです。

ガチのVlogerには手振れ補正が弱いとかクロップが大きい(手振れ補正や4K/30Pにすると実効画角が狭くなり望遠寄りになってしまう)とかお値段なりの残念仕様が指摘されていますが、UTで三脚に載せて撮るにはさして弱点ともなりません。むしろメリットとして、

  • バッテリー抜いて外部電源アダプタが使える
  • Youtuberに神マイクと崇めらているデジタルガンマイクECM-B1Mや、BluetoothマイクECM-W2BTがデジタル接続で使える
  • Webカメラモードに音声が付き、専用ソフトが不要になった(UVCモード)
  • リアルタイム瞳AFや「商品レビュー用設定」など定評のあるAF性能
  • キットレンズ付きで8万とビデオカメラ+αくらいの実売価格

といった点が挙げられます。

  • バッテリー抜いて外部電源アダプタが使える

本機はSONY初(?)のUSB Type-Cポート搭載機で、Power Delivery対応かどうかは不明ですが、より安定した給電ができそうです。バッテリーを抜いてUSB給電動作できるかは不明ですが、少なくとも下記の給電アダプタが使えるようです。

ソニー ACアダプター AC-PW20

ソニー ACアダプター AC-PW20

10,200円(06/15 21:50時点)
Amazonの情報を掲載しています

ダミーバッテリー形状のコネクタをバッテリーの代わりに差し込みタイプです。以前からあるアクセサリですが、うちのα6600はバッテリー形状が異なり使えませんでした。ちょっと高いですが、これが使えるのであればバッテリー無し、常時AC駆動ができるとみて間違いありません。バッテリーも劣化しないし、充電の熱で動作が不安定になることもなく安心して長時間運用できそうです。

  • Youtuberに神マイクと崇めらているデジタルガンマイクECM-B1Mや、BluetoothマイクECM-W2BTがデジタル接続で使える

SONYカメラの大きなアドバンテージはマルチインターフェースシューだと思います。通常ストロボをつけるところですが、SONYはここに通信端子を搭載し、マイクを接続できるようにしています。少し前の高級機からデジタル通信でより高音質な収録ができるようになったんですが、私のα6600含めAPS-Cモデルは対応しておらず、いわゆる神マイクと言われるECM-B1Mもアナログモードでの使用に限定されていました。これが初めてAPS-C機でデジタル対応となりました。言っても直結ですしUTなど業務用途に影響するレベルの違いではないかもですが、個人的にはB1Mの本来の性能が引き出せる点は楽しみです、

ソニー ショットガンマイクロフォン ECM-B1M ILCE-1対応

ソニー ショットガンマイクロフォン ECM-B1M ILCE-1対応

42,600円(06/15 21:50時点)
Amazonの情報を掲載しています

またBluetoothマイクも新型ECM-W2BTが登場しています。ECM-W1Mから送信機の使用時間が3->9時間となり充電式になったのが大きな違いですが、こちらもデジタル接続できます。

  • Webカメラモードに音声が付き、専用ソフトが不要になった(UVCモード)

従来の一部機種ではテレワークブームにImaging Edge Webcamというツールを介してUSBカメラ化できるようになりました。しかし、後付けの機能なので解像度がイマイチだったり音声はとれなかったり、そもそもカメラを認識しなかったりと無理矢理感が否めない仕様でした。

本機ではソフトウェア不要でネイティブにUVC規格の外付けカメラとして振る舞うことができるようになっており、OBS StudioなどへHDMIキャプチャアダプタ無しに映像、そして音声も入力できます。解像度はカタログみてもわかりませんでしたがZV-1で1280×720に上がっていたようなので、それより下がることはないんじゃないかと思っています。できればフルHDくらいいけるといいなと。

  • リアルタイム瞳AFや「商品レビュー用設定」など定評のあるAF性能

SONYのデジカメはAF(オートフォーカス)が速度、精度ともに優秀です。人物を録る際には瞳AFで正確に人物の顔にフォーカスが合います(残念ながら動物は動画時には対応しないんですが…)。表情用カメラなどにするのに有用でしょう。

一方瞳を認識する故にその状態でなにかをかざして見せるような動作をした時にそちらにピントが合わない(顔にあわせたまま)という問題がありましたが、ZV-1およびZV-E10では「商品レビュー用設定」が追加されています。Youtuberがよくやる手のひらを後ろにかざして瞳を隠すようにする動作が不要になるわけですね。UTで使う機会があるかという微妙ですがインタビューとかに共用するならアリかも知れません。

いずれにせよそこらのビデオカメラよりはAFは優秀と考えて良いでしょう。

  • キットレンズ付きで8万とビデオカメラ+αくらいの実売価格

オススメのビデオカメラVX992Mが現在6万円台後半くらい。ZV-E10のキットレンズ付きが8万ちょうど位。キットレンズの仕様がUTに最適かどうかはなんともですが、とりあえずそんなに大きな違いでもない気がしています。OBS Studio用と考えるとビデオカメラだと別途HDMIキャプチャアダプタを買わねばなりません。千数百円の激安品は遅延など品質面で問題があるのでやはり1万円くらいの出費にはなるでしょう。そう思えば更に差は縮まります。まぁZV-E10のWebカメラモードの解像度が720pだとしてそれで足りるかってのもありますが。

私はとりあえずCX670をこれにリプレイスしていくつもりで予約してみました。発売は9月中旬なのでまだ結構先なのですが、手に入ったらまたレビューしていきたいと思います。

[オマケ] レンズ周りのスペックを比較

ビデオカメラとデジタルカメラではレンズ性能の表記が違っていて直接比較が難しいのですが、カタログでわかる範囲でキットレンズのE PZ 16-50mm F3.5-5.6 OSS(型番SELP1650)の仕様をVX992Mと比べて見ます。

SELP1650の画角(ズーム範囲)は文字通り16-50mm。APS-C基準なので、いわゆるフルサイズ(35mm換算)というのにすると24-75mmになります。VX992Mは広角端が30.8mm(4K撮影時)ということなので、24mm vs 約31mmでZV-E10+SELP1650の方がちょっぴり広角スタートになります。一方そこからの光学ズームはVX992Mが20倍なので桁違いに望遠ということになります(16-50は3倍強)。ここはやはりセンサーがマメ粒みたいに小さく、形状が前後に長いビデオカメラの方が倍率を伸ばしやすいということですね。APS-Cで20倍を目指したらメチャメチャデカいレンズになりますし、お値段も本体の何倍にもなります。5倍とか7倍でも本体くらいの価格になります。おそらくUTのような室内撮りで20倍が必要になることはまずないですが、5倍くらい、画角でいえば100mmくらいあるとカメラ設置位置に自由度が出てよいかなと思います。先日は18-105mmレンズでiPadのディスプレイの2m後方くらいから撮って、目一杯まではズームしなかった感じでした。それくらいはあるといいかもですね。

ただそれでも結構デカくなってくるので、参加者の正面から撮るにはちょっと存在感ありすぎかもです。使い分けですね。

あとは50mmでも4Kでキャプチャして必要な画角で切り出して使うのもアリかなと思います。