前回の屋外UTに向けた配信環境の検討実験。
Androidでも使えるHDMI-USBキャプチャアダプタBU110で、スマホ画面にビデオカメラからの映像を映し、それをZoomやTeamsの画面共有で送ったらいいかなと思ってセットアップしてみた。
そしたら以前に購入してあった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カメラの映像や音声を共有してくれたらなーと思えてなりません。