Поделиться через


Управление записью вызовов на клиенте

Внимание

Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии. Функции в предварительной версии общедоступны и могут использоваться всеми новыми и существующими клиентами Майкрософт.

Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или могут быть ограничены.

Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Запись звонков позволяет пользователям записывать вызовы, которые они выполняют с помощью Службы коммуникации Azure. Из этой статьи вы узнаете, как управлять записью на стороне клиента. Перед началом работы необходимо настроить запись на стороне сервера.

Предварительные условия

Поддержка

В следующих таблицах описывается поддержка записи в службы Azure Communication Services.

Идентичности и типы вызовов

В следующих таблицах показана поддержка записи звонков для определенного типа вызова и идентификатора.

Удостоверения Совещание в "Teams" Комната Звонок 1 на 1 Групповой вызов Вызов взаимодействия 1:1 между командами Teams Совещание по взаимодействию групп в Teams
Пользователь служб коммуникации ✔️ [1][2] ✔️ [3] ✔️ [3] ✔️ [2][3]
Пользователь Microsoft 365 ✔️ [1][2] ✔️ [2][3]

[1] Эти типы звонков поддерживают облако Teams. [2] Эти типы звонков поддерживают запись в соответствии с требованиями Teams.
[3] Эти типы вызовов поддерживают запись Службы коммуникации Azure.

Операции

В следующих таблицах показана поддержка отдельных API при вызове пакета SDK для отдельных типов удостоверений.

Операции Пользователь служб коммуникации Пользователь Microsoft 365
Получение уведомления о начале записи или остановке ✔️ ✔️
Получение состояния записи ✔️ ✔️
Получение уведомления о доступности записи ✔️ [1] ✔️ [1]
Узнайте, требуется ли явное согласие ✔️ [2] ✔️ [2]
Предоставление явного согласия на запись ✔️ [2] ✔️ [2]

[1] Пользователь не уведомляется о том, что запись доступна. Вы можете подписаться на уведомления об изменениях Microsoft Graph, чтобы получать информацию о доступности облачной записи Teams, или подписаться на событие Microsoft.Communication.RecordingFileStatusUpdated в службах коммуникации Azure, чтобы получать уведомление о доступности записи в этих службах.

[2] Эта функция доступна только в собраниях Teams и групповых вызовах взаимодействия Teams.

Пакеты SDK

В следующих таблицах показана поддержка записи в отдельных пакетах SDK для Службы коммуникации Azure.

Платформы Интернет Веб-интерфейс iOS Пользовательский интерфейс iOS Андроид Пользовательский интерфейс Android Виндоус
Поддерживается ✔️ ✔️ [1] ✔️ [1] ✔️ [1] ✔️ [1] ✔️ [1] ✔️ [1]

[1] Эти пакеты SDK не поддерживают явное согласие.

Установка пакета SDK

Используйте команду npm install для установки общего и вызывающего SDK служб связи Azure для JavaScript.

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

Инициализация обязательных объектов

Для большинства операций вызова требуется наличие экземпляра CallClient. При создании нового экземпляра CallClient, вы можете задать пользовательские параметры аналогично экземпляру Logger.

С помощью экземпляра CallClient можно создать экземпляр CallAgent, вызвав createCallAgent. Этот метод асинхронно возвращает объект экземпляра CallAgent.

Метод createCallAgent использует CommunicationTokenCredential в качестве аргумента. Он принимает маркер доступа пользователя.

Можно применить метод getDeviceManager для экземпляра CallClient, чтобы получить доступ к 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()

Управление подключением пакета SDK к инфраструктуре Майкрософт

Экземпляр Call Agent помогает управлять вызовами (для присоединения или запуска вызовов). Для работы пакета SDK для вызова необходимо подключиться к инфраструктуре Майкрософт для получения уведомлений о входящих звонках и координации других сведений о вызове. Ваш Call Agent имеет два возможных состояния:

ПодключеноCall Agent значение Connected connectionStatue означает, что клиентский пакет SDK подключен и способен получать уведомления из инфраструктуры Майкрософт.

Отключено — значение Call Agent connectionStatus Disconnected указывает на проблему, которая мешает пакету SDK правильно подключаться. Call Agent следует пересоздать.

  • invalidToken: если срок действия токена истек или он недействителен, Call Agent экземпляр отключается с этой ошибкой.
  • Если у клиента возникает проблема с подключением к инфраструктуре Майкрософт, после многих повторных попыток проявляется ошибка #D2.

