ライブ・インタラクティブ・ビデオ放送

ライブ・インタラクティブ・ビデオ・ブロードキャストでは、セッション内で互いのストリームをパブリッシュし、サブスクライブすることで、多数のクライアントがライブで通信することができます。インタラクティブ・ビデオ・ブロードキャストのライブ・セッションは、セッション内のアクティブなパブリッシャー数に基づいて、セッションの総参加者数15,000人までサポートできます。

以下の表は、セッションのすべてのパブリッシャーにサブスクライブできる、ライブ双方向放送の参加者数の詳細です。インタラクティブ放送の参加者は、すべてのパブリッシュされたストリー ムの低レイテンシーの視聴専用サブスクライバーであり、ライブのインタラクティブ 放送の視聴者である。セッションのパブリッシャーは、ブロードキャストのホストと見なすことができ、 ホストとして、他の公開ストリームにサブスクライブすることもできる。セッションごとのパブリッシャーの数が増えると、すべての公開ストリームの同時視聴者の数も減ります。

たとえば、以下の表に基づくと、セッションに1つまたは2つの公開ストリームがある場合、最大15,000人の参加者が、ライブ放送の参加者として、これらの公開ストリームの両方をリアルタイム遅延で視聴できます。同様に、セッションに3つの公開ストリームがある場合、最大13,000人の参加者が、ライブ放送の参加者として、3つの公開ストリームすべてをリアルタイム遅延で視聴できます。

出版社数 同時ライブ・インタラクティブ
セッションごとの参加者
(参加者はすべての出版社を購読する)
1 15,000
2 15,000
3 13,000
4 11,000
5 8,000
6 6,800
7 5,700
8 5,000
9 4,300
10 4,000
12 3,400
15 2,900
16 2,800
20 2,000
25 1,600
50 800
55 700
  • 公開ストリームには、カメラストリームと画面共有ストリームの両方が含まれる。

セッションの参加者数が表の値より多い場合は、ライブストリーミング機能 ( ライブ・ストリーミング放送).

同様に、セッションは最大15,000クライアントの同時接続をサポートする。

アプリケーション開発者は、アプリケーションのプラットフォーム制限を管理する必要があります。次のセクションを参照してください。

ライブインタラクティブビデオブロードキャスト機能は、ルーティングされたセッション(Vonage Media Routerを使用するセッション)でのみ使用できます。詳細については メディア・ルーターとメディア・モード.

ライブ・インタラクティブ・ビデオ放送は、クライアントのリソース(帯域幅とCPU)が解像度をサポートしていれば、HDビデオ(低解像度のビデオも)をサポートします。

インタラクティブなライブビデオ放送をサポートするアプリの構築

セッションに接続する多数のクライアントをサポートするために使用すべきAPIの拡張がいくつかある。以下のセクションを参照のこと:

接続イベントの抑制

多数のクライアントがセッションに接続する場合、クライアントの接続イベントを無効にする ことが重要である。これらのイベントには、他のクライアントがセッションに接続したり切断したりするときにディスパッチされるものが含まれます。ほとんどのクライアントは、これらのイベントを処理する必要はなく、これらを 無効にすることで、これらの大量のイベントによって引き起こされる、(例えば、 オーディオ・ビデオストリームの公開やサブスクライブにおける)パフォーマンス上の ペナルティを、クライアントが被るのを防ぐことができる。

重要だ: このような大規模なアプリケーションに最適化するには、ここで説明する接続イベント抑制APIを必ず使用してください。

バージョン2.10.0以降では、各クライアントSDK(ウェブ、iOS、Android用)に、クライアントで接続イベントを無効にするためのAPI拡張が含まれています。

サポートされている他のバージョンのクライアント(2.9.0+)を大規模セッションで使用することはできますが、2.10.0+より古いバージョンのクライアントでは接続イベントは抑制されません。古いバージョンの OpenTok.js を使用しているクライアントは、大量の接続イベントによってパフォーマンスが低下する可能性があります。

OpenTok.jsで接続イベントを抑制する (web)

セッション・オブジェクトを初期化する際に connectionEventsSuppressed プロパティを trueで、そのオブジェクトを options パラメータを呼び出すときに OT.initSession() メソッドで接続します。次にセッションに接続する:

