ストリームの購読 — iOS

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

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

自動再接続

クライアントが購読中のストリームとの接続を切断した場合(たとえば、いずれかのクライアントのネットワーク接続が途絶えた場合など)、そのクライアントは自動的にストリームへの再接続を試みます。ストリームとの接続が切断され、クライアントが再接続を試みると、 [OTSubscriberKitDelegate subscriberDidDisconnectFromStream:] メッセージが OTSubscriberKit オブジェクトのデリゲートに送信されます。接続が復旧すると、 [OTSubscriberKitDelegate subscriberDidReconnectToStream:] メッセージが送信される。クライアントがコネクションを復元できない場合 [OTSessionDelegate session:streamDestroyed:] メッセージが送信される。

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

// OTSubscriber delegate callbacks:
- (void)subscriberDidDisconnectFromStream:(OTStream*)stream
{
  // Display a user interface notification.
}

- (void)subscriberDidReconnectToStream:(OTStream*)stream
{
  // Adjust user interface.
}

// OTSession delegate callback:
- (void)session:(OTSession*)session session:streamDestroyed:(OTStream*)stream
{
  // Adjust user interface.
}

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

について [OTSessionDelegate session:streamCreated:] メッセージは、セッションに新しいストリームが作成されたときに送信される。(ストリームは、クライアント 出版 ストリームをセッションに送る)。その OTStreamオブジェクト にはストリームを定義するプロパティがある。ストリームを定義するプロパティを connection OTStreamオブジェクトの connection OTSessionオブジェクトのプロパティを使用して、そのストリームがクライアントが公開したものであるかどうかを判断します:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    NSLog(@"session streamCreated (%@)", stream.streamId);

    // See the declaration of subscribeToSelf above.
    if ([stream.connection.connectionId isEqualToString: session.connection.connectionId]) {
        // This is my own stream
    } else {
        // This is a stream from another client.
    }
}

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

ストリームの購読

ストリームを購読するには [OTSubscriber initWithStream:] メソッドを呼び出し、OTStream オブジェクトとサブスクライバ関連のメッセージを受け取るデリゲート・オブジェクトを渡す。そして[OTSession subscribe:error] メソッドを使ってストリームの購読を開始する:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
    OTError* error = nil;
    [session subscribe:subscriber error:&error]
    if (error) {
      NSLog(@"subscribe failed with error: (%@)", error);
    }
}

について [OTSubscriberDelegate subscriberDidConnectToStream:] メッセージが送信されます。この時点で、サブスクライバのビュー ( OTSubscriber.view プロパティ)をアプリに追加する:

	- (void)subscriberDidConnectToStream:(OTSubscriber*)subscriber
	{
	    [subscriber.view setFrame:CGRectMake(0, 300, 400, 300)];
	    [self.view addSubview:subscriber.view];
	}

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

購読しているストリームの再生を停止するには [OTSession unsubscribe:error:] メソッドを使用する:

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

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

    [subscriber.view removeFromSuperview:];

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

ストリームがセッションを離れると [OTSession session: streamDestroyed:] メッセージが送信される。ストリームが削除されると、そのストリームの OTSubscriber オブジェクトのビューはそのスーパービューから削除されます。ストリームが自分のクライアントによって発行されていないかどうかを確認し、そのビューをスーパービューから削除します。

- (void)session:(OTSession*)session streamDestroyed:(OTStream *)stream
{
    NSLog(@"session streamDestroyed (%@)", stream.streamId);

    if ([subscriber.stream.streamId isEqualToString:stream.streamId])
    {
        [_subscriber.view removeFromSuperview];
        _subscriber = nil;
    }
}

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

サブスクライバーのデリゲートは [OTSubscriberDelegate subscriberVideoDisabled:reason:] 加入者のビデオが無効化されたときのメッセージ:

- (void)subscriberVideoDisabled:(OTSubscriber *)subscriber
                         reason:(OTSubscriberVideoEventReason)reason
{
    NSLog(@"subscriber video disabled.");
}

について reason パラメータには、OTSubscriberVideoEventReason 列挙型で定義されている以下の定数のいずれかを設定する:

  • OTSubscriberVideoEventPublisherPropertyChanged - このビデオイベントは、ストリームのパブリッシャーがビデオストリームを停止したために発生した。
  • OTSubscriberVideoEventQualityChanged - ビデオ・イベントは、ビデオ・ストリームの画質の変化によって発生しました。ストリームの品質は、サブスクライバまたはパブリッシャのネットワーク状 況やCPU使用率によって変化する可能性がある。この理由は、メディアモードが "routed "に設定されているセッションでのみ使用される。(以下を参照のこと。 OpenTok メディアルーターとメディアモード.) OpenTok Media Router のこの機能では、ビデオストリームの品質が低下すると、加入者はそのビデオストリームの受信を停止し、メッセージが送信されます。状況が改善すると、ビデオストリームの受信が再開され、 [OTSubscriberKit subscriberVideoEnabled:reason:] メッセージが送信される。ビデオストリームがドロップされたとき、加入者は、オーディオストリームがあれば、それを受信し続ける。
  • OTSubscriberVideoEventSubscriberPropertyChanged - ビデオイベントは、この加入者の OTSubscriberKit.subscribeToVideo 財産である。

ビデオストリームが再開すると [OTSubscriberKit subscriberVideoEnabled:reason:] メッセージが送信される。

ストリームを公開する際、ストリームの画質が原因で動画が無効化されるのを防ぐことができます。ストリームを公開する前に [OTSession publish:error:] メソッドで audioFallbackEnabled プロパティをNOに設定します。

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

OTStreamオブジェクトは、ストリームを定義する以下のプロパティを持つ:

  • connection-ストリームを公開している接続に対応するOTConnectionオブジェクト。これを connection プロパティを使用して、ストリームがクライアントによって公開されているかどうかを確認します。
  • creationTime-ストリームの作成時刻のNSDateタイムスタンプ。
  • hasAudio-論理値) ストリームに音声があるかどうか。
  • hasVideo-論理値) ストリームに動画があるかどうか。
  • name-ストリームの名前。これは、ストリームのパブリッシャを初期化するときに設定されます ( OTPublisherオブジェクトの初期化).
  • session—(OTSession) ストリームが紐付けられている OpenTok セッション。
  • streamId-(NSString) ストリームの一意のID。
  • videoDimensions-このストリームのビデオメディアトラックの現在の寸法を定義する CGSize オブジェクト。
  • videoType-OTStreamVideoType) ストリームがカメラ映像ソースを使うかどうか (OTStreamVideoTypeCamera)、スクリーン共有ビデオソース(OTStreamVideoTypeScreen)、またはカスタム・ビデオ・ソース(OTStreamVideoTypeCustom).参照 画面共有.

を設定することができる。 OTSubscriberKitNetworkStatsDelegate OTSubscriberKit オブジェクトが、サブスクライバーのストリームの統計情報を監視するためのオブジェクト。低レベルのストリーム統計情報を取得するには、 [OTSubscriberKit getRtcStatsReport:] メソッドを使用する。

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

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

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

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