Вы можете проверить, подключен ли локальный сервер Call Agent к инфраструктуре Майкрософт, проверив текущее значение connectionState свойства. Во время активного вызова можно прослушивать connectionStateChanged событие, чтобы определить, изменяется ли Call Agent с подключенного на отключенное состояние.

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);

Примечание.

Этот API предоставляется в качестве предварительной версии для разработчиков и может измениться на основе полученных отзывов. Не используйте этот API в рабочей среде. Чтобы использовать этот API, используйте бета-версию веб-SDK для звонков Служб связи Azure.

Запись в облаке и запись для соответствия требованиям

Запись вызовов является расширенной функцией базового API вызовов. Сначала необходимо импортировать функции вызова из пакета SDK для вызовов:

import { Features} from "@azure/communication-calling";

Затем можно получить объект API функций записи из экземпляра вызова:

const callRecordingApi = call.feature(Features.Recording);

Чтобы узнать, записывается ли вызов, проанализируйте свойство isRecordingActivecallRecordingApi. Он возвращает Boolean.

const isRecordingActive = callRecordingApi.isRecordingActive;

Вы также можете подписаться на запись изменений:

const isRecordingActiveChangedHandler = () => {
    console.log(callRecordingApi.isRecordingActive);
};

callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);

Список записей можно получить с помощью recordings свойства callRecordingApi. Возвращается RecordingInfo[], которое отображает текущее состояние облачной записи.

const recordings = callRecordingApi.recordings;

recordings.forEach(r => {
    console.log("State: ${r.state}");

Вы также можете подписаться на recordingsUpdated и получить коллекцию обновленных записей. Это событие активируется при каждом обновлении записи.

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 );

Если для собрания или звонка Teams настроено явное согласие на запись и транскрибирование, необходимо получить согласие от всех участников звонка, прежде чем их записать. Вы можете предоставить согласие заранее при присоединении к собранию или реактивно при запуске записи. Пока не будет предоставлено явное согласие, во время записи будут отключены аудио, видео и общий доступ к экранам участников.

Вы можете проверить, требуется ли для записи собрания явное согласие на основании свойства isTeamsConsentRequired. Если значение задано как true, тогда для этого требуется явное согласие на call.

const isConsentRequired = callRecordingApi.isTeamsConsentRequired;

Если вы уже получили согласие пользователя на запись, можно вызвать метод grantTeamsConsent(), чтобы подтвердить явное согласие для сервиса. Это согласие допустимо только для одного call сеанса, и пользователям необходимо снова предоставить согласие, если они повторно присоединиться к собранию.

callRecordingApi.grantTeamsConsent();

Попытки включить аудио, видео или общий доступ к экрану завершаются ошибкой, если запись активна, явное согласие требуется, но пока не предоставлено. Эту ситуацию можно распознать, проверив свойство reason класса ParticipantCapabilities на возможностиturnVideoOn, unmuteMic и shareScreen. Эти возможности можно найти в функции call.feature(Features.Capabilities). Эти возможности возвращали бы причину ExplicitConsentRequired, поскольку пользователям необходимо предоставить явное согласие.

Установка пакета SDK

Найдите проектный файл build.gradle и добавьте mavenCentral() в список репозиториев раздела buildscript и allprojects.

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

Затем в файле build.gradle уровня модуля добавьте следующие строки в раздел dependencies:

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

Инициализация требуемых объектов

Чтобы создать CallAgent экземпляр, необходимо вызвать метод createCallAgent на экземпляре CallClient. Этот вызов асинхронно возвращает объект экземпляра CallAgent .

Метод createCallAgent принимает CommunicationUserCredential в качестве аргумента, который инкапсулирует маркер доступа.

Чтобы получить доступ к DeviceManager, сначала необходимо создать экземпляр callAgent. Затем можно использовать CallClient.getDeviceManager метод для получения 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();

Чтобы задать отображаемое имя для вызывающей стороны, используйте следующий альтернативный метод:

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();

Запись вызовов

Примечание.

Этот API предоставляется в качестве предварительной версии для разработчиков и может измениться на основе полученных отзывов. Не используйте этот API в рабочей среде. Чтобы использовать этот API, воспользуйтесь бета-версией пакета Android SDK для звонков в Службе коммуникации Azure.

Запись вызовов — это расширенная функция основного Call объекта.

Предупреждение

До версии 1.1.0 и бета-версии 1.1.0-beta.1 пакета SDK для вызовов Службы коммуникации Azure на Android, isRecordingActive и addOnIsRecordingActiveChangedListener были частью объекта Call. Для новых бета-версий API стали частью расширенной функции Call.

Сначала необходимо получить объект функции записи:

RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);

