Legendas em tempo real — SDK do Vonage Video para iOS
O SDK do OpenTok para iOS inclui métodos para que os clientes iOS 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 configurando o
publishCaptions propriedade do objeto OTPublisherKit:
publisher.publishCaptions = YES;
Se a editora não incluir uma faixa de áudio, o [PublisherKit publisher:didFailWithError:]
a mensagem é enviada, com o code propriedade do conjunto de erros definida como OTPublisherMissingAudioTrack.
O SDK do Vonage para iOS 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 configurando o subscribeToCaptions propriedade
do objeto OTSubscriberKit:
subscriber.subscribeToCaptions = YES;
Você pode chamar esse método 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, defina a propriedade como NO:
subscriber.setSubscribeToCaptions = NO;
O [OTSubscriberKitCaptionsDelegate subscriber:caption:isFinal:] A mensagem é enviada quando um
assinante de um stream recebe legendas:
// OTSubscriber delegate callbacks:
-(void) subscriber:(OTSubscriberKit *)subscriber caption:(NSString *)text isFinal:(BOOL)final {
// Display caption text in UI.
}
Você pode configurar um observador de chave-valor para o hasCaptions propriedade de um OTStream
para verificar quando as legendas do stream estão ativadas ou desativadas:
//add observer on a stream of interest
[_subscriber.stream addObserver:self forKeyPath:@"hasCaptions" options:NSKeyValueObservingOptionNew context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
NSLog(@"KVO change for %@ = %@",keyPath, change);
//manipulate GUI element
}
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, defina o publishCaptions propriedade da editora para TRUE:
_publisher =
[[OTPublisher alloc] initWithDelegate:self
settings:settings];
_publisher.publishCaptions = TRUE;
OTError *error = nil;
[_session publish:_publisher error:&error];
Inscreva-se na transmissão no [OTPublisherKitDelegate publisher:streamCreated:] método:
- (void)publisher:(OTPublisherKit *)publisher
streamCreated:(OTStream *)stream
{
// Self subscribe to our own publisher stream
_subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
_subscriber.subscribeToAudio = false;
_subscriber.subscribeToVideo = true; // This is a workaround for an OpenTok bug.
_subscriber.subscribeToCaptions = true;
_subscriber.captionsDelegate = self;
OTError *error = nil;
[_session subscribe:_subscriber error:&error];
if (error)
{
[self showAlert:[error localizedDescription]];
}
_selfPublisherStreamId = stream.streamId;
}
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:
- (void)subscriberDidConnectToStream:(OTSubscriberKit*)subscriber
{
if ([subscriber.stream.streamId isEqualToString:_selfPublisherStreamId]) {
return; // Don't show the self subscriber view.
}
[_subscriber.view setFrame:CGRectMake(0, widgetHeight, widgetWidth,
widgetHeight)];
[self.view addSubview:_subscriber.view];
}
O assinante tem o texto transcrito (para sua transmissão publicada) no seguinte delegado:
- (void)subscriber:(nonnull OTSubscriberKit*)subscriber
caption:(NSString*_Nonnull)text
isFinal:(BOOL)isFinal {
// Adjust UI to show captions.
if ([subscriber.stream.streamId isEqualToString:_selfPublisherStreamId])
{
// text is your own audio as transcribed text or captions
NSLog(@"My own caption %@", text);
} else {
// other subscribers captions
}
}