var props = {connectionEventsSuppressed: true};
var session = OT.initSession(APPLICATION_ID, SESSION_ID, props);
session.connect(token, function(error) {
  if (error) {
    console.log('Error connecting: ', error.code, error.message);
  } else {
    console.log('Connected to the session.');
  }
});

これは、Sessionオブジェクトが connectionCreated そして connectionDestroyed イベントは、他のクライアントがセッションに接続したり、セッションから切断したりするときに発生します。(また、VonageサーバはこれらのイベントをWebクライアントに送信しません)。

iOS SDKで接続イベントを抑制

OTSessionSettingsオブジェクトを初期化する際に、その connectionEventsSuppressed プロパティ YES.そのオブジェクトを settings パラメータを呼び出すときに [OTSession initWithApiKey:sessionId:delegate:settings:] メソッドを使ってOTSessionオブジェクトを初期化します:

OTSessionSettings *settings = [[OTSessionSettings alloc] init];
settings.connectionEventsSuppressed = YES;
OTSession *session = [[OTSession alloc] initWithApiKey:applicationId
                                        sessionId:sessionId
                                        delegate:self
                                        Settings:settings];

それからセッションに接続する:

OTError* error = nil;
[session connectWithToken:kToken error:&error];
if (error) {
  NSLog(@"connect failed with error: (%@)", error);
}

これによって [SessionDelegate session:connectionCreated:] メッセージは、他のクライアントがセッションに接続したりセッションから切断したりするときに送信されません。(また、VonageサーバーはこれらのイベントをiOSクライアントに送信しません)。

Android SDKによる接続イベントの抑制

セッションに接続するには、Session.Builderオブジェクトをインスタンス化し、App IDとセッションIDを渡す。次に connectionEventsSuppressed() メソッドに true.を呼び出す。 build() メソッドを呼び出してSessionオブジェクトを作成します。次に connect() メソッドを使ってセッションに接続します:

Session session = new Session.Builder(this, APPLICATION_ID, mySessionId)
                    .connectionEventsSuppressed(true)
                    .build();

session.connect(myToken);

を呼ばないでください。 Session.setConnectionListener(ConnectionListener listener) メソッド (Session オブジェクトの ConnectionListener を設定する) を呼び出しますが、このメソッドを呼び出しても何の効果もありません。接続イベントを抑制することで、他のクライアントがセッションに接続したり切断したりするときに ConnectionListener メソッドが呼び出されるのを防ぎます。(また、VonageサーバはこれらのイベントをAndroidクライアントに送信しません)。

Windows SDKによる接続イベントの抑制

セッションに接続するには、Session.Builder クラスを使用して Session オブジェクトをインスタンス化します。アプリIDとセッションIDを Session.Builder() コンストラクタで connectionEventsSuppressed パラメータを true.を呼び出す。 Connect() メソッドを使ってセッションに接続します:

Session = new Session.Builder(Context.Instance, APPLICATION_ID, SESSION_ID, true).Build();
// Set event handlers for the Session object. Then, connect:
Session.Connect(TOKEN);

Session.StreamReceivedまたはSession.StreamDroppedイベントハンドラを設定しないでください。接続イベントを抑制することで、他のクライアントがセッションに接続したりセッションから切断したりするときに、これらのイベントが発生しなくなります。(また、VonageサーバはこれらのイベントをWindowsクライアントに送信しません)。

Linux SDKによる接続イベントの抑制

セッションに接続するには otc_session_settings 構造体を呼び出し、App IDとVonageセッションIDを渡します。次に otc_session_settings_set_connection_events_suppressed() 関数の最初のパラメータとしてotc_session_settingsインスタンスを渡し OTC_TRUE セカンドとして、 suppressパラメータを指定する。次に otc_session_new_with_settings() 関数でotc_session構造体を作成します。次にセッションに接続する関数です:

otc_session_settings *session_settings = otc_session_settings_new();
otc_session_settings_set_connection_events_suppressed(session_settings, OTC_TRUE);

otc_session_callbacks session_callbacks = {0};
// Set the callback functions of the otc_session_callbacks instance.

otc_session *session = otc_session_new_with_settings(APPLICATION_ID, SESSION_ID,
                                                     &session_callbacks,
                                                     session_settings);
