ストリームの購読 — Windows

一旦 セッションに接続, セッション内のストリームを購読することができます。ストリームを購読すると、その動画のビューをアプリ内に表示させることができます。

このトピックには以下のセクションが含まれます:

セッション内のストリームの検出

Session オブジェクトは StreamReceived イベントは、他のクライアントによって公開されたストリームがセッションに作成されたときに発生します。(ストリームは、クライアントが 出版 ストリームをセッションに接続する場合、またはセッションに接続したときにストリームが存在する場合)。

@Override
session.StreamReceived += Session_StreamReceived;

private void Session_StreamReceived(object sender, Session.StreamEventArgs e)
{
    Console.WriteLine("Session stream received");
}

ストリームを購読すると、アプリ内にそのストリームを表示できます。次のセクションを参照してください。

ストリームの購読

ストリームをサブスクライブするには、まずサブスクライバー・オブジェクトをインスタンス化します。 Subscriber(context, stream, renderer) コンストラクタ。サブスクライバーの Windows アプリケーションコンテキスト、Stream オブジェクト、およびビデオレンダラーを引数として渡します。 OpenTok.IVideoRenderer インターフェースは、ビデオレンダラーを定義する。その OpenTok.VideoRenderer OpenTok Windows SDK に含まれるこのクラスは、Windows Presentation Framework コントロールにビデオをレンダリングします。VideoRenderer オブジェクトは、System.Windows.Controls.Control のサブクラスです。この要素をビュー階層に追加することができます。あるいは、 OpenTok.IVideoRenderer インターフェイスがある。

に電話する。 subscribe() メソッドを呼び出して、ストリームの購読を開始します:


VideoRenderer videoRenderer = new VideoRenderer();
// Add the video renderer to the application's view hierarchy.

Subscriber subscriber = new Subscriber(Context.Instance, stream, renderer);
subscriber.Error += Subscriber_Error;
session.subscribe(subscriber);

private void Session_Error(object sender, Subscriber.ErrorEventArgs e)
{
    Console.WriteLine("Subscriber error:" + e.ErrorCode);
}

サブスクライバオブジェクトは Error ストリームへのサブスクライブにエラーが発生した場合は、イベントをコールする。をチェックする。 ErrorCode プロパティに渡され、購読に失敗した理由の詳細を見ることができます。(その OpenTok.ErrorCode を定義する。 ErrorCode 値)

サブスクライバーオブジェクトは Connected イベントは、アプリがサブスクライバーのストリームを受信し始めるときに発生する。

注: OpenTok.Subscriber クラスは System.IDisposable インターフェースを実装しています。必ず Dispose() メソッドを使用して、オブジェクトが不要になったときにそのリソースを解放します(たとえば、Subscriber がビデオのストリーミングを停止したときや、アプリまたはウィンドウが閉じるときなど)。

を作成することができる。 カスタムオーディオドライバ すべての出版社と購読者が使用できる。

ストリームからの配信停止

購読しているストリームの再生を停止するには Session.Unsubscribe(subscriber) メソッドを使用する:

session.unsubscribe(subscriber);

サブスクライバは切断され、そのビューはそのスーパービューから削除されます。

自動再接続

クライアントが購読中のストリームとの接続を切断した場合(たとえば、いずれかのクライアント側のネットワーク接続が途絶えた場合など)、そのクライアントは自動的にストリームへの再接続を試みます。ストリームとの接続が切断され、クライアントが再接続を試みると、Session オブジェクトは StreamDisconnected イベント。接続が復旧すると、Subscriber オブジェクトは StreamReconnected イベントを送信します。クライアントがストリームを復元できない場合、セッションオブジェクトは StreamDropped イベントを開催する。

これらのイベントに応答して、アプリケーションは、一時的な切断、再接続、および破壊された状態を示すユーザーインターフェイス通知を(オプションで)表示できる:

session.StreamDropped += Session_StreamDropped;

subscriber.StreamDisconnected += Subscriber_StreamDisconnected;
subscriber.StreamReconnected += Subscriber_StreamReconnected;

public void Subscriber_StreamDisconnected(object sender)
{
  // Display a user interface notification.
}

