Subtítulos en directo — SDK de Vonage Video para macOS
El SDK de OpenTok para macOS incluye métodos que permiten a los clientes de macOS publicar y recibir subtítulos en una sesión de OpenTok.
La subtitulación en directo debe activarse a nivel de sesión a través de la API REST.
Los subtítulos en directo sólo se admiten en sesiones enrutadas.
Este tema incluye las siguientes secciones:
Publicación de subtítulos en directo
Un editor de OpenTok puede iniciar o detener la publicación de subtítulos en directo en tiempo real llamando a la función
otc_publisher_set_publish_captions() función:
otc_publisher_set_publish_captions(publisher, OTC_FALSE);
Si el editor no incluye una pista de audio, el otc_publisher_callbacks.on_error() devolución de llamada
con un error, con el código de error establecido en OTC_PUBLISHER_MISSING_AUDIO_TRACK.
El SDK para macOS de Vonage no admite que un editor reciba eventos para sus propios subtítulos. Para reproducir los subtítulos del orador, crea un suscriptor oculto (en el flujo del editor) para escuchar los eventos de subtítulos. (Véase la sección siguiente).
Suscribirse a los subtítulos en directo
Un abonado puede iniciar o detener la recepción de subtítulos llamando a la tecla
otc_subscriber_set_subscribe_to_captions() función:
otc_subscriber_set_subscribe_to_captions(subscriber, OTC_TRUE);
Puedes llamar a esta función independientemente de si el emisor del flujo está publicando subtítulos en directo en ese momento. El suscriptor empezará a recibir datos de subtítulos en cuanto el emisor comience a publicar subtítulos.
Para dejar de recibir subtítulos, pase OTC_FALSE en la función:
otc_subscriber_set_subscribe_to_captions(subscriber, OTC_FALSE);
Los suscriptores pueden comprobar si tienen activado el servicio de subtítulos en directo de una retransmisión mediante el Verify
otc_subscriber_get_subscribe_to_captions() función:
otc_bool isSubscribed = otc_subscriber_get_subscribe_to_captions(subscriber);
Los suscriptores reciben los subtítulos a través de eventos. El SDK de OpenTok no muestra el texto de los subtítulos
en la interfaz de usuario. Configura el on_caption_text() función de miembro de la otc_subscriber_callbacks ejemplo
para configurar un oyente de eventos de subtítulos:
static void on_caption_text(otc_subscriber *subscriber,
void *user_data,
const char* text) {
// Display the text in the UI.
}
subscriber_callbacks.on_caption_text = on_caption_text;
El otc_stream_has_captions() informa de si un flujo tiene subtítulos:
otc_bool hasCaptions = otc_stream_has_captions(stream);
Implementar el on_stream_has_captions_changed() función de miembro de la otc_session_callbacks
para supervisar cuándo un flujo tiene subtítulos activados y desactivados:
static void on_stream_has_captions_changed(otc_session* session,
void *user_data,
otc_stream *stream,
otc_bool has_captions) {
// Adjust UI to indicate that captions are or are not available.
}
session_callbacks.on_stream_has_captions_changed = on_stream_has_captions_changed;
Cómo recibir tus propios subtítulos en directo
La Video API de Vonage no permite que un emisor reciba eventos relacionados con sus propios subtítulos. Para mostrar los subtítulos del propio hablante, crea un suscriptor oculto (al flujo del emisor local) para que detecte los eventos de subtítulos. No muestres la vista de este suscriptor en la interfaz de usuario y no te suscribas a su audio (para evitar el eco). A continuación, puedes añadir el texto de los subtítulos a la interfaz de usuario.
Por defecto, el Editor no publica los pies de foto, así que llama a la función otc_publisher_set_publish_captions() función, pasando como parámetro true:
session_data->publisher = otc_publisher_new("opentok-macos-sdk-samples",
NULL, /* Use WebRTC's video capturer. */
&publisher_callbacks);
otc_publisher_set_publish_captions(session_data->publisher, TRUE);
Suscríbete al canal en la página del editor on_publisher_stream_created() función de devolución de llamada:
static void on_publisher_stream_created(otc_publisher *publisher,
void *user_data,
const otc_stream *stream) {
NSLog(@"on_session_stream_received: streamId=%s", otc_stream_get_id(stream));
subscriber_callbacks.on_caption_text = on_caption_text;
otc_subscriber *subscriber = otc_subscriber_new(strcpy, &subscriber_callbacks);
if (otc_session_subscribe(session, subscriber) == OTC_SUCCESS) {
session_data_local->subscriber = subscriber;
session_data_local->sub_stream = stream;
otc_subscriber_set_subscribe_to_audio(session_data_local->subscriber, FALSE);
otc_subscriber_set_subscribe_to_video(session_data_local->subscriber, TRUE); // This is a workaround for an OpenTok bug.
otc_subscriber_set_subscribe_to_captions(session_data_local->subscriber, TRUE);
self_publisher_stream_id = otc_stream_get_id(stream);
}
}
Como se ha indicado anteriormente, debes suscribirte al canal de vídeo para poder ver los subtítulos. (Esto se solucionará en una versión futura.)
En este ejemplo se almacena el ID de la transmisión del editor en un selfPublisherStreamId variable, que aquí se utiliza para evitar que su vista se añada a la interfaz de usuario:
static void on_subscriber_connected(otc_subscriber *subscriber,
void *user_data,
const otc_stream *stream) {
NSLog(@"on_subscriber_connected: streamId=%s ", otc_stream_get_id(stream));
if(otc_stream_get_id(otc_stream) == selfPublisherStreamId) {
return;
}
// Show other subscribers in the UI
}
El suscriptor dispondrá ahora de su propio texto transcrito por el editor, y esto se puede recuperar en la llamada de retorno tal y como se muestra a continuación:
void on_caption_text(otc_subscriber* subscriber,
void* user_data,
const char* text,
otc_bool is_final) {
// Adjust UI to show captions.
otc_stream* stream = otc_subscriber_get_stream(subscriber);
if (strcmp(otc_stream_get_id(stream), self_publisher_stream_id) == 0)
{
// text is your own audio as transcribed text or captions
NSLog(@"My own caption %@", text);
} else {
// other subscribers captions
}
}