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