WebRTCを使えば、ブラウザ上でユーザーが音声や映像のソースを選択できるようにするのは簡単です。しかし、すべてのウェブベースのビデオアプリが、Webカメラの映像ソースを変更するためのコントロールを実装しているわけではありません。
一部のブラウザでは、これは問題になりません。たとえばFirefoxとEdgeはどちらも、サイトごとに映像ソースを選択できます。一方、Google Chromeでは特別なchrome://settings/content/cameraというURLを使ってデフォルトのWebカメラを選択できますが、このデフォルトカメラの設定はWebRTCでは使用されません。Google Chromeのフォーラムでは、この点について不満の声が多く寄せられていますが、解決策が示される見通しは今のところありません。
そのため、映像ソースの選択機能を実装していないアプリ(vMixなど)を使い、かつサイトごとの映像ソース選択に対応していないブラウザ(Chromeなど)を使っている場合、ユーザーはどうにもできない状況に陥ってしまいます。映像カメラを選択できないビデオアプリは、結果として任意のカメラを選んでしまうため、ユーザーは使いたいカメラを使えないことがあります。
幸い、Chrome上のウェブベースのビデオアプリに特定のカメラを強制的に選択させる、手早く使える裏技があります。
vMixのvmixcall.comサービスでの手順は次のとおりです。
- Chromeを起動し、ビデオチャットのセッションを開始します。
⌥ Option+⌘ Cmd+iのキーボードショートカット、またはMore Tools→Developer Toolsメニューから、Chromeの「デベロッパーツール」を開きます。- デフォルトの「Console」タブに以下のコードを貼り付け、Enterキーを押します。
function gotDevices(deviceInfos) {
// Look for the Reincubate Camo video input device.
var deviceId;
for (deviceInfo of deviceInfos) {
if (deviceInfo.kind === 'videoinput' && deviceInfo.label === 'Reincubate Camo') {
deviceId = deviceInfo.deviceId
break;
}
}
if (deviceId) {
const constraints = {
audio: true,
video: { deviceId: { exact: deviceId } }
};
navigator.mediaDevices.getUserMedia(constraints).then(gotStream);
} else {
console.error('Unable to find Reincubate Camo video input device.');
}
}
function gotStream (stream) {
// Tell the vMix Call session to switch to a different stream.
try {
session.gotLocalStream(stream);
} catch {
console.error('Unable to trigger vMix Call session stream update.');
}
}
// Ask the browser for a list of media devices.
navigator.mediaDevices.enumerateDevices().then(gotDevices)
これで、Chromeは自動的にCamoの映像ソースに切り替わるはずです。この回避策がうまくいかない場合は、コメント欄でお知らせいただくか、直接お問い合わせください。サポートいたします。
実際の様子は次のとおりです。
今後こうした手間を避けたい場合は、利用しているビデオサービスの提供元に、アプリへの映像ソース選択機能の追加を働きかけてみてください。