public void Subscriber_StreamReconnected(object sender)
{
  // Display a user interface notification.
}

public void Session_StreamDropped(object sender, EventArgs e)
{
  // Display a user interface notification.
}

ストリームがセッションから離れるタイミングの検出

他のクライアントによって公開されたストリームがセッションから離脱すると、Session オブジェクトは StreamDropped イベントを開催する:

session.StreamDropped += Session_StreamDropped;

public void Session_StreamDropped(object sender, EventArgs e)
{
  // Stream dropped
}

これに渡されるイベント引数オブジェクトは、OpenTok.Session.StreamEventArgs クラスで定義されます。このクラスには Stream プロパティを使用します。比較する Stream オブジェクトを Stream プロパティを使用して、ストリームのサブスクライバを識別します。

加入者のビデオが無効になっていることを検知する

OpenTok Media Router は、接続状態の悪化を検知すると、加入者への動画の送信を停止します。音声ストリームがある場合は、加入者は引き続きその音声ストリームを受信し続けます。OpenTok Media Router が動画の送信を停止すると、Subscriber オブジェクトは VideoDisabled イベントを開催する:

subscriber.VideoDisabled += Subscriber_VideoDisabled;

public void Subscriber_VideoDisabled(object sender)
{
  // Display a user interface notification.
}

OpenTok Media Router が加入者の映像を無効にした場合、その加入者に関連するユーザーインターフェースを調整する必要がある場合があります。

サブスクライバーオブジェクトは VideoDisabled イベントを発生させる:

subscriber.VideoEnabled += Subscriber_VideoEnabled;

public void Subscriber_VideoEnabled(object sender)
{
  // Video resumes for the subscriber.
}

ストリームに関する情報の取得

Streamオブジェクトには、ストリームを定義する以下のプロパティがあります:

  • Connection- Connection)ストリームを公開している接続に対応するConnectionオブジェクト。これを Connection プロパティを使用して、ストリームがクライアントによって公開されているかどうかを確認します。
  • CreationTime- DateTime) ス ト リ ームの作成時刻の DateTime タ イ ムス タ ンプ。
  • HasAudio- (bool) ストリームに音声があるかどうか。
  • HasVideo- (bool) ストリームがビデオを持っているかどうか。
  • Name- 文字列)ストリームの名前。これはストリームのパブリッシャを初期化する際に設定されます ( パブリッシャー・オブジェクトの初期化).
  • Id- 文字列)ストリームのユニークID。
  • Height- int) ス ト リ ームの高 さ を ピ ク セル単位で指定 し ます。
  • VideoSourceType- VideoSourceType) ス ト リ ームがカ メ ラ ビデオ ソ ース を用いるかど う か。VideoSourceType.StreamVideoTypeCamera)、スクリーン共有ビデオソース(VideoSourceType.StreamVideoTypeScreen)、またはカスタム・ビデオ・ソース(VideoSourceType.StreamVideoTypeCustom).参照 画面共有.
  • Width- int) ス ト リ ームの幅を ピ ク セル単位で指定 し ます。

あなたは Subscriber.AudioStatsUpdated そして Subscriber.VideoStatsUpdated サブスクライバーのストリームの統計情報を監視するためのイベント。低レベルのピア接続統計情報を取得するには、 Subscriber.GetRtcStatsReport() メソッドを使用する。

参照 クライアント観測可能性開発者ガイド をご覧ください。

好みのフレームレートと解像度を設定する

を使用するストリームを購読する際は、 スケーラブルビデオ機能, サブスクライブしているクライアントが OpenTok Media Router から受信するストリームの希望フレームレートと解像度を設定できます。詳細については、以下を参照してください。 Subscriber.PreferredFramerate そして Subscriber.PreferredResolution.

注: これらの設定は、パブリッシャーがデフォルトのスケーラビリティ・レイヤー・レイアウトを使用していることを前提としています。パブリッシャーがデフォルト以外のターゲット・スケーラビリティ・モードを設定している場合は( 目標スケーラビリティモードの設定)、メディアルーターのレイヤー選択が、要求された解像度やフレームレートと一致しない場合があります。詳しくは 加入者が希望する解像度およびフレームレートとの連動 詳細はこちら。