Legendas em tempo real — SDK do Vonage Video para macOS
O SDK do OpenTok para macOS inclui métodos para que os clientes do macOS publiquem e recebam legendas em uma sessão do OpenTok.
A legenda em tempo real deve ser ativada no nível da sessão por meio do API REST.
A legenda em tempo real é compatível apenas em sessões encaminhadas.
Este tópico inclui as seguintes seções:
Publicação de legendas em tempo real
Um editor do OpenTok pode iniciar ou interromper a exibição de legendas ao vivo em tempo real chamando a função
otc_publisher_set_publish_captions() função:
otc_publisher_set_publish_captions(publisher, OTC_FALSE);
Se a editora não incluir uma faixa de áudio, o otc_publisher_callbacks.on_error() A função
de retorno de chamada é chamada com um erro, com o código de erro definido como OTC_PUBLISHER_MISSING_AUDIO_TRACK.
O SDK do Vonage para macOS não permite que um emissor receba eventos relativos às suas próprias legendas. Para exibir as legendas do próprio locutor, crie um assinante oculto (no fluxo do emissor) para monitorar os eventos de legenda. (Consulte a próxima seção.)
Inscrever-se para receber legendas em tempo real
Um assinante pode ativar ou desativar a exibição de legendas ligando para o
otc_subscriber_set_subscribe_to_captions() função:
otc_subscriber_set_subscribe_to_captions(subscriber, OTC_TRUE);
Você pode chamar essa função independentemente de o emissor do stream estar ou não publicando legendas em tempo real no momento. O assinante começará a receber os dados das legendas assim que o emissor começar a publicar as legendas.
Para deixar de receber legendas, passe OTC_FALSE na função:
otc_subscriber_set_subscribe_to_captions(subscriber, OTC_FALSE);
Os assinantes podem verificar se estão ativamente inscritos nas legendas ao vivo de uma transmissão usando o
otc_subscriber_get_subscribe_to_captions() função:
otc_bool isSubscribed = otc_subscriber_get_subscribe_to_captions(subscriber);
Os assinantes recebem legendas por meio de eventos. O SDK do OpenTok não exibe o texto das legendas
na interface do usuário. Defina o on_caption_text() função de membro do otc_subscriber_callbacks exemplo
para configurar um ouvinte para eventos de legendas:
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;
O otc_stream_has_captions() A função verifica se um stream possui legendas:
otc_bool hasCaptions = otc_stream_has_captions(stream);
Implementar o on_stream_has_captions_changed() função de membro do otc_session_callbacks
Exemplo para monitorar quando as legendas de uma transmissão estão ativadas ou desativadas:
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;
Como receber suas próprias legendas em tempo real
A Video API da Vonage não permite que um emissor receba eventos relativos às suas próprias legendas. Para exibir as legendas do próprio locutor, crie um assinante oculto (no fluxo do emissor local) para monitorar os eventos de legenda. Não exiba a visualização desse assinante na interface do usuário e não se inscreva no áudio dele (para evitar eco). Em seguida, você pode adicionar o texto das legendas à interface do usuário.
Por padrão, o Publisher não publica legendas; portanto, chame o otc_publisher_set_publish_captions() função, passando 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);
Inscreva-se no feed do editor on_publisher_stream_created() função de retorno:
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);
}
}
Conforme mencionado acima, é necessário se inscrever no canal para receber as legendas. (Isso será corrigido em uma versão futura.)
Este exemplo armazena o ID do stream do editor em um selfPublisherStreamId variável, usada aqui para impedir que sua visualização seja adicionada à interface do usuário:
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
}
O assinante independente agora terá seu próprio texto transcrito pelo editor, e isso pode ser obtido na função de retorno de chamada, conforme mostrado abaixo:
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
}
}