ストリームの購読 — macOS

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

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

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

について on_stream_received のコールバック関数である。 otc_session_callbacks struct は、他のクライアントから発行されたストリームがセッション内に作成されるときに呼び出される。(ストリームは、クライアント 出版 ストリームをセッションに追加するか、セッションに接続したときにストリームが存在する場合)。以下を参照のこと。 otc_session インスタンスのインスタンス化とセッション関連のコールバック.

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

ストリームの購読

について on_stream_received コールバック関数(前のセクションを参照)には stream パラメータへのポインタである。 otc_stream 構造体が新しいストリームを表します。ストリームを購読するには otc_subscriber_callbacks インスタンスを作成し、サブスクライバー関連イベントのコールバック関数を設定し、そして otc_subscriber_new() 関数に渡す。 otc_stream そして otc_subscriber_callbacks インスタンス

char *user_data = strdup("Session user data");

static void on_subscriber_connected(otc_subscriber *subscriber,
                                    void *user_data,
                                    const otc_stream *stream) {
  // Called when the subscriber connects to the stream.
}

static void on_render_frame(otc_subscriber *subscriber,
                            void *user_data,
                            const otc_video_frame *frame) {
  // Called when the the subscriber is ready to render a new video frame
}

static void on_error(otc_subscriber *subscriber,
                     void *user_data) {
  // Called when there is an error.
}

struct otc_subscriber_callbacks subscriber_callbacks = {0};
subscriber_callbacks.user_data = user_data;
subscriber_callbacks.on_connected = on_subscriber_connected;
subscriber_callbacks.on_render_frame = on_subscriber_render_frame;
subscriber_callbacks.on_error = on_subscriber_error;

otc_subscriber *subscriber = otc_subscriber_new(stream,
                                                &subscriber_callbacks);
if (subscriber == NULL) {
  printf("Could not create OpenTok subscriber successfully");
  return;
}

if (otc_session_subscribe(session, subscriber) != OTC_SUCCESS) {
  printf("Could not subscribe successfully.");
}

を使用する。 user_data のメンバーである。 otc_subscriber_callbacks 構造体に、コールバック関数で参照したいデータを設定する。この例では、文字列オブジェクトへのポインタを設定している。しかし、意味のある情報を含む他の型のインスタンスへのポインタにすることもできます。

他のメンバー otc_subscriber_callbacks 構造体はそれぞれ、サブスクライバに関連するイベントが発生したときに呼び出されるコールバック関数である:

  • on_connected - 加入者がオーディオビデオストリームに接続するときにコールされる。
  • on_render_frame - サブスクライバが新しいビデオフレームをレンダリングする準備ができるたびに呼び出される。
  • on_error - 加入者エラーが発生したときにコールされる。

すべてのコールバックは、アプリケーションやメインスレッド上ではなく、内部スレッド上で行われる。アプリケーションは、内部スレッドのブロックを避けるために、できるだけ早くコールバックを返すべきである。

参照 otc_subscriber_callbacks 各コールバック関数の詳細については、OpenTok macOS SDK リファレンスを参照してください。

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

購読しているストリームの再生を停止するには otc_session_unsubscribe() 関数に渡す。 otc_session そして otc_subscriber のインスタンスである:

if (session.unsubscribe(session, subscriber) ==  OTC_SUCCESS) {
  printf("Unsubscribed from the stream successfully.");
  otc_subscriber_delete(subscriber);
} else {
  printf("Could not unsubscribe successfully.");
};

に電話する。 otc_subscriber_delete() 関数を使用して、サブスクライバのインスタンス(それにバインドされているすべてのハードウェアと UI リソースを含む)を解放します。

自動再接続

