ストリームの公開 — macOS
一旦 セッションに接続この場合、セッションに接続している他のクライアントが閲覧できるストリームを公開することができる。
このトピックには以下のセクションが含まれます:
- otc_publisher 構造体の初期化とパブリッシャーコールバックの設定
- ストリームの公開
- ストリームの最大ビットレートの設定
- パブリッシャーによるストリーミングを停止する
- パブリッシャーのストリームに関する統計情報の取得
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 macOS 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 構造体の初期化とパブリッシャーコールバックの設定.
これらのコールバック関数は、パブリッシャーのオーディオおよびビデオの統計情報を報告するために定期的に呼び出されます。各関数には、以下の引数が渡されます。へのポインタ: publisher struct、へのポインタ user_data パブリッシャーに対して設定した値、統計情報の配列、およびその配列に含まれる統計情報の数です。stats パラメータは、 otc_publisher_audio_stats そして otc_publisher_video_stats 構造体。ルーティングされたセッション( OpenTok メディアルーター)、この配列には1つのオブジェクトが含まれており、OpenTok Media Routerに送信される単一のオーディオまたはビデオメディアストリームの統計情報を定義します。中継セッションでは、この配列には、公開されたストリームの各加入者に対応するオブジェクトが含まれます。statsパラメータとして渡される構造体には、以下のプロパティが含まれます:
- 送信された音声または動画パケットの総数
- 失われた音声または動画パケットの総数
- 送信された音声または動画のバイト数の合計
- 統計データが収集された時点のタイムスタンプ
- オーディオレベル(オーディオ統計用)
さらに、中継セッションにおけるパブリッシャーについては、配列内の各オブジェクトには以下の2つのプロパティが含まれます:
ConnectionId— ストリームを購読しているクライアントの接続IDSubscriberId— ストリームを購読しているクライアントの購読者ID
ルーティングされたセッション内のパブリッシャーに対しては、これら2つのプロパティは未定義となります。
より詳細なストリーム統計を取得するには otc_publisher_get_rtc_stats_report() 関数を使用します。これはメディアストリームのRTC統計レポートを提供する。これは非同期操作である。この操作は非同期操作である。 otc_publisher_rtc_stats_report_cb struct に渡す。 otc_publisher_set_rtc_stats_report_cb 関数を呼び出す前に otc_publisher_get_rtc_stats_report().統計が利用可能になると otc_publisher_rtc_stats_report_cb.on_rtc_stats_report() コールバック関数が呼び出される。この関数には stats の配列へのポインタである。 otc_publisher_rtc_stats 構造体を含む。この構造体には json_array_of_reports プロパティを使用します。これはRTC統計レポートのJSON配列で、ウェブブラウザで実装されているRtcStatsReportオブジェクトのフォーマットに似ています( Mozillaのドキュメント). こちらも参照 このW3Cドキュメント.