Затем вы можете убедиться, что вызов записывается, проверив свойство isRecordingActive объекта callRecordingFeature. Он возвращает boolean.

boolean isRecordingActive = callRecordingFeature.isRecordingActive();

Вы также можете подписаться на запись изменений:

private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
  boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}

callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);

Если вы хотите начать запись из приложения, сначала следуйте инструкциям по записи звонков, чтобы настроить запись звонков.

После настройки записи звонков на сервере из приложения Android необходимо получить ServerCallId значение из вызова, а затем отправить его на сервер, чтобы начать процесс записи. Вы можете найти значение ServerCallId с помощью getServerCallId() из CallInfo класса. Класс CallInfo можно найти в объекте класса с помощью 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) {

}

При запуске записи с сервера событие handleCallOnIsRecordingChanged активируется и значение callRecordingFeature.isRecordingActive() равно true.

Как и при запуске записи звонка, если вы хотите остановить запись звонка, необходимо получить ServerCallId и отправить ее на сервер записи, чтобы он смог остановить запись:

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) {

}

При остановке записи с сервера событие handleCallOnIsRecordingChanged активируется и значение callRecordingFeature.isRecordingActive() равно false.

Примечание.

Этот API предоставляется в качестве предварительной версии для разработчиков и может измениться на основе полученных отзывов. Не используйте этот API в рабочей среде. Чтобы использовать этот API, воспользуйтесь бета-версией пакета Android SDK для звонков в Службе коммуникации Azure.

Если для собрания или звонка Teams настроено явное согласие на запись и транскрибирование, необходимо получить согласие от всех участников звонка, прежде чем их записать. Вы можете предоставить согласие заранее при присоединении к собранию или реактивно при запуске записи. Пока не будет предоставлено явное согласие, во время записи будут отключены аудио, видео и общий доступ к экранам участников.

Вы можете проверить, требуется ли для записи собрания явное согласие на основании свойства isTeamsConsentRequired. Если значение задано как true, тогда для этого требуется явное согласие на call.

boolean isConsentRequired = callRecordingFeature.isTeamsConsentRequired();

Если вы уже получили согласие пользователя на запись, можно вызвать метод grantTeamsConsent(), чтобы подтвердить явное согласие для сервиса. Это согласие допустимо только для одного call сеанса, и пользователям необходимо снова предоставить согласие, если они повторно присоединиться к собранию.

callRecordingFeature.grantTeamsConsent();

Попытки включить аудио, видео или общий доступ к экрану завершаются ошибкой, если запись активна, явное согласие требуется, но пока не предоставлено. Эту ситуацию можно распознать, проверив свойство reason класса ParticipantCapabilities на возможностиturnVideoOn, unmuteMic и shareScreen. Эти возможности можно найти в функции call.feature(Features.Capabilities). Эти возможности возвращали бы причину ExplicitConsentRequired, поскольку пользователям необходимо предоставить явное согласие.

Настройка системы

Выполните следующие действия, чтобы настроить систему.

Создайте проект Xcode

В Xcode создайте новый проект iOS и выберите шаблон Single View App (Приложение с одним представлением). В этой статье используется платформа SwiftUI, поэтому необходимо задать для языка значение Swift и задать для интерфейсазначение SwiftUI.

Вы не собираетесь создавать тесты в этой статье. Можете снять флажок "Включить тесты".

Снимок экрана, на котором показано окно для создания проекта в Xcode.

Установка пакета и зависимостей с помощью CocoaPods

  1. Создайте Podfile для приложения, как показано в следующем примере:

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. Запустите pod install.

  3. Откройте .xcworkspace с помощью Xcode.

Запрос доступа к микрофону

Чтобы получить доступ к микрофону устройства, необходимо обновить список свойств приложения с помощью NSMicrophoneUsageDescription. Задайте связанное значение строке, включенной в диалоговое окно, которое система использует для запроса доступа от пользователя.

Щелкните правой кнопкой мыши на позиции Info.plist в дереве проекта, а затем выберите Открыть как>Исходный код. Добавьте в раздел верхнего уровня <dict> следующие строки, а затем сохраните файл.

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

Настройка платформы приложения

Откройте файл проекта ContentView.swift . Добавьте объявление import в начало файла для импорта библиотеки AzureCommunicationCalling. Кроме того, импортируйте AVFoundation. Он необходим для запросов на разрешение звука в коде.

import AzureCommunicationCalling
import AVFoundation

