ストリームの公開 — Linux

一旦 セッションに接続この場合、セッションに接続している他のクライアントが閲覧できるストリームを公開することができる。

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

otc_publisher 構造体の初期化とパブリッシャーコールバックの設定

型の構造体を作ることから始める。 otc_publisher_callbacks:

char *publisher_user_data = strdup("Publisher user data");

static void on_publisher_stream_created(otc_publisher *publisher,
                                        void *user_data,
                                        const otc_stream *stream) {
  // The stream has been created.
}

static void on_publisher_render_frame(otc_publisher *publisher,
                                      void *user_data,
                                      const otc_video_frame *frame) {
  // You can render the frame to the UI.
}

static void on_publisher_stream_destroyed(otc_publisher *publisher,
                                          void *user_data,
                                          const otc_stream *stream) {
  // The stream has been destroyed.
}

static void on_publisher_error(otc_publisher *publisher,
                               void *user_data,
                               const char* error_string,
                               enum otc_publisher_error_code error_code) {
  // Handle the error.
}


struct otc_publisher_callbacks publisher_callbacks = {0};
publisher_callbacks.user_data = publisher_user_data;
publisher_callbacks.on_stream_created = on_publisher_stream_created;
publisher_callbacks.on_render_frame = on_publisher_render_frame;
publisher_callbacks.on_stream_destroyed = on_publisher_stream_destroyed;
publisher_callbacks.on_error = on_publisher_error;

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

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

  • on_stream_created - パブリッシャーがセッションへのストリーミングを開始する時に呼ばれる。
  • on_render_frame - パブリッシャーがストリームに新しいビデオフレームをレンダリングする準備ができるたびに呼び出されます。
  • on_stream_destroyed - パブリッシャーのストリームが破棄されるときに呼ばれます。
  • on_error - ストリームを公開する際にエラーが発生した場合に呼び出されます。

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

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

に電話する。 otc_publisher_new() を作成する。 otc_publisher 構造体で、OpenTok パブリッシャーを表します:

publisher = otc_publisher_new("Bob's video",
                                                   NULL, /* Use the system camera. */
                                                   &publisher_callbacks);
if (publisher == NULL) {
  printf("Could not create OpenTok publisher successfully");
  otc_session_delete(session);
  otc_destroy();
  return EXIT_FAILURE;
}

について otc_publisher_new() メソッドは3つの引数を取る:

  • name - ストリームの発行者を示す名前(オプション)。
  • capturer - カスタムビデオキャプチャを提供したい場合、このパラメータを使用する。このパラメータが NULL, 発行元は、動画ソースとしてシステムのデフォルトカメラを使用します。詳しくは カスタムビデオキャプチャーの使用 (カスタム動画キャプチャ機能の実装方法については、こちらをご覧ください。)
  • callbacks - について otc_publisher_callbacks パブリッシャーコールバック構造体

を作成することができる。 カスタムオーディオドライバ すべての出版社と購読者が使用できる。

カスタムビデオキャプチャを使用して、カスタマイズしたビデオソースでストリームを公開できます。 カスタムビデオキャプチャーの使用.

ストリームの公開

アプリケーションが OpenTok セッションに接続すると、 on_connected() のコールバック関数である。 otc_session_callbacks 構造体が呼び出される ( セッションへの参加).これに対して otc_session_publish() 関数を使用して、ストリームを OpenTok セッションに公開します:


if (otc_session_publish(session, publisher) != OTC_SUCCESS) {
  printf("Could not publish successfully.");
}

について otc_session_publish() 関数は2つの引数を取る:

  • へのポインタを返します。 otc_session 構造になっている。
  • について otc_publisher 構造になっている。

を返す。 OTC_SUCCESS を返します。あるいはエラーを返し otc_error コールバックが呼び出される。

ストリームの最大ビットレートの設定

公開されたストリームの最大ビットレートを設定できます。最大ビットレートを設定することで、従量制の接続から接続しているユーザーの場合、帯域幅の消費を抑えることができます。詳しくは、 本書.

パブリッシャーによるストリーミングを停止する

パブリッシャーのストリームを停止するには、 otc_session_unpublish() 関数に渡す。 otc_session そして otc_publisher 構造体である:

otc_status status = otc_session_unpublish(session, publisher);
  if (status == OTC_SUCCESS) {
  printf("Unpublished successfully.");
} else {
  printf("Could not unpublish.");
}

パブリッシャーのストリームに関する統計情報の取得

の on_audio_stats() および on_video_stats() コールバック関数を使用する。 otc_publisher_callbacks パブリッシャーのストリームの統計情報を監視するには。パブリッシャーの低レベルのピア接続統計情報を取得するには、 otc_publisher_get_rtc_stats_report() 関数である。

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