クライアントが購読中のストリームとの接続を切断した場合(たとえば、いずれかのクライアントのネットワーク接続が途絶えた場合など)、そのクライアントは自動的にストリームへの再接続を試みます。ストリームとの接続が切断され、クライアントが再接続を試みると、 on_disconnected のコールバック関数である。 otc_subscriber_callbacks 構造体が呼び出される。接続がリストアされると on_reconnected のコールバック関数である。 otc_subscriber_callbacks サブスクライバー用の構造体が呼び出されます。クライアントがストリームを復元できない場合、 on_stream_dropped のコールバック関数である。 otc_session_callbacks と呼ばれる。

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

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

について on_stream_dropped のコールバック関数である。 otc_session_callbacks struct は、別のクライアントのストリームが OpenTok セッションから切断された際に呼び出されます。この stream この関数に渡されるパラメータは otc_stream 構造体をストリームのを呼び出す。 otc_stream_get_id() メソッドに otc_stream 構造体を使用してストリームIDを取得する。

ストリームのビデオが無効になっていることを検出する

について on_stream_has_video_changed のコールバック関数である。 otc_session_callbacks struct は、別のクライアントのストリームが OpenTok セッションから切断された際に呼び出されます。この stream この関数に渡されるパラメータは otc_stream 構造体をストリームのを呼び出す。 otc_stream_get_id() メソッドに otc_stream 構造体を使用してストリームIDを取得する。

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

ストリームに関する情報を得るには、以下の関数を呼び出す:

  • otc_stream_get_connection()- を返します。 otc_connection インスタンスを作成します。このコネクション ID を otc_connection インスタンスを返します。 otc_session_get_connection() 関数を使用して、ストリームがクライアントによって公開されているかどうかを確認します。
  • otc_stream_get_creation_time()- ストリームの作成時刻のタイムスタンプを返します。
  • otc_stream_has_audio()- ストリームが現在オーディオを公開しているかどうか。
  • otc_stream_has_video()- ストリームが現在ビデオを公開しているかどうか。
  • otc_stream_has_audio_track()- ストリームにオーディオトラックがあるかどうか。
  • otc_stream_has_video_track()- ストリームにビデオトラックがあるかどうか。
  • otc_stream_get_name()- ストリームの名前を返します。これは、ストリームのパブリッシャを初期化するときに設定されます ( otc_publisher 構造体の初期化とパブリッシャーコールバックの設定).
  • otc_stream_get_id()- ストリームの一意な ID を返します。
  • otc_stream_get_video_height()- ストリームの高さをピクセル単位で指定する。
  • otc_stream_get_video_type()- ストリームがカメラのビデオソースを使用しているかどうか (OTC_STREAM_VIDEO_TYPE_CAMERA)または画面共有ビデオソース(OTC_STREAM_VIDEO_TYPE_SCREEN).
  • otc_stream_get_video_width()- ストリームの幅をピクセル単位で指定する。

を使用する。 on_audio_stats() そして on_video_stats() のコールバック関数 otc_subscriber_callbacks 加入者のストリームについて、以下の統計情報を監視するには:

  • 失われたオーディオおよびビデオパケットの総数
  • 受信したオーディオおよびビデオパケットの総数
  • 受信したオーディオとビデオの合計バイト数
  • 送信側統計、出版社がこれらの機能を有効にしている場合

より詳細なストリーム統計を取得するには otc_subscriber_get_rtc_stats_report() 関数。これにより、メディアストリームのRTC統計レポートが提供されます。これは非同期操作です。 otc_subscriber_rtc_stats_report_cb 構造体に渡す。 otc_subscriber_set_rtc_stats_report_cb 関数を呼び出す前に otc_subscriber_get_rtc_stats_report().統計が利用可能になると otc_subscriber_rtc_stats_report_cb.on_rtc_stats_report コールバック関数が呼び出されます。このコールバック関数には、 json_array_of_reports パラメータで指定します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ている( Mozillaのドキュメント). こちらも参照 このW3Cドキュメント.

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

を使用するストリームを購読する際は、 スケーラブルビデオ機能, 購読クライアントが OpenTok Media Router から受信するストリームの希望フレームレートと解像度を設定できます。以下の otc_subscriber_set_preferred_framerate() そして otc_subscriber_set_preferred_resolution の機能がある。