Streams veröffentlichen — Linux
Sobald Sie mit einer Sitzung verbundenkönnen Sie einen Stream veröffentlichen, den andere mit der Sitzung verbundene Clients anzeigen können.
Dieses Thema umfasst die folgenden Abschnitte:
- Initialisierung einer otc_publisher-Struktur und Setzen von Publisher-Callbacks
- Veröffentlichen eines Streams
- Einstellung der maximalen Bitrate für einen Stream
- Einen Anbieter am Streaming hindern
- Abrufen von Statistiken über den Stream eines Verlegers
Initialisierung einer otc_publisher-Struktur und Setzen von Publisher-Callbacks
Beginnen Sie mit der Erstellung einer Struktur vom Typ 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;
Verwenden Sie die user_data Mitglied des otc_publisher_callbacks Struktur, um Daten festzulegen, auf die Sie in den Callback-Funktionen verweisen möchten. In diesem Beispiel setzen wir ihn auf einen Zeiger auf ein char-Array. Es könnte aber auch ein Zeiger auf eine Instanz eines anderen Typs sein, der sinnvolle Informationen enthält.
Die anderen Mitglieder der otc_publisher_callbacks Struktur sind jeweils Callback-Funktionen, die aufgerufen werden, wenn Ereignisse im Zusammenhang mit dem veröffentlichten Stream auftreten:
on_stream_created- Wird aufgerufen, wenn der Verleger mit dem Streaming in die Sitzung beginnt.on_render_frame- Wird jedes Mal aufgerufen, wenn der Herausgeber bereit ist, ein neues Videobild in den Stream zu rendern.on_stream_destroyed- Wird aufgerufen, wenn der Stream des Verlegers zerstört wird.on_error- Wird aufgerufen, wenn bei der Veröffentlichung des Streams ein Fehler auftritt.
Alle Rückrufe erfolgen nicht über die Anwendung oder den Hauptthread, sondern über einen internen Thread. Die Anwendung sollte den Rückruf so schnell wie möglich zurückgeben, um ein Blockieren des internen Threads zu vermeiden.
Siehe otc_publisher_callbacks in der OpenTok Linux SDK Referenz für Details zu den einzelnen Callback-Funktionen.
Rufen Sie die otc_publisher_new() zur Erstellung einer otc_publisher Struktur, die den OpenTok-Verlag darstellt:
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;
}
Die otc_publisher_new() Methode nimmt drei Argumente entgegen:
name- Ein Name (optional), der den Herausgeber des Streams identifiziert.capturer- Verwenden Sie diesen Parameter, wenn Sie einen benutzerdefinierten Video-Capturer bereitstellen möchten. Wenn er aufNULL, verwendet der Publisher die Standardkamera des Systems als Videoquelle. Siehe Verwendung eines benutzerdefinierten Video-Capturers (um zu erfahren, wie man einen benutzerdefinierten Video-Capturer implementiert.)callbacks- Dieotc_publisher_callbacksPublisher-Callback-Struktur, wie oben beschrieben.
Sie können eine benutzerdefinierter Audiotreiber die von allen Verlegern und Abonnenten verwendet werden können.
Sie können einen benutzerdefinierten Video-Capturer verwenden, um einen Stream mit einer benutzerdefinierten Videoquelle zu veröffentlichen - siehe Verwendung eines benutzerdefinierten Video-Capturers.
Veröffentlichen eines Streams
Wenn die Anwendung eine Verbindung zur OpenTok-Sitzung herstellt, wird die on_connected() Callback-Funktion des otc_session_callbacks struct aufgerufen wird (siehe Beitritt zu einer Sitzung). Als Reaktion darauf können Sie die Funktion otc_session_publish() Funktion, um einen Stream in der OpenTok-Sitzung zu veröffentlichen:
if (otc_session_publish(session, publisher) != OTC_SUCCESS) {
printf("Could not publish successfully.");
}
Die otc_session_publish() nimmt zwei Argumente entgegen:
- Der Zeiger auf den
otc_sessionStruktur. - Die
otc_publisherStruktur.
Sie gibt zurück OTC_SUCCESS wenn er erfolgreich mit der Veröffentlichung eines Streams in der Sitzung beginnt. Oder es gibt einen Fehler zurück, und die otc_error Rückruf aufgerufen wird.
Einstellung der maximalen Bitrate für einen Stream
Sie können die maximale Bitrate für einen veröffentlichten Stream festlegen. Die Festlegung der maximalen Bitrate kann dazu beitragen, den Bandbreitenverbrauch zu reduzieren, wenn ein Nutzer über eine gebührenpflichtige Verbindung zugreift. Siehe diese Dokumentation.
Einen Anbieter am Streaming hindern
Um den Stream eines Publishers zu beenden, rufen Sie die otc_session_unpublish() Funktion, indem Sie die otc_session und otc_publisher strukturen:
otc_status status = otc_session_unpublish(session, publisher);
if (status == OTC_SUCCESS) {
printf("Unpublished successfully.");
} else {
printf("Could not unpublish.");
}
Abrufen von Statistiken über den Stream eines Verlegers
Verwenden Sie die on_audio_stats() und on_video_stats() Callback-Funktionen der otc_publisher_callbacks um die Statistiken für den Stream eines Publishers zu überwachen. Um detaillierte Statistiken zu den Peer-Verbindungen eines Publishers abzurufen, verwenden Sie die otc_publisher_get_rtc_stats_report() Funktion.
Siehe das Handbuch für Entwickler von Client Observability für detaillierte Informationen.