Инициализация CallAgent

Чтобы создать экземпляр CallAgent из CallClient, необходимо использовать метод callClient.createCallAgent, который асинхронно возвращает объект CallAgent после его инициализации.

Чтобы создать клиент вызова, передайте CommunicationTokenCredential объект:

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)
}

Передайте объект CommunicationTokenCredential, который вы создали, в CallClient, и задайте отображаемое имя.

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")
        }
})

Запись вызовов

Примечание.

Этот API предоставляется в качестве предварительной версии для разработчиков и может измениться на основе полученных отзывов. Не используйте этот API в рабочей среде. Чтобы использовать этот API, используйте бета-версию пакета SDK для вызовов iOS Службы коммуникации Azure.

Запись вызовов — это расширенная функция основного Call объекта.

Предупреждение

До версии 1.1.0 и бета-версии 1.1.0-beta.1 SDK для вызовов iOS в Службе коммуникации Azure isRecordingActive был частью объекта Call, а didChangeRecordingState был частью делегата CallDelegate. Для новых бета-версий API стали частью расширенной функции Call.

Сначала необходимо получить объект функции записи:

let callRecordingFeature = call.feature(Features.recording)

Затем вы можете убедиться, что вызов записывается, проверив свойство isRecordingActive объекта callRecordingFeature. Он возвращает Bool.

let isRecordingActive = callRecordingFeature.isRecordingActive;

Вы также можете подписаться на отслеживание изменений, реализуя делегат RecordingCallFeatureDelegate в вашем классе с помощью события didChangeRecordingState:

callRecordingFeature.delegate = self

// didChangeRecordingState is a member of RecordingCallFeatureDelegate
public func recordingCallFeature(_ recordingCallFeature: RecordingCallFeature, didChangeRecordingState args: PropertyChangedEventArgs) {
    let isRecordingActive = recordingFeature.isRecordingActive
}

Если вы хотите начать запись из приложения, сначала следуйте инструкциям по записи звонков, чтобы настроить запись звонков.

После настройки записи звонков на сервере из приложения iOS необходимо получить ServerCallId значение из вызова, а затем отправить его на сервер, чтобы начать процесс записи. Вы можете найти значение ServerCallId с помощью getServerCallId() из CallInfo класса. Класс CallInfo можно найти в объекте класса с помощью getInfo().

// Send serverCallId to your recording server to start the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }

При запуске записи с сервера событие didChangeRecordingState активируется и значение recordingFeature.isRecordingActive равно true.

Как и при запуске записи звонка, если вы хотите остановить запись звонка, необходимо получить ServerCallId и отправить ее на сервер записи, чтобы он смог остановить запись:

// Send serverCallId to your recording server to stop the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }

При остановке записи с сервера событие didChangeRecordingState активируется и значение recordingFeature.isRecordingActive равно false.

Примечание.

Этот API предоставляется в качестве предварительной версии для разработчиков и может измениться на основе полученных отзывов. Не используйте этот API в рабочей среде. Чтобы использовать этот API, используйте бета-версию пакета SDK для вызовов iOS Службы коммуникации Azure.

Если для собрания или звонка Teams настроено явное согласие на запись и транскрибирование, необходимо получить согласие от всех участников звонка, прежде чем их записать. Вы можете предоставить согласие заранее при присоединении к собранию или реактивно при запуске записи. Пока не будет предоставлено явное согласие, во время записи будут отключены аудио, видео и общий доступ к экранам участников.

Вы можете проверить, требуется ли для записи собрания явное согласие на основании свойства isTeamsConsentRequired. Если значение задано как true, тогда для этого требуется явное согласие на call.

let isConsentRequired = recordingFeature.isTeamsConsentRequired;

Если вы уже получили согласие пользователя на запись, можно вызвать метод grantTeamsConsent(), чтобы подтвердить явное согласие для сервиса. Это согласие допустимо только для одного call сеанса, и пользователям необходимо снова предоставить согласие, если они повторно присоединиться к собранию.

recordingFeature.grantTeamsConsent();

Попытки включить аудио, видео или общий доступ к экрану завершаются ошибкой, если запись активна, явное согласие требуется, но пока не предоставлено. Эту ситуацию можно распознать, проверив свойство reason класса ParticipantCapabilities на возможностиturnVideoOn, unmuteMic и shareScreen. Эти возможности можно найти в функции call.feature(Features.Capabilities). Эти возможности возвращали бы причину ExplicitConsentRequired, поскольку пользователям необходимо предоставить явное согласие.

