ストリームの購読 — Android

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

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

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

について onStreamReceived(Session session, Stream stream) Session.SessionListener オブジェクトのメソッドは、別のクライアントによって公開されたストリームがセッション内に作成されたときに呼び出されます。(ストリームは、クライアントが 出版 ストリームをセッションに接続する場合、またはセッションに接続したときにストリームが存在する場合)。

@Override
public void onStreamReceived(Session session, Stream stream) {
   // There is a new stream.
   // You may want to subscribe to it.
}

を呼び出して、このイベントのリスナー・オブジェクトを追加する。 setSessionListener(Session.SessionListener listener) メソッドを呼び出します:

mSession.setSessionListener(this);

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

ストリームの購読

ストリームをサブスクライブするには、まず、Subscriber.Builder オブジェクトをインスタンス化します。 Subscriber.Builder(Context context, Stream stream) コンストラクタに渡します。Subscriber用のAndroidアプリケーション・コンテキストとStreamオブジェクトを渡します。コンストラクタを呼び出します。 build() Subscriber オブジェクトを作成する方法です。Subscriber オブジェクトへの参照を必ず保持してください。そうしないと、ガベージコレクションの対象となり、クラッシュや予期しない動作を引き起こす可能性があります。Subscriber オブジェクトを作成したら、 subscribe() メソッドを呼び出して、ストリームの購読を開始します:

mSubscriber = new Subscriber.Builder(context, stream)
  .build();
mSession.subscribe(mSubscriber);

について SubscriberKit.SubscriberListener.onConnected(SubscriberKit subscriber) メソッドは、アプリがサブスクライバーのストリームを受信し始めるときに呼び出されます。この時点で、サブスクライバのビュー(メソッドによって返される)を追加できます。 getView() メソッド)をandroid.view.ViewGroupオブジェクトのサブビューとしてアプリに表示する:

@Override
public void onConnected(subscriber) {
   // mViewContainer is an Android View
   RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
           getResources().getDisplayMetrics().widthPixels, getResources()
                   .getDisplayMetrics().heightPixels);
   mViewContainer.addView(mSubscriber.getView(), layoutParams);
}

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

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

mSession.unsubscribe(mSubscriber);

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

自動再接続

クライアントが購読中のストリームとの接続を切断した場合(たとえば、いずれかのクライアントのネットワーク接続が途絶えた場合など)、そのクライアントは自動的にストリームへの再接続を試みます。ストリームとの接続が切断され、クライアントが再接続を試みると、 SubscriberKit.StreamListener.onDisconnected(SubscriberKit subscriber) メソッドが呼び出される。接続が回復すると SubscriberKit.StreamListener.onReconnected(SubscriberKit subscriber) メソッドが呼び出される。クライアントがストリームを復元できない場合 Session.SessionListener.onStreamDropped(Session session, Stream stream) メソッドが呼び出される。

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

// In the implementation of the SubscriberKit.StreamListener interface:
@Override
public void onDisconnected(SubscriberKit subscriber) {
  // Display a user interface notification.
}

@Override
public void onReconnected(SubscriberKit subscriber) {
  // Adjust user interface.
}

// In the implementation of the Session.SessionListener interface:
@Override
public void onStreamDropped(Session session, Stream stream) {
  // Adjust user interface.
}

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

他のクライアントから発行されたストリームがセッションから離れると onStreamDropped(Session session, Stream stream) メソッドが呼び出されます。ストリームが削除されると、そのストリームのサブスクライバ・オブジェクトのビューは、そのスーパー ビューから削除されます。

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

OpenTok Media Routerは、接続状態の悪化を検知すると、加入者への動画送信を停止します。音声ストリームがある場合は、加入者は引き続きその音声ストリームを受信し続けます。 onVideoDisabled(加入者, 加入者) OpenTok Media Router が動画の送信を停止すると、SubscriberKit.VideoListener オブジェクトのメソッドが呼び出されます:

@Override
public void onVideoDisabled(subscriber, reason) {
	// Video is disabled for the subscriber
}

について reason パラメータは、加入者がビデオストリーミングを停止した理由を特定する。

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

について onVideoEnabled(subscriber, reason) メソッドが呼び出されます:

@Override
public void onVideoEnabled(subscriber, reason) {
// Video is resumes for the subscriber
}

について reason パラメータは、加入者のビデオが再開された理由を特定する。

ストリームを公開する際、パブリッシャーおよびサブスクライバーのオーディオフォールバックを有効または無効に設定します。オーディオフォールバック機能は、ネットワークやCPUの状況により動画の再生が困難な場合、パブリッシャーおよびサブスクライバーの動画を無効にします。詳しくは オーディオのフォールバック(iOS).

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

Streamオブジェクトには、ストリームを定義する値を返す以下のメソッドがあります:

  • getConnection()- (Connection) ストリームを公開している接続に対応する Connection オブジェクトを返します。この値を getConnection() メソッドを呼び出して、ストリームがクライアントによって公開されているかどうかを確認します。
  • getCreationTime()- Date) ス ト リ ームの作成時刻の タ イ ムス タ ンプ。
  • hasAudio()- 論理値) ス ト リ ームが音声を持つかど う か。
  • hasVideo()- 論理値) ス ト リ ームが動画を持つかど う か。
  • getName()- 文字列) ストリームの名前を返します。これは、ストリームのパブリッシャを初期化するときに設定されます ( パブリッシャー・オブジェクトの初期化).
  • getStreamId()- 文字列)ストリームの一意のID。
  • getVideoHeight()- int) ス ト リ ームの高 さ を ピ ク セル単位で指定 し ます。
  • getVideoType()- StreamVideoType) ス ト リ ームがカ メ ラ ビデオ ソ ース を用いているかど う か。StreamVideoTypeCamera.StreamVideoTypeCamera)、スクリーン共有ビデオソース(StreamVideoTypeScreen.StreamVideoTypeScreen)、またはカスタム・ビデオ・ソース(StreamVideoTypeScreen.StreamVideoTypeScreen).参照 画面共有.
  • getVideoWidth()- int) ス ト リ ームの幅を ピ ク セル単位で指定 し ます。

サブスクライバーのストリームの統計情報を監視するためのリスナーを設定できます。詳しくは、 SubscriberKit.setAudioStatsListener(AudioStatsListenerリスナー) そして SubscriberKit.setVideoStatsListener(VideoStatsListener listener) メソッド。低レベルのピア接続統計情報を取得するには、 SubscriberKit.getRtcStatsReport() メソッドを使用する。

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

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

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

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