Guia de início rápido: adicionar legendas ocultas ao seu aplicativo de chamadas
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure. Salve a cadeia de conexão para este recurso.
- Uma aplicação com chamadas de voz e vídeo, consulte os nossos Inícios rápidos de chamadas de voz e vídeo .
Nota
Observe que você precisará ter um aplicativo de chamada de voz usando SDKs de chamada dos Serviços de Comunicação do Azure para acessar o recurso de legendas ocultas descrito neste guia.
Modelos
Nome | Descrição |
---|---|
CaptionsCallFeature | API para legendas |
LegendasComum | Classe base para legendas |
StartCaptionOptions | Opções de legenda oculta, como idioma falado |
CaptionsHandler | Definição de retorno de chamada para manipular o evento CaptionsReceivedEventType |
LegendasInfo | Estrutura de dados recebida para cada evento CaptionsReceivedEventType |
Obter recurso de legendas ocultas
let captionsCallFeature: SDK.CaptionsCallFeature = call.feature(SDK.Features.Captions);
Obter objeto captions
Você precisa obter e transmitir o objeto Captions para utilizar recursos específicos de Captions.
let captions: SDK.Captions;
if (captionsCallFeature.captions.kind === 'Captions') {
captions = captionsCallFeature.captions as SDK.Captions;
}
Inscreva-se para ouvintes
Adicionar um ouvinte para receber legendas status ativo/inativo
const captionsActiveChangedHandler = () => {
if (captions.isCaptionsFeatureActive) {
/* USER CODE HERE - E.G. RENDER TO DOM */
}
}
captions.on('CaptionsActiveChanged', captionsActiveChangedHandler);
Adicionar um ouvinte para dados de legendas recebidos
Manipule o objeto de dados CaptionsInfo retornado.
Nota: O objeto contém um prop resultType que indica se os dados são uma legenda parcial ou uma versão finalizada da legenda. ResultType Partial
indica legenda ao vivo não editada, enquanto Final
indica uma versão interpretada finalizada da frase (ou seja, inclui pontuação e maiúsculas).
const captionsReceivedHandler : CaptionsHandler = (data: CaptionsInfo) => {
/** USER CODE HERE - E.G. RENDER TO DOM
* data.resultType
* data.speaker
* data.spokenLanguage
* data.spokenText
* data.timeStamp
*/
// Example code:
// Create a dom element, i.e. div, with id "captionArea" before proceeding with the sample code
let mri: string;
switch (data.speaker.identifier.kind) {
case 'communicationUser': { mri = data.speaker.identifier.communicationUserId; break; }
case 'phoneNumber': { mri = data.speaker.identifier.phoneNumber; break; }
}
const outgoingCaption = `prefix${mri.replace(/:/g, '').replace(/-/g, '')}`;
let captionArea = document.getElementById("captionArea");
const captionText = `${data.timestamp.toUTCString()}
${data.speaker.displayName}: ${data.spokenText}`;
let foundCaptionContainer = captionArea.querySelector(`.${outgoingCaption}[isNotFinal='true']`);
if (!foundCaptionContainer) {
let captionContainer = document.createElement('div');
captionContainer.setAttribute('isNotFinal', 'true');
captionContainer.style['borderBottom'] = '1px solid';
captionContainer.style['whiteSpace'] = 'pre-line';
captionContainer.textContent = captionText;
captionContainer.classList.add(outgoingCaption);
captionArea.appendChild(captionContainer);
} else {
foundCaptionContainer.textContent = captionText;
if (captionData.resultType === 'Final') {
foundCaptionContainer.setAttribute('isNotFinal', 'false');
}
}
};
captions.on('CaptionsReceived', captionsReceivedHandler);
Adicionar um ouvinte para receber o status de idioma falado alterado
// set a local variable currentSpokenLanguage to track the current spoken language in the call
let currentSpokenLanguage = ''
const spokenLanguageChangedHandler = () => {
if (captions.activeSpokenLanguage !== currentSpokenLanguage) {
/* USER CODE HERE - E.G. RENDER TO DOM */
}
}
captions.on('SpokenLanguageChanged', spokenLanguageChangedHandler)
Legendas iniciais
Depois de configurar todos os seus ouvintes, você pode começar a adicionar legendas.
try {
await captions.startCaptions({ spokenLanguage: 'en-us' });
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Parar legendas
try {
captions.stopCaptions();
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Cancelar inscrição para ouvintes
captions.off('CaptionsActiveChanged', captionsActiveChangedHandler);
captions.off('CaptionsReceived', captionsReceivedHandler);
Suporte a idiomas falados
Obter uma lista de idiomas falados suportados
Obtenha uma lista de idiomas falados suportados que seus usuários podem selecionar ao ativar legendas ocultas. A propriedade retorna uma matriz de idiomas no formato bcp 47.
const spokenLanguages = captions.supportedSpokenLanguages;
Definir idioma falado
Passe um valor da matriz de idiomas falados suportados para garantir que o idioma solicitado seja suportado. Por padrão, se a contoso não fornecer nenhum idioma ou um idioma sem suporte, o idioma falado assumirá como padrão 'en-us'.
// bcp 47 formatted language code
const language = 'en-us';
// Alternatively, pass a value from the supported spoken languages array
const language = spokenLanguages[0];
try {
captions.setSpokenLanguage(language);
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Adicionar um ouvinte para receber legendas tipo status alterado
O tipo de legendas pode mudar de Captions para TeamsCaptions se um usuário do Teams/CTE ingressar na chamada ou se a chamada mudar para um tipo de chamada de interoperabilidade. É necessária uma nova subscrição dos ouvintes do Teams Captions para continuar a experiência do Captions. O tipo TeamsCaptions não pode ser alternado ou alterado de volta para o tipo Captions em uma chamada depois que TeamsCaptions for utilizado na chamada.
const captionsKindChangedHandler = () => {
/* USER CODE HERE - E.G. SUBSCRIBE TO TEAMS CAPTIONS */
}
captions.on('CaptionsKindChanged', captionsKindChangedHandler)
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure. Salve a cadeia de conexão para este recurso.
- Uma aplicação com chamadas de voz e vídeo, consulte os nossos Inícios rápidos de chamadas de voz e vídeo .
Nota
Observe que você precisará ter um aplicativo de chamada de voz usando SDKs de chamada dos Serviços de Comunicação do Azure para acessar o recurso de legendas ocultas descrito neste guia.
Modelos
Nome | Descrição |
---|---|
CaptionsCallFeature | API para recurso de chamada de legendas |
ComunicaçãoLegendas | API para legendas de comunicação |
StartCaptionOptions | Opções de legenda oculta, como idioma falado |
ComunicaçãoCaptionsReceivedEventArgs | Objeto de dados recebido para cada evento de legendas de comunicação recebidas |
Obter recurso de legendas ocultas
Você precisa obter e transmitir o objeto Captions para utilizar recursos específicos de Captions.
CaptionsCallFeature captionsCallFeature = call.Features.Captions;
CallCaptions callCaptions = await captionsCallFeature.GetCaptionsAsync();
if (callCaptions.CaptionsKind == CaptionsKind.CommunicationCaptions)
{
CommunicationCaptions communicationCaptions = callCaptions as CommunicationCaptions;
}
Inscreva-se para ouvintes
Adicionar um ouvinte para receber legendas ativadas/desativadas
communicationCaptions.CaptionsEnabledChanged += OnIsCaptionsEnabledChanged;
private void OnIsCaptionsEnabledChanged(object sender, PropertyChangedEventArgs args)
{
if (communicationCaptions.IsEnabled)
{
}
}
Adicionar um ouvinte para receber legendas tipo alterado
Esse evento será acionado quando o tipo de legenda mudar de para TeamsCaptions
ao convidar usuários do CommunicationCaptions
Microsoft 365 para chamadas somente ACS.
captionsCallFeature.ActiveCaptionsTypeChanged += OnIsCaptionsTypeChanged;
private void OnIsCaptionsTypeChanged(object sender, PropertyChangedEventArgs args)
{
// get captions
}
Adicionar ouvinte para dados de legendas recebidos
communicationCaptions.CaptionsReceived += OnCaptionsReceived;
private void OnCaptionsReceived(object sender, CommunicationCaptionsReceivedEventArgs eventArgs)
{
// Information about the speaker.
// eventArgs.Speaker
// The original text with no transcribed.
// eventArgs.SpokenText
// language identifier for the speaker.
// eventArgs.SpokenLanguage
// Timestamp denoting the time when the corresponding speech was made.
// eventArgs.Timestamp
// CaptionsResultKind is Partial if text contains partially spoken sentence.
// It is set to Final once the sentence has been completely transcribed.
// eventArgs.ResultKind
}
Adicionar um ouvinte para receber o status alterado do idioma falado ativo
communicationCaptions.ActiveSpokenLanguageChanged += OnIsActiveSpokenLanguageChanged;
private void OnIsActiveSpokenLanguageChanged(object sender, PropertyChangedEventArgs args)
{
// communicationCaptions.ActiveSpokenLanguage
}
Legendas iniciais
Depois de configurar todos os ouvintes, você pode começar a adicionar legendas.
private async void StartCaptions()
{
var options = new StartCaptionsOptions
{
SpokenLanguage = "en-us"
};
try
{
await communicationCaptions.StartCaptionsAsync(options);
}
catch (Exception ex)
{
}
}
Parar legendas
private async void StopCaptions()
{
try
{
await communicationCaptions.StopCaptionsAsync();
}
catch (Exception ex)
{
}
}
Remover a legenda recebida ouvinte
communicationCaptions.CaptionsReceived -= OnCaptionsReceived;
Suporte a idiomas falados
Obter lista de idiomas falados suportados
Obtenha uma lista de idiomas falados suportados que seus usuários podem selecionar ao ativar legendas ocultas.
// bcp 47 formatted language code
IReadOnlyList<string> sLanguages = communicationCaptions.SupportedSpokenLanguages;```
### Set spoken language
When the user selects the spoken language, your app can set the spoken language that it expects captions to be generated from.
``` cs
public async void SetSpokenLanguage()
{
try
{
await communicationCaptions.SetSpokenLanguageAsync("en-us");
}
catch (Exception ex)
{
}
}
Limpeza
Saiba mais sobre a limpeza de recursos aqui.
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure. Salve a cadeia de conexão para este recurso.
- Uma aplicação com chamadas de voz e vídeo, consulte os nossos Inícios rápidos de chamadas de voz e vídeo .
Nota
Observe que você precisará ter um aplicativo de chamada de voz usando SDKs de chamada dos Serviços de Comunicação do Azure para acessar o recurso de legendas ocultas descrito neste guia.
Modelos
Nome | Descrição |
---|---|
CaptionsCallFeature | API para recurso de chamada de legendas |
ComunicaçãoLegendas | API para legendas de comunicação |
StartCaptionOptions | Opções de legenda oculta, como idioma falado |
ComunicaçãoLegendasOuvinte | Ouvinte para CommunicationCaptions addCaptionsReceivedListener |
ComunicaçãoCaptionsReceivedEvent | Objeto de dados recebido para cada evento CommunicationCaptionsListener |
Obter recurso de legendas ocultas
Você precisa obter e transmitir o objeto Captions para utilizar recursos específicos de Captions.
CaptionsCallFeature captionsCallFeature = call.feature(Features.CAPTIONS);
captionsCallFeature.getCaptions().whenComplete(
((captions, throwable) -> {
if (throwable == null) {
CallCaptions callCaptions = captions;
if (captions.getCaptionsType() == CaptionsType.COMMUNICATION_CAPTIONS) {
// communication captions
CommunicationCaptions communicationCaptions = (CommunicationCaptions) captions;
}
} else {
// get captions failed
// throwable is the exception/cause
}
}));
Inscreva-se para ouvintes
Adicionar um ouvinte para receber legendas ativadas/desativadas
public void addOnIsCaptionsEnabledChangedListener() {
communicationCaptions.addOnCaptionsEnabledChangedListener( (PropertyChangedEvent args) -> {
if(communicationCaptions.isEnabled()) {
// captions enabled
}
});
}
Adicionar um ouvinte para receber legendas tipo alterado
Esse evento será acionado quando o tipo de legenda mudar de para TeamsCaptions
ao convidar usuários do CommunicationCaptions
Microsoft 365 para chamadas somente ACS.
public void addOnIsCaptionsTypeChangedListener() {
captionsCallFeature.addOnActiveCaptionsTypeChangedListener( (PropertyChangedEvent args) -> {
if(communicationCaptions.isEnabled()) {
// captionsCallFeature.getCaptions();
}
});
}
Adicionar ouvinte para dados de legendas recebidos
CommunicationCaptionsListener captionsListener = (CommunicationCaptionsReceivedEvent args) -> {
// Information about the speaker.
// CallerInfo participantInfo = args.getSpeaker();
// The original text with no transcribed.
// args.getSpokenText();
// language identifier for the speaker.
// args.getSpokenLanguage();
// Timestamp denoting the time when the corresponding speech was made.
// args.getTimestamp();
// CaptionsResultType is Partial if text contains partially spoken sentence.
// It is set to Final once the sentence has been completely transcribed.
// args.getResultType() == CaptionsResultType.FINAL;
};
public void addOnCaptionsReceivedListener() {
communicationCaptions.addOnCaptionsReceivedListener(captionsListener);
}
Adicionar um ouvinte para receber o status alterado do idioma falado ativo
public void addOnActiveSpokenLanguageChangedListener() {
communicationCaptions.addOnActiveSpokenLanguageChangedListener( (PropertyChangedEvent args) -> {
// communicationCaptions.getActiveSpokenLanguage()
});
}
Legendas iniciais
Depois de configurar todos os ouvintes, você pode começar a adicionar legendas.
public void startCaptions() {
StartCaptionsOptions startCaptionsOptions = new StartCaptionsOptions();
startCaptionsOptions.setSpokenLanguage("en-us");
communicationCaptions.startCaptions(startCaptionsOptions).whenComplete((result, error) -> {
if (error != null) {
}
});
}
Parar legendas
public void stopCaptions() {
communicationCaptions.stopCaptions().whenComplete((result, error) -> {
if (error != null) {
}
});
}
Remover a legenda recebida ouvinte
public void removeOnCaptionsReceivedListener() {
communicationCaptions.removeOnCaptionsReceivedListener(captionsListener);
}
Suporte a idiomas falados
Obter lista de idiomas falados suportados
Obtenha uma lista de idiomas falados suportados que seus usuários podem selecionar ao ativar legendas ocultas.
// bcp 47 formatted language code
communicationCaptions.getSupportedSpokenLanguages();
Definir idioma falado
Quando o usuário seleciona o idioma falado, seu aplicativo pode definir o idioma falado a partir do qual espera que as legendas sejam geradas.
public void setSpokenLanguage() {
communicationCaptions.setSpokenLanguage("en-us").whenComplete((result, error) -> {
if (error != null) {
}
});
}
Limpeza
Saiba mais sobre a limpeza de recursos aqui.
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure. Salve a cadeia de conexão para este recurso.
- Uma aplicação com chamadas de voz e vídeo, consulte os nossos Inícios rápidos de chamadas de voz e vídeo .
Nota
Observe que você precisará ter um aplicativo de chamada de voz usando SDKs de chamada dos Serviços de Comunicação do Azure para acessar o recurso de legendas ocultas descrito neste guia.
Modelos
Nome | Descrição |
---|---|
CaptionsCallFeature | API para recurso de chamada de legendas |
ComunicaçãoLegendas | API para legendas de comunicação |
StartCaptionOptions | Opções de legenda oculta, como idioma falado |
ComunicaçãoLegendasDelegado | Delegado para legendas de comunicação |
ComunicaçãoCaptionsReceivedEventArgs | Objeto de dados recebido para cada evento de legendas de comunicação recebidas |
Obter recurso de legendas ocultas
Você precisa obter e transmitir o objeto Captions para utilizar recursos específicos de Captions.
if let call = self.call {
@State var captionsCallFeature = call.feature(Features.captions)
captionsCallFeature.getCaptions{(value, error) in
if let error = error {
// failed to get captions
} else {
if (value?.type == CaptionsType.communicationCaptions) {
// communication captions
@State var communicationCaptions = value as? CommunicationCaptions
}
}
}
}
Inscreva-se para ouvintes
Adicionar um ouvinte para receber legendas ativadas/desativadas, tipo, idioma falado, status do idioma da legenda alterado e dados recebidos
O evento didChangeActiveCaptionsType
será acionado quando o tipo de legenda mudar de para TeamsCaptions
ao convidar usuários do CommunicationCaptions
Microsoft 365 para chamadas somente ACS.
extension CallObserver: CommunicationCaptionsDelegate {
// listener for receive captions enabled/disabled status
public func communicationCaptions(_ communicationCaptions: CommunicationCaptions, didChangeCaptionsEnabledState args: PropertyChangedEventArgs) {
// communicationCaptions.isEnabled
}
// listener for active spoken language state change
public func communicationCaptions(_ communicationCaptions: CommunicationCaptions, didChangeActiveSpokenLanguageState args: PropertyChangedEventArgs) {
// communicationCaptions.activeSpokenLanguage
}
// listener for captions data received
public func communicationCaptions(_ communicationCaptions: CommunicationCaptions, didReceiveCaptions:CommunicationCaptionsReceivedEventArgs) {
// Information about the speaker.
// didReceiveCaptions.speaker
// The original text with no transcribed.
// didReceiveCaptions.spokenText
// language identifier for the speaker.
// didReceiveCaptions.spokenLanguage
// Timestamp denoting the time when the corresponding speech was made.
// didReceiveCaptions.timestamp
// CaptionsResultType is Partial if text contains partially spoken sentence.
// It is set to Final once the sentence has been completely transcribed.
// didReceiveCaptions.resultType
}
}
communicationCaptions.delegate = self.callObserver
extension CallObserver: CaptionsCallFeatureDelegate {
// captions type changed
public func captionsCallFeature(_ captionsCallFeature: CaptionsCallFeature, didChangeActiveCaptionsType args: PropertyChangedEventArgs) {
// captionsCallFeature.getCaptions to get captions
}
}
captionsCallFeature.delegate = self.callObserver
Legendas iniciais
Depois de configurar todos os ouvintes, você pode começar a adicionar legendas.
func startCaptions() {
guard let communicationCaptions = communicationCaptions else {
return
}
let startCaptionsOptions = StartCaptionsOptions()
startCaptionsOptions.spokenLanguage = "en-us"
communicationCaptions.startCaptions(startCaptionsOptions: startCaptionsOptions, completionHandler: { (error) in
if error != nil {
}
})
}
Parar legendas
func stopCaptions() {
communicationCaptions.stopCaptions(completionHandler: { (error) in
if error != nil {
}
})
}
Remover a legenda recebida ouvinte
communicationCaptions?.delegate = nil
Suporte a idiomas falados
Obter lista de idiomas falados suportados
Obtenha uma lista de idiomas falados suportados que seus usuários podem selecionar ao ativar legendas ocultas.
// bcp 47 formatted language code
let spokenLanguage : String = "en-us"
for language in communicationCaptions?.supportedSpokenLanguages ?? [] {
// choose required language
spokenLanguage = language
}
Definir idioma falado
Quando o usuário seleciona o idioma falado, seu aplicativo pode definir o idioma falado a partir do qual espera que as legendas sejam geradas.
func setSpokenLanguage() {
guard let communicationCaptions = self.communicationCaptions else {
return
}
communicationCaptions.set(spokenLanguage: spokenLanguage, completionHandler: { (error) in
if let error = error {
}
})
}
Limpeza
Saiba mais sobre a limpeza de recursos aqui.
Clean up resources (Limpar recursos)
Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, você pode excluir o recurso ou grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele. Saiba mais sobre a limpeza de recursos.
Próximos passos
Para obter mais informações, consulte os seguintes artigos:
- Saiba mais sobre como usar legendas ocultas em cenários de interoperabilidade do Teams.
- Confira nosso exemplo de chamada pela web
- Saiba mais sobre os recursos do SDK de chamada
- Saiba mais sobre como as chamadas funcionam