Настройка системы

Выполните следующие действия, чтобы настроить систему.

Создание проекта Visual Studio

Для приложения Платформы универсальных Windows в Visual Studio 2022 создайте новый проект Пустое приложение (Универсальная платформа Windows). После ввода имени проекта вы можете выбрать любой пакет SDK для Windows позже 10.0.17763.0.

Для приложения WinUI 3 создайте новый проект с шаблоном "Пустое приложение, упакованное (WinUI 3 в настольном приложении)", чтобы настроить одностраничное приложение WinUI 3. Требуется пакет SDK для приложений Windows версии 1.3 или более поздней.

Установите пакет и зависимости с помощью диспетчера пакетов NuGet.

API и библиотеки для вызова SDK доступны для всех через пакет NuGet.

Чтобы найти, скачать и установить пакет NuGet SDK для вызовов:

  1. Откройте nuGet диспетчер пакетов, выбрав > Manage NuGet Packages for Solution.
  2. Выберите "Обзор" и введите Azure.Communication.Calling.WindowsClient в поле поиска.
  3. Убедитесь, что установлен флажок "Включить предварительную версию ".
  4. Выберите пакет Azure.Communication.Calling.WindowsClient, а затем выберите Azure.Communication.Calling.WindowsClient1.4.0-beta.1 или более позднюю версию.
  5. Установите флажок, соответствующий проекту Службы коммуникации Azure на правой панели.
  6. Выберите Установить.

Запись вызовов

Запись вызовов — это расширенная функция основного Call объекта. Сначала необходимо получить объект функции записи:

RecordingCallFeature recordingFeature = call.Features.Recording;

Затем вы можете убедиться, что вызов записывается, проверив свойство IsRecordingActive объекта recordingFeature. Он возвращает boolean.

boolean isRecordingActive = recordingFeature.IsRecordingActive;

Вы также можете подписаться на запись изменений:

private async void Call__OnIsRecordingActiveChanged(object sender, PropertyChangedEventArgs args)
  boolean isRecordingActive = recordingFeature.IsRecordingActive;
}

recordingFeature.IsRecordingActiveChanged += Call__OnIsRecordingActiveChanged;

Примечание.

Этот API предоставляется в качестве предварительной версии для разработчиков и может измениться на основе полученных отзывов. Не используйте этот API в рабочей среде. Чтобы использовать этот API, используйте бета-версию Azure Communication Services Calling SDK для Windows.

Если для собрания или звонка Teams настроено явное согласие на запись и транскрибирование, необходимо получить согласие от всех участников звонка, прежде чем их записать. Вы можете предоставить согласие заранее при присоединении к собранию или реактивно при запуске записи. Пока не будет предоставлено явное согласие, во время записи будут отключены аудио, видео и общий доступ к экранам участников.

Вы можете проверить, требуется ли для записи собрания явное согласие на основании свойства isTeamsConsentRequired. Если значение задано как true, тогда для этого требуется явное согласие на call.

boolean isConsentRequired = recordingFeature.isTeamsConsentRequired;

Если вы уже получили согласие пользователя на запись, можно вызвать метод grantTeamsConsent(), чтобы подтвердить явное согласие для сервиса. Это согласие допустимо только для одного call сеанса, и пользователям необходимо снова предоставить согласие, если они повторно присоединиться к собранию.

recordingFeature.grantTeamsConsent();

Попытки включить аудио, видео или общий доступ к экрану завершаются ошибкой, если запись активна, явное согласие требуется, но пока не предоставлено. Эту ситуацию можно распознать, проверив свойство reason класса ParticipantCapabilities на возможностиturnVideoOn, unmuteMic и shareScreen. Эти возможности можно найти в функции call.feature(Features.Capabilities). Эти возможности возвращали бы причину ExplicitConsentRequired, поскольку пользователям необходимо предоставить явное согласие.

Совместимость пакета SDK

В следующей таблице показана минимальная версия пакетов SDK, поддерживающих отдельные API.

Операции Интернет Веб-интерфейс iOS Пользовательский интерфейс iOS Андроид Пользовательский интерфейс Android Виндоус
Получение уведомления о начале записи или остановке 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
Получение состояния записи 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
Узнайте, требуется ли явное согласие 1.31.2, 1.32.1-beta.1 2.16.0-beta.1 2.14.0-beta.1 1.12.0-beta.1
Предоставление явного согласия на запись 1.31.2, 1.32.1-beta.1 2.16.0-beta.1 2.14.0-beta.1 1.12.0-beta.1

Следующие шаги