Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
Esta funcionalidade dos Serviços de Comunicação do Azure está atualmente em pré-visualização. Os recursos na visualização estão disponíveis publicamente e podem ser usados por todos os clientes novos e existentes da Microsoft.
Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Determinadas funcionalidades podem não ser suportadas ou recursos podem ser restringidos.
Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
A gravação de chamadas permite que seus usuários gravem chamadas que eles fazem com os Serviços de Comunicação do Azure. Neste artigo, você aprenderá a gerenciar a gravação no lado do cliente. Antes de começar, você precisa configurar a gravação no lado do servidor.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Um recurso de Serviços de Comunicação implantado. Crie um recurso de Serviços de Comunicação.
- Um token de acesso de usuário para autorizar o cliente que faz a chamada. Para obter mais informações, consulte Criar e gerenciar tokens de acesso.
- Opcional: conclusão do início rápido para adicionar chamadas de voz ao seu aplicativo.
Suporte
As tabelas a seguir definem o suporte à gravação nos Serviços de Comunicação do Azure.
Identidades e tipos de chamada
As tabelas a seguir mostram o suporte de gravação para tipo de chamada e identidade específicos.
| Identidades | Reunião de equipas | Sala | Chamada 1:1 | Chamada em grupo | Chamada de interoperabilidade 1:1 das equipas | Chamada de interoperabilidade de equipas de grupo |
|---|---|---|---|---|---|---|
| Utilizador dos Serviços de Comunicação | ✔️ [1][2] | ✔️ [3] | ✔️ [3] | ✔️ [2][3] | ||
| Utilizador do Microsoft 365 | ✔️ [1][2] | ✔️ [2][3] |
[1] Estes tipos de chamada suportam a nuvem do Teams.
[2] Esses tipos de chamada suportam o registro de conformidade do Teams.
[3] Estes tipos de chamada suportam a gravação dos Serviços de Comunicação do Azure.
Operações
As tabelas a seguir mostram o suporte de APIs individuais na chamada do SDK para tipos de identidade individuais.
| Operações | Utilizador dos Serviços de Comunicação | Utilizador do Microsoft 365 |
|---|---|---|
| Receber notificação de que a gravação começou ou parou | ✔️ | ✔️ |
| Obter estado de gravação | ✔️ | ✔️ |
| Receber notificação de que a gravação está disponível | ✔️ [1] | ✔️ [1] |
| Saiba se é necessário consentimento explícito | ✔️ [2] | ✔️ [2] |
| Dar consentimento explícito para ser gravado | ✔️ [2] | ✔️ [2] |
[1] Um utilizador não é notificado de que a gravação está disponível. Pode subscrever as notificações de alteração do Microsoft Graph para receber notificações sobre a disponibilidade da gravação em nuvem do Teams, ou pode subscrever o evento Microsoft.Communication.RecordingFileStatusUpdated nos Serviços de Comunicação do Azure para ser notificado quando a gravação dos Serviços de Comunicação do Azure estiver disponível.
[2] Esta funcionalidade está disponível apenas em reuniões do Teams e chamadas de interoperabilidade do Teams em grupo.
SDKs
As tabelas a seguir mostram o suporte à gravação em SDKs individuais dos Serviços de Comunicação do Azure.
| Plataformas | Web | IU da Web | iOS | Interface do usuário do iOS | Android | Interface do usuário do Android | Mac OS |
|---|---|---|---|---|---|---|---|
| É suportado | ✔️ | ✔️ [1] | ✔️ [1] | ✔️ [1] | ✔️ [1] | ✔️ [1] | ✔️ [1] |
[1] Estes SDKs não suportam consentimento explícito.
Instale o SDK
Use o comando npm install para instalar o SDK Comum e de Chamada dos Serviços de Comunicação do Azure para JavaScript.
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
Inicializar objetos necessários
Uma CallClient instância é necessária para a maioria das operações de chamada. Ao criar uma nova CallClient instância, você pode configurá-la com opções personalizadas, como uma Logger instância.
Com a instância CallClient, podes criar uma instância CallAgent chamando o createCallAgent. Esse método retorna de forma assíncrona um objeto de CallAgent instância.
O createCallAgent método usa CommunicationTokenCredential como argumento. Ele aceita um token de acesso de usuário.
Você pode usar o getDeviceManager na instância CallClient para acessar deviceManager.
const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");
// Set the logger's log level
setLogLevel('verbose');
// Redirect log output to console, file, buffer, REST API, or whatever location you want
AzureLogger.log = (...args) => {
console.log(...args); // Redirect log output to console
};
const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()
Gerenciar a conectividade do SDK com a infraestrutura da Microsoft
A Call Agent instância ajuda você a gerenciar chamadas (para ingressar ou iniciar chamadas). Para funcionar, seu SDK de chamada precisa se conectar à infraestrutura da Microsoft para receber notificações de chamadas recebidas e coordenar outros detalhes da chamada. O seu Call Agent tem dois estados possíveis:
Conectado - Um Call Agent valor connectionStatue significa que o SDK do Connected cliente está conectado e é capaz de receber notificações da infraestrutura da Microsoft.
Desconectado - Um valor Call Agent connectionStatue de Disconnected indica que há um problema que está impedindo o SDK de se conectar corretamente.
Call Agent deve ser recriado.
-
invalidToken: Se um token expirou ou é inválidoCall Agent, a instância se desconecta com esse erro. -
connectionIssue: Se houver um problema com o cliente se conectando à infraestrutura da Microsoft, depois de muitas novas tentativasCall Agentexpõe o erroconnectionIssue.
Você pode verificar se seu local Call Agent está conectado à infraestrutura da Microsoft inspecionando o valor atual da connectionState propriedade. Durante uma chamada ativa, você pode ouvir o connectionStateChanged evento para determinar se Call Agent muda do estado Conectado para Desconectado.
const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'
const connectionStateCallback = (args) => {
console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
// it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);
Nota
Esta API é fornecida como uma pré-visualização para programadores e pode mudar com base nos comentários que recebemos. Não use essa API em um ambiente de produção. Para usar essa API, use a versão beta do SDK da Web de Chamada dos Serviços de Comunicação do Azure.
Registo de nuvem e conformidade
A gravação de chamadas é um recurso estendido da API de chamada principal. Primeiro, você precisa importar recursos de chamada do SDK de chamada:
import { Features} from "@azure/communication-calling";
Em seguida, você pode obter o objeto API dos recursos de gravação da instância de chamada:
const callRecordingApi = call.feature(Features.Recording);
Para verificar se a chamada está sendo gravada, inspecione a isRecordingActive propriedade de callRecordingApi. Ele retorna Boolean.
const isRecordingActive = callRecordingApi.isRecordingActive;
Também pode inscrever-se para registar alterações:
const isRecordingActiveChangedHandler = () => {
console.log(callRecordingApi.isRecordingActive);
};
callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);
Você pode obter uma lista de gravações usando a recordings propriedade de callRecordingApi. Ele retorna RecordingInfo[], que tem o estado atual da gravação na nuvem.
const recordings = callRecordingApi.recordings;
recordings.forEach(r => {
console.log("State: ${r.state}");
Você também pode se inscrever recordingsUpdated e obter uma coleção de gravações atualizadas. Este evento é ativado sempre que há uma atualização de gravação.
const cloudRecordingsUpdatedHandler = (args: { added: SDK.RecordingInfo[], removed: SDK.RecordingInfo[]}) => {
console.log('Recording started by: ');
args.added?.forEach(a => {
console.log('State: ${a.state}');
});
console.log('Recording stopped by: ');
args.removed?.forEach(r => {
console.log('State: ${r.state}');
});
};
callRecordingApi.on('recordingsUpdated', cloudRecordingsUpdatedHandler );
Consentimento explícito
Quando sua reunião ou chamada do Teams é configurada para exigir consentimento explícito para gravação e transcrição, é necessário coletar o consentimento de todos os participantes da chamada antes de gravá-los. Você pode fornecer consentimento de forma proativa ao ingressar na reunião ou reativamente quando a gravação for iniciada. Até que o consentimento explícito seja dado, o áudio, o vídeo e o compartilhamento de tela dos participantes serão desativados durante a gravação.
Você pode verificar se a gravação da reunião requer consentimento explícito através da propriedade isTeamsConsentRequired. Se o valor for definido como true, é necessário o consentimento explícito para o call.
const isConsentRequired = callRecordingApi.isTeamsConsentRequired;
Se você já obteve o consentimento do usuário para gravação, você pode chamar grantTeamsConsent() o método para indicar consentimento explícito para o serviço. Esse consentimento é válido apenas para uma call sessão e os usuários precisam fornecer consentimento novamente se voltarem a participar da reunião.
callRecordingApi.grantTeamsConsent();
As tentativas de ativar o compartilhamento de áudio, vídeo ou tela falham quando a gravação está ativa, o consentimento explícito é necessário, mas ainda não foi dado. Você pode reconhecer essa situação verificando a propriedade reason da classe ParticipantCapabilities para as capacidadesturnVideoOn, unmuteMic e shareScreen. Você pode encontrar esses recursos no recurso call.feature(Features.Capabilities). Esses recursos retornariam a razão ExplicitConsentRequired , pois os usuários precisam fornecer consentimento explícito.
Instale o SDK
Localize seu arquivo no nível build.gradle do projeto e adicione mavenCentral() à lista de repositórios em buildscript e allprojects:
buildscript {
repositories {
...
mavenCentral()
...
}
}
allprojects {
repositories {
...
mavenCentral()
...
}
}
Em seguida, no arquivo de nível de módulo build.gradle, adicione as seguintes linhas à seção dependencies:
dependencies {
...
implementation 'com.azure.android:azure-communication-calling:1.0.0'
...
}
Inicializar os objetos necessários
Para criar uma CallAgent instância, você precisa chamar o createCallAgent método em uma CallClient instância. Esta chamada retorna de forma assíncrona um objeto de instância CallAgent.
O createCallAgent método toma CommunicationUserCredential como um argumento, que encapsula um token de acesso.
Para aceder DeviceManager, deve primeiro criar uma instância de callAgent. Então você pode usar o CallClient.getDeviceManager método para obter DeviceManager.
String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
Para definir um nome de exibição para o chamador, use este método alternativo:
String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an activity, for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();
Gravar chamadas
Nota
Esta API é fornecida como uma pré-visualização para programadores e pode mudar com base nos comentários que recebemos. Não use essa API em um ambiente de produção. Para usar essa API, use a versão beta do SDK do Azure Communication Services Calling Android.
A gravação de chamadas é um recurso estendido do objeto principal Call .
Aviso
Até a versão 1.1.0 e a versão beta 1.1.0-beta.1 do SDK do Azure Communication Services Calling Android faziam isRecordingActiveaddOnIsRecordingActiveChangedListener parte do Call objeto. Para novas versões beta, essas APIs foram transferidas como uma funcionalidade ampliada do Call.
Primeiro, você precisa obter o objeto de recurso de gravação:
RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);
Em seguida, para verificar se a chamada está sendo gravada, inspecione a isRecordingActive propriedade de callRecordingFeature. Ele retorna boolean.
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
Também pode inscrever-se para registar alterações:
private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}
callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);
Se você quiser começar a gravar a partir do seu aplicativo, primeiro siga a visão geral da gravação de chamadas para as etapas para configurar a gravação de chamadas.
Depois de configurar a gravação de chamadas no seu servidor, a partir do seu aplicativo Android, você precisa obter o ServerCallId valor da chamada e, em seguida, enviá-lo para o seu servidor para iniciar o processo de gravação. Você pode encontrar o valor ServerCallId usando getServerCallId() da classe CallInfo. Você pode encontrar a CallInfo classe no objeto de classe usando getInfo().
try {
String serverCallId = call.getInfo().getServerCallId().get();
// Send serverCallId to your recording server to start the call recording.
} catch (ExecutionException | InterruptedException e) {
} catch (UnsupportedOperationException unsupportedOperationException) {
}
Quando você inicia a gravação a partir do servidor, o evento handleCallOnIsRecordingChanged é acionado e o valor de callRecordingFeature.isRecordingActive() é true.
Assim como iniciar a gravação da chamada, se você quiser parar a gravação da chamada, você precisa obter ServerCallId e enviá-lo para o seu servidor de gravação para que ele possa parar a gravação:
try {
String serverCallId = call.getInfo().getServerCallId().get();
// Send serverCallId to your recording server to stop the call recording.
} catch (ExecutionException | InterruptedException e) {
} catch (UnsupportedOperationException unsupportedOperationException) {
}
Quando você para de gravar a partir do servidor, o evento handleCallOnIsRecordingChanged é acionado e o valor de callRecordingFeature.isRecordingActive() é false.
Consentimento explícito
Nota
Esta API é fornecida como uma pré-visualização para programadores e pode mudar com base nos comentários que recebemos. Não use essa API em um ambiente de produção. Para usar essa API, use a versão beta do SDK do Azure Communication Services Calling Android.
Quando sua reunião ou chamada do Teams é configurada para exigir consentimento explícito para gravação e transcrição, é necessário coletar o consentimento de todos os participantes da chamada antes de gravá-los. Você pode fornecer consentimento de forma proativa ao ingressar na reunião ou reativamente quando a gravação for iniciada. Até que o consentimento explícito seja dado, o áudio, o vídeo e o compartilhamento de tela dos participantes serão desativados durante a gravação.
Você pode verificar se a gravação da reunião requer consentimento explícito através da propriedade isTeamsConsentRequired. Se o valor for definido como true, é necessário o consentimento explícito para o call.
boolean isConsentRequired = callRecordingFeature.isTeamsConsentRequired();
Se você já obteve o consentimento do usuário para gravação, você pode chamar grantTeamsConsent() o método para indicar consentimento explícito para o serviço. Esse consentimento é válido apenas para uma call sessão e os usuários precisam fornecer consentimento novamente se voltarem a participar da reunião.
callRecordingFeature.grantTeamsConsent();
As tentativas de ativar o compartilhamento de áudio, vídeo ou tela falham quando a gravação está ativa, o consentimento explícito é necessário, mas ainda não foi dado. Você pode reconhecer essa situação verificando a propriedade reason da classe ParticipantCapabilities para as capacidadesturnVideoOn, unmuteMic e shareScreen. Você pode encontrar esses recursos no recurso call.feature(Features.Capabilities). Esses recursos retornariam a razão ExplicitConsentRequired , pois os usuários precisam fornecer consentimento explícito.
Configure o seu sistema
Siga estes passos para configurar o seu sistema.
Criar o projeto Xcode
No Xcode, crie um novo projeto iOS e selecione o modelo Single View App . Este artigo usa a estrutura SwiftUI, portanto, você deve definir Language como Swift e Interfacecomo SwiftUI.
Você não vai criar testes neste artigo. Sinta-se à vontade para desmarcar a opção Incluir Testes.
Instale o pacote e as dependências usando o CocoaPods
Crie um Podfile para seu aplicativo, como este exemplo:
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' endExecute
pod install.Abra
.xcworkspaceusando o Xcode.
Solicitar acesso ao microfone
Para acessar o microfone do dispositivo, você precisa atualizar a lista de propriedades de informações do seu aplicativo usando NSMicrophoneUsageDescription. Defina o valor associado para uma cadeia de caracteres incluída na caixa de diálogo que o sistema usa para solicitar acesso do usuário.
Clique com o botão direito do mouse na entrada Info.plist da árvore do projeto e selecione Abrir como>código-fonte. Adicione as seguintes linhas na secção de nível <dict> superior e, em seguida, guarde o ficheiro.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
Configurar a estrutura do aplicativo
Abra o arquivo ContentView.swift do seu projeto. Adicione uma import declaração à parte superior do arquivo para importar a AzureCommunicationCalling biblioteca. Além disso, importe AVFoundation. Você precisa dele para solicitações de permissão de áudio no código.
import AzureCommunicationCalling
import AVFoundation
Inicializar CallAgent
Para criar uma CallAgent instância a partir do CallClient, você precisa usar um callClient.createCallAgent método que retorna de forma assíncrona um CallAgent objeto depois que ele é inicializado.
Para criar um cliente de chamada, passe um CommunicationTokenCredential objeto:
import AzureCommunication
let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
updates("Couldn't created Credential object", false)
initializationDispatchGroup!.leave()
return
}
// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
let newToken = self.tokenProvider!.fetchNewToken()
onCompletion(newToken, nil)
}
Passe o CommunicationTokenCredential objeto que você criou para CallCliente defina o nome para exibição:
self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"
self.callClient!.createCallAgent(userCredential: userCredential!,
options: callAgentOptions) { (callAgent, error) in
if error == nil {
print("Create agent succeeded")
self.callAgent = callAgent
} else {
print("Create agent failed")
}
})
Gravar chamadas
Nota
Esta API é fornecida como uma pré-visualização para programadores e pode mudar com base nos comentários que recebemos. Não use essa API em um ambiente de produção. Para utilizar esta API, utilize a versão beta do SDK de Chamada dos Serviços de Comunicação do Azure para iOS.
A gravação de chamadas é um recurso estendido do objeto principal Call .
Aviso
Até a versão 1.1.0 e a versão beta 1.1.0-beta.1 do SDK do Azure Communication Services Calling iOS, isRecordingActive fazia parte do Call objecto e didChangeRecordingState fazia parte do CallDelegate delegate. Para novas versões beta, essas APIs foram transferidas como uma funcionalidade ampliada do Call.
Primeiro, você precisa obter o objeto de recurso de gravação:
let callRecordingFeature = call.feature(Features.recording)
Em seguida, para verificar se a chamada está sendo gravada, inspecione a isRecordingActive propriedade de callRecordingFeature. Ele retorna Bool.
let isRecordingActive = callRecordingFeature.isRecordingActive;
Você também pode subscrever-se para registar alterações ao implementar o delegado RecordingCallFeatureDelegate na sua classe com o evento didChangeRecordingState:
callRecordingFeature.delegate = self
// didChangeRecordingState is a member of RecordingCallFeatureDelegate
public func recordingCallFeature(_ recordingCallFeature: RecordingCallFeature, didChangeRecordingState args: PropertyChangedEventArgs) {
let isRecordingActive = recordingFeature.isRecordingActive
}
Se você quiser começar a gravar a partir do seu aplicativo, primeiro siga a visão geral da gravação de chamadas para as etapas para configurar a gravação de chamadas.
Depois de configurar a gravação de chamadas no seu servidor, a partir do seu aplicativo iOS, você precisa obter o ServerCallId valor da chamada e, em seguida, enviá-lo para o seu servidor para iniciar o processo de gravação. Você pode encontrar o valor ServerCallId usando getServerCallId() da classe CallInfo. Você pode encontrar a CallInfo classe no objeto de classe usando getInfo().
// Send serverCallId to your recording server to start the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }
Quando você inicia a gravação a partir do servidor, o evento didChangeRecordingState é acionado e o valor de recordingFeature.isRecordingActive é true.
Assim como iniciar a gravação da chamada, se você quiser parar a gravação da chamada, você precisa obter ServerCallId e enviá-lo para o seu servidor de gravação para que ele possa parar a gravação:
// Send serverCallId to your recording server to stop the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }
Quando você para de gravar a partir do servidor, o evento didChangeRecordingState é acionado e o valor de recordingFeature.isRecordingActive é false.
Consentimento explícito
Nota
Esta API é fornecida como uma pré-visualização para programadores e pode mudar com base nos comentários que recebemos. Não use essa API em um ambiente de produção. Para utilizar esta API, utilize a versão beta do SDK de Chamada dos Serviços de Comunicação do Azure para iOS.
Quando sua reunião ou chamada do Teams é configurada para exigir consentimento explícito para gravação e transcrição, é necessário coletar o consentimento de todos os participantes da chamada antes de gravá-los. Você pode fornecer consentimento de forma proativa ao ingressar na reunião ou reativamente quando a gravação for iniciada. Até que o consentimento explícito seja dado, o áudio, o vídeo e o compartilhamento de tela dos participantes serão desativados durante a gravação.
Você pode verificar se a gravação da reunião requer consentimento explícito através da propriedade isTeamsConsentRequired. Se o valor for definido como true, é necessário o consentimento explícito para o call.
let isConsentRequired = recordingFeature.isTeamsConsentRequired;
Se você já obteve o consentimento do usuário para gravação, você pode chamar grantTeamsConsent() o método para indicar consentimento explícito para o serviço. Esse consentimento é válido apenas para uma call sessão e os usuários precisam fornecer consentimento novamente se voltarem a participar da reunião.
recordingFeature.grantTeamsConsent();
As tentativas de ativar o compartilhamento de áudio, vídeo ou tela falham quando a gravação está ativa, o consentimento explícito é necessário, mas ainda não foi dado. Você pode reconhecer essa situação verificando a propriedade reason da classe ParticipantCapabilities para as capacidadesturnVideoOn, unmuteMic e shareScreen. Você pode encontrar esses recursos no recurso call.feature(Features.Capabilities). Esses recursos retornariam a razão ExplicitConsentRequired , pois os usuários precisam fornecer consentimento explícito.
Configure o seu sistema
Siga estes passos para configurar o seu sistema.
Criar o projeto do Visual Studio
Para uma aplicação da Plataforma Universal do Windows, no Visual Studio 2022, crie um novo projeto Aplicação em Branco (Windows Universal). Depois de inserir o nome do projeto, sinta-se à vontade para escolher qualquer SDK do Windows posterior a 10.0.17763.0.
Para uma aplicação WinUI 3, crie um novo projeto com o modelo Aplicação em branco, empacotada (WinUI 3 na área de trabalho) para configurar uma aplicação WinUI 3 de página única. É necessário o SDK de Aplicativos Windows versão 1.3 ou posterior.
Instalar o pacote e as dependências usando o Gerenciador de Pacotes NuGet
As APIs e bibliotecas do SDK de chamada estão disponíveis publicamente por meio de um pacote NuGet.
Para localizar, descarregar e instalar o pacote NuGet do SDK de chamadas:
- Abra o Gerenciador de Pacotes NuGet selecionando Ferramentas>Gerenciador de Pacotes NuGet>Gerenciar Pacotes NuGet para Solução.
- Selecione Procurar e digite Azure.Communication.Calling.WindowsClient na caixa de pesquisa.
- Verifique se a caixa de seleção Incluir pré-lançamento está marcada.
- Selecione o pacote Azure.Communication.Calling.WindowsClient e, em seguida, selecione Azure.Communication.Calling.WindowsClient1.4.0-beta.1 ou uma versão mais recente.
- Marque a caixa de seleção que corresponde ao projeto dos Serviços de Comunicação do Azure no painel direito.
- Selecione Instalar.
Gravar chamadas
A gravação de chamadas é um recurso estendido do objeto principal Call . Primeiro, você precisa obter o objeto de recurso de gravação:
RecordingCallFeature recordingFeature = call.Features.Recording;
Em seguida, para verificar se a chamada está sendo gravada, inspecione a IsRecordingActive propriedade de recordingFeature. Ele retorna boolean.
boolean isRecordingActive = recordingFeature.IsRecordingActive;
Também pode inscrever-se para registar alterações:
private async void Call__OnIsRecordingActiveChanged(object sender, PropertyChangedEventArgs args)
boolean isRecordingActive = recordingFeature.IsRecordingActive;
}
recordingFeature.IsRecordingActiveChanged += Call__OnIsRecordingActiveChanged;
Consentimento explícito
Nota
Esta API é fornecida como uma pré-visualização para programadores e pode mudar com base nos comentários que recebemos. Não use essa API em um ambiente de produção. Para utilizar esta API, use a versão beta do SDK de Chamadas dos Serviços de Comunicação do Azure para Windows.
Quando sua reunião ou chamada do Teams é configurada para exigir consentimento explícito para gravação e transcrição, é necessário coletar o consentimento de todos os participantes da chamada antes de gravá-los. Você pode fornecer consentimento de forma proativa ao ingressar na reunião ou reativamente quando a gravação for iniciada. Até que o consentimento explícito seja dado, o áudio, o vídeo e o compartilhamento de tela dos participantes serão desativados durante a gravação.
Você pode verificar se a gravação da reunião requer consentimento explícito através da propriedade isTeamsConsentRequired. Se o valor for definido como true, é necessário o consentimento explícito para o call.
boolean isConsentRequired = recordingFeature.isTeamsConsentRequired;
Se você já obteve o consentimento do usuário para gravação, você pode chamar grantTeamsConsent() o método para indicar consentimento explícito para o serviço. Esse consentimento é válido apenas para uma call sessão e os usuários precisam fornecer consentimento novamente se voltarem a participar da reunião.
recordingFeature.grantTeamsConsent();
As tentativas de ativar o compartilhamento de áudio, vídeo ou tela falham quando a gravação está ativa, o consentimento explícito é necessário, mas ainda não foi dado. Você pode reconhecer essa situação verificando a propriedade reason da classe ParticipantCapabilities para as capacidadesturnVideoOn, unmuteMic e shareScreen. Você pode encontrar esses recursos no recurso call.feature(Features.Capabilities). Esses recursos retornariam a razão ExplicitConsentRequired , pois os usuários precisam fornecer consentimento explícito.
Compatibilidade com SDK
A tabela a seguir mostra a versão mínima dos SDKs que oferecem suporte a APIs individuais.
| Operações | Web | IU da Web | iOS | Interface do usuário do iOS | Android | Interface do usuário do Android | Mac OS |
|---|---|---|---|---|---|---|---|
| Receber notificação de que a gravação começou ou parou | 1.0.0, 1.25.3-beta.1 | 1.0.0, 1.15.0-beta.1 | 2.0.0, 2.1.0-beta.1 | 1.0.0, 1.15.0-beta.1 | 2.0.0, 1.2.0-beta.1 | 1.0.0, 1.15.0-beta.1 | 1.0.0, 1.0.0-beta.31 |
| Obter estado de gravação | 1.0.0, 1.25.3-beta.1 | 1.0.0, 1.15.0-beta.1 | 2.0.0, 2.1.0-beta.1 | 1.0.0, 1.15.0-beta.1 | 2.0.0, 1.2.0-beta.1 | 1.0.0, 1.15.0-beta.1 | 1.0.0, 1.0.0-beta.31 |
| Saiba se é necessário consentimento explícito | 1.31.2, 1.32.1-beta.1 | ❌ | 2.16.0-beta.1 | ❌ | 2.14.0-beta.1 | ❌ | 1.12.0-beta.1 |
| Dar consentimento explícito para ser gravado | 1.31.2, 1.32.1-beta.1 | ❌ | 2.16.0-beta.1 | ❌ | 2.14.0-beta.1 | ❌ | 1.12.0-beta.1 |