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