ストリームの購読 — iOS (Swift)

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

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

自動再接続

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

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

// OTSubscriber delegate callbacks:
func subscriberDidDisconnect(fromStream subscriber: OTSubscriberKit) {
  // Display a user interface notification.
}

func subscriberDidReconnect(toStream subscriber: OTSubscriberKit) {
  // Adjust user interface.
}

// OTSession delegate callback:
func session(_ session: OTSession, streamDestroyed stream: OTStream) {
  // Adjust user interface.
}

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

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

func session(_ session: OTSession, streamCreated stream: OTStream) {
    print("Session streamCreated: \(stream.streamId)")

    // See the declaration of subscribeToSelf above.
    if stream.connection.connectionId == session.connection.connectionId {
        // This is my own stream
    } else {
        // This is a stream from another client.
    }
}

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

ストリームの購読

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

func session(_ session: OTSession, streamCreated stream: OTStream) {
    subscriber = OTSubscriber(stream: stream, delegate: self)
    var error: OTError?
	session.subscribe(subscriber!, error: &error)
	
    if error {
      print("subscribe failed with error: \(error)")
    }
}

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

func subscriberDidConnect(toStream subscriber: OTSubscriberKit) {
	if let subscriberView = self.subscriber?.view {
		subscriberView.frame = CGRect(x: 0, y: 300, width: 400, height: 300)
		self.view.addSubview(subscriberView)
	}
}

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

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

var error: OTError?
session.unsubscribe(subscriber, error: &error)
if (error) {
    print("unsubscribe failed with error: \(error)")
}

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

subscriber.view?.removeFromSuperview()

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

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

func session(_ session: OTSession, streamDestroyed stream: OTStream) {
    print("Session streamDestroyed: \(stream.streamId)")

    if subscriber?.stream?.streamId == stream.streamId {
        subscriber?.view?.removeFromSuperview()
        subscriber = nil
    }
}

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

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

func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video disabled.")
}

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

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

ビデオストリームが再開すると OTSubscriberDelegate subscriberVideoEnabled(_:reason:) メッセージが送信される。

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

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

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

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

を設定することができる。 OTSubscriberKitNetworkStatsDelegate OTSubscriberKit オブジェクトが、サブスクライバーのストリームの統計情報を監視するためのオブジェクト。

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

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

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

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