otc_session_connect(session, TOKEN);

を設定しないでください。 otc_session_callbacks.on_connection_created または otc_session_callbacks.on_connection_dropped コールバック関数を呼び出します。接続イベントを抑制することで、他のクライアントがセッションに接続したり切断したりするときに、これらのコールバック関数が呼び出されるのを防ぎます。(また、VonageサーバはこれらのイベントをLinuxクライアントに送信しません)。

接続およびストリームの上限を超えた場合の検出

クライアントSDKには、クライアントがセッションに接続しようとしたとき、またはストリームにサブスクライブしようとしたときに、セッションの接続制限(15,000)またはストリーム制限(15,000)を超えたことを示すエラーが含まれています。

接続やストリームの制限に達したために、クライアントがセッションに接続できなかったり、ストリームにサブスクライブできなかったりした場合は、クライアントに ライブ・ストリーミング放送 セッションを実装している場合)。

OpenTok.js(ウェブ)の接続とストリーム制限のエラー

セッションの接続制限(同時接続クライアント数15,000)に達したときにセッションへの接続を試みると、セッションの完了ハンドラである Session.connect() メソッドは error パラメータは name プロパティを 'OT_CONNECTION_LIMIT_EXCEEDED'.

セッションのストリーム制限を超えたときにストリームを購読しようとすると Session.subscribe() メソッドは error パラメータは name プロパティを 'OT_STREAM_LIMIT_EXCEEDED'.

Android SDKの接続エラーとストリーム制限エラー

セッションの接続制限(同時接続クライアント数15,000)に達したときにセッションに接続しようとすると Session.SessionListener.onError(session, error) メソッドは error パラメータにErrorオブジェクトをセットし、codeプロパティに SessionConnectionLimitExceeded.

セッションのストリーム制限に達したときにストリームを購読しようとすると Session.SubscriberListener.onError(subscriber, error) メソッドは error パラメータにErrorオブジェクトをセットし、codeプロパティに SubscriberStreamLimitExceeded.

ライブ双方向ビデオ放送のビデオ品質

大規模なセッションには、スケーラブル・ビデオ機能が有効です。この機能により、サブスクライブするエンドポイントは、ネットワークとCPUの状況に応じて異なるビデオ解像度とフレームレートを消費することができます。この機能は、Vonage iOS SDK(特定のデバイス)、Android SDK(特定のデバイス)、Windows SDK、およびChromeとSafariのOpenTok.jsで利用可能です。

iOS SDKの接続エラーとストリーム制限エラー

セッションの接続制限(同時接続クライアント数15,000)に達したときにセッションに接続しようとすると [SessionDelegate session:didFailWithError:] メッセージは error を持つ OTError オブジェクトに設定する。 code プロパティを OTSessionConnectionLimitExceeded.

セッションのストリーム制限に達したときにストリームを購読しようとすると [OTSubscriberKitDelegate subscriber:didFailWithError:] メッセージは error を持つ OTError オブジェクトに設定する。 code プロパティを OTSubscriberStreamLimitExceeded.

Windows SDKの接続エラーとストリーム制限エラー

セッションの接続制限(同時接続クライアント数15,000)に達したときにセッションに接続しようとすると Session オブジェクトは Error と共に送信される ErrorCode に設定する。 ErrorCode.SessionConnectionLimitExceeded.

セッションのストリーム制限に達したときにストリームをサブスクライブしようとすると、Subscriber オブジェクトは ErrorCode を持つ OTError オブジェクトに設定する。 code プロパティを ErrorCode.SubscriberStreamLimitExceeded.

Linux SDKの接続エラーとストリーム制限エラー

セッションの接続制限(同時接続クライアント数15,000)に達したときにセッションに接続しようとすると otc_session_callbacks.on_error() 関数は、エラーパラメーターに OTC_SESSION_CONNECTION_LIMIT_EXCEEDED.

セッションのストリーム制限に達したときにストリームを購読しようとすると otc_subscriber_callbacks.on_error() 関数は error パラメータを OTC_SUBSCRIBER_STREAM_LIMIT_EXCEEDED.

双方向ライブ放送の料金

ライブ・インタラクティブ・ビデオは、他のセッションで使用されているのと同じ分単位の価格設定を使用しています。詳しくは 価格.