Flujos de publicación — Linux
Una vez que haya conectado a una sesiónpuede publicar un flujo que otros clientes conectados a la sesión puedan ver.
Este tema incluye las siguientes secciones:
- Inicialización de una estructura otc_publisher y configuración de las retrollamadas del editor
- Publicar un flujo
- Configuración de la velocidad de bits máxima para una transmisión
- Impedir que una editorial transmita en streaming
- Obtener estadísticas sobre la transmisión de un editor
Inicialización de una estructura otc_publisher y configuración de las retrollamadas del editor
Comience por crear una estructura de tipo 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;
Utiliza el user_data miembro de la otc_publisher_callbacks para establecer los datos a los que quieras hacer referencia en las funciones callback. En este ejemplo, lo establecemos como un puntero a un array char. Pero podría ser un puntero a una instancia de algún otro tipo que contenga información significativa.
Los demás miembros de la otc_publisher_callbacks son funciones de devolución de llamada que se invocan cuando se producen eventos relacionados con el flujo publicado:
on_stream_created— Se invoca cuando el editor comienza a transmitir datos a la sesión.on_render_frame- Se llama cada vez que el editor está listo para renderizar un nuevo fotograma de vídeo en la secuencia.on_stream_destroyed- Llamada cuando se destruye el flujo del editor.on_error— Se invoca cuando se produce un error al publicar el flujo.
Ninguna de las llamadas de retorno se realizará en el hilo de la aplicación ni en el hilo principal, sino en un hilo interno. La aplicación debe devolver la llamada de retorno lo antes posible para evitar bloquear el hilo interno.
Véase otc_publisher_callbacks en la referencia OpenTok Linux SDK para más detalles sobre cada una de las funciones de callback.
Llame al otc_publisher_new() para crear un otc_publisher estructura, que representa al editor de 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;
}
El otc_publisher_new() recibe tres argumentos:
name— Un nombre (opcional) que identifique al editor de la transmisión.capturer- Utilice este parámetro si desea proporcionar un capturador de vídeo personalizado. Si se establece enNULL, el editor utiliza la cámara predeterminada del sistema como fuente de vídeo. Véase Uso de un capturador de vídeo personalizado (para ver cómo implementar un capturador de vídeo personalizado.)callbacks- Laotc_publisher_callbacksestructura de devolución de llamada del editor, descrita anteriormente.
Puede crear un controlador de audio personalizado para uso de todos los editores y abonados.
Puede utilizar un capturador de vídeo personalizado para publicar un flujo con una fuente de vídeo personalizada - véase Uso de un capturador de vídeo personalizado.
Publicar un flujo
Cuando la aplicación se conecta a la sesión de OpenTok, el on_connected() función de devolución de llamada de la otc_session_callbacks se llama a la estructura (véase Cómo unirse a una sesión). En respuesta a esto, puede llamar a la función otc_session_publish() Función para publicar una transmisión en la sesión de OpenTok:
if (otc_session_publish(session, publisher) != OTC_SUCCESS) {
printf("Could not publish successfully.");
}
El otc_session_publish() toma dos argumentos:
- El puntero al
otc_sessionestructura. - El
otc_publisherestructura.
Devuelve OTC_SUCCESS cuando se inicia con éxito la publicación de un flujo en la sesión. O devuelve un error, y el otc_error .
Configuración de la velocidad de bits máxima para una transmisión
Puedes establecer la tasa de bits máxima para una transmisión publicada. Establecer la tasa de bits máxima puede ayudar a reducir el consumo de ancho de banda cuando un usuario se conecta desde una conexión con límite de datos. Consulta esta documentación.
Impedir que una editorial transmita en streaming
Para detener la transmisión de un editor, llama a la función otc_session_unpublish() pasando la función otc_session y otc_publisher structs:
otc_status status = otc_session_unpublish(session, publisher);
if (status == OTC_SUCCESS) {
printf("Unpublished successfully.");
} else {
printf("Could not unpublish.");
}
Obtener estadísticas sobre la transmisión de un editor
Utilice las funciones de devolución de llamada on_audio_stats() y on_video_stats() de la aplicación otc_publisher_callbacks para supervisar las estadísticas de la transmisión de un editor. Para obtener estadísticas detalladas sobre las conexiones entre pares de un editor, utiliza la otc_publisher_get_rtc_stats_report() función.
Consulte guía del desarrollador de la observabilidad del cliente para obtener información detallada.