この文書では、RICOH Live Streaming に搭載された「映像トラックの選択受信」機能のメリッ トと使い方を紹介しています。
「映像トラックの選択受信」は、あるクライアントからの映像が不要な場合に、サーバーに対してその映像の配信を停止/再開させることのできる機能です。 この機能を活用することには、以下のようなメリットがあります。
デ フォルトの設定で行われる web 会議では、各クライアントは RICOH Live Streaming のサーバーを経由して、相互に映像と音声の配信を行なっています。
下記の図 1 は、例として 3 人の参加者と THETA を利用した場合の映像トラックの流れを図示したものです。 それぞれのクライアントでは以下のように最大ビットレートが設定されていて、1 時間接続したと仮定します。
クライアント | 最大ビットレート指定 |
---|---|
THETA(送信専用) | 5Mbps (青矢印) |
モバイルクライアント | 2Mbps (オレンジの矢印) |
PC クライアント | 500Kbps (薄緑の矢印) |
また、送信専用 THETA とモバイルクライアントは、ポケット WiFi による接続でインターネットに繋がっているものとします。
図1 |
---|
左側の例の場合、全クライアントが、自分自身と THETA を除いた他の全てのクライアントへ映像を配信しているので、RICOH Live Streaming の利用で発生する映像トラックの通信量は以下の様に計算できます。
全通信量:
(5Mbps x 4 + 2Mbps x 3 + 500Kbps x 6 / 1024) x 3600秒 = 29Mbps x 3600秒 = 約12.7GiB
ポケット WiFiの通信量:
(2Mbps x 1 + 5Mbps x 2 + 500Kbps x 2 / 1024) x 3600秒 = 13Mbps x 3600秒 = 約5.7GiB
しかし、モバイルクライアントのユーザーは現場を目視できるので、THETA の映像を画面で確認する必要はありません。また、顔が見えているだけの拠点の映像は不要というケースも少なくありません。 そこで、モバイルクライアントは 直接話したい PC クライアントの映像1つだけを表示し、PC クライアントの片方は、本社で隣にいる PC クライアントの映像とモバイルクライアントの映像の受信を停止した例が右側の図になります。
この例の場合、RICOH Live Streaming で計上される映像トラックの通信量は以下のようになり、全通信量でおよそ 3 割、ポケット WiFi の通信量をおよそ 4 割ほど削減することができます。
全通信量:
(5Mbps x 3 + 2Mbps x 2 + 500Kbps x 4 / 1024) x 3600秒 = 21Mbps x 3600秒 = 約9.2GiB
ポケット WiFiの通信量:
(2Mbps x 1 + 5Mbps x 1 + 500Kbps x 1 / 1024) x 3600秒 = 7.5Mbps x 3600秒 = 約3.3GiB
上の式における 21Mbps という値は、Room 帯域幅として設定が必要な映像の送受信に必要な帯域幅に相当します。 映像に必要な帯域幅が 29Mbps から 21Mbps に減っているということは、その分、Room 帯域幅予約の値を減少させられるということでもあります(ただし、音声の通信量もあるため、実際の Room 帯域幅予約の値はこれらの値より少し大きい値が必要になります)。
web-sdk-sampleに則って解説します。
/*
* Copyright 2022 RICOH Company, Ltd. All rights reserved.
*/
'use strict';
import * as LSSDK from './libs/ricoh-ls-sdk.js';
import { Base } from './libs/base.js';
const $ = document.querySelector.bind(document);
let base = null;
let client = null;
let lsTracks = [];
let firstPeerID = '';
let firstPeerReq = 'required';
$('#start').addEventListener('click', async (e) => {
// clientとbaseを初期化します
if (!client) initClient();
// baseの初期化には、自クライアントのトラック情報が必要です
const stream = await navigator.mediaDevices.getUserMedia({
video: true,
audio: true,
});
lsTracks = stream.getTracks().map((mediaStreamTrack) => {
return new LSSDK.LSTrack(mediaStreamTrack, stream, {});
});
await base.start(lsTracks);
});
$('#stop').addEventListener('click', async (e) => {
base.stop();
client = null;
});
$('#dllog').addEventListener('click', (e) => {
base.dllog();
});
$('#togglereq').addEventListener('click', async (e) => {
if (firstPeerID === '') return;
// 受信停止と再開を反転させています
firstPeerReq = firstPeerReq === 'required' ? 'unrequired' : 'required';
// changeMediaRequirements関数に、クライアントの Connection IDとフラグを指定します
client.changeMediaRequirements(firstPeerID, firstPeerReq);
console.log(`set new requirement ${firstPeerReq}`);
});
function initClient() {
base = new Base();
client = base.client;
client.addEventListener('open', (e) => {
$('#togglereq').disabled = false;
firstPeerID = '';
// 初期状態は「受信する」であるため、"required"を指定しています
firstPeerReq = 'required';
});
client.addEventListener('close', (e) => {
$('#togglereq').disabled = true;
firstPeerID = '';
firstPeerReq = 'required';
});
client.on('addremoteconnection', ({ connection_id, meta }) => {
// addRemoteConnectionイベントで、自分以外のコネクションのIDが取得できます
// このイベントは接続が増えるたびに呼ばれて、新しく接続してきたコネクションのIDを都度取得できます
if (firstPeerID === '') firstPeerID = connection_id;
});
}
本文書では「映像トラックの選択受信」機能のメリットと利用法 について紹介しました。この機能を活用して、よりお得に RICOH Live Streaming を利用できるようになれば幸いです。 なお「映像トラックの選択受信」機能は、他の機能と組み合わせることでより細かい制御を行う事が可能です。そちらについては別途紹介する予定です。
この情報は役に立ちましたか?