Краткое руководство. Добавление закрытых подписей в вызывающее приложение
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Приложение с голосовым и видеозвонками см. в кратких руководствах по голосовым и видеозвонкам .
Примечание.
Обратите внимание, что вам потребуется приложение голосового вызова с помощью Службы коммуникации Azure вызова пакетов SDK для доступа к функции закрытых подписей, описанной в этом руководстве.
Модели
Имя | Описание |
---|---|
CaptionsCallFeature | API для подписей |
CaptionsCommon | Базовый класс для подписей |
StartCaptionOptions | Параметры закрытого заголовка, такие как разговорный язык |
CaptionsHandler | Определение обратного вызова для обработки события CaptionsReceivedEventType |
CaptionsInfo | Структура данных, полученная для каждого события CaptionsReceivedEventType |
Получение функции закрытых подписей
let captionsCallFeature: SDK.CaptionsCallFeature = call.feature(SDK.Features.Captions);
Получение объекта субтитров
Необходимо получить и привести объект Captions для использования определенных функций Captions.
let captions: SDK.Captions;
if (captionsCallFeature.captions.kind === 'Captions') {
captions = captionsCallFeature.captions as SDK.Captions;
}
Подписка на прослушиватели
Добавление прослушивателя для получения заголовков активного или неактивного состояния
const captionsActiveChangedHandler = () => {
if (captions.isCaptionsFeatureActive) {
/* USER CODE HERE - E.G. RENDER TO DOM */
}
}
captions.on('CaptionsActiveChanged', captionsActiveChangedHandler);
Добавление прослушивателя для полученных данных подписей
Обработка возвращаемого объекта данных CaptionsInfo.
Примечание. Объект содержит объект resultType prop, указывающий, является ли данные частичным подписью или завершенной версией заголовка. ResultType Partial
указывает динамические неуправляемые субтитры, в то время как Final
указывает завершенную интерпретированную версию предложения (т. е. включает препинание и заглавную букву).
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);
Добавление прослушивателя для получения измененного состояния языка
// 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)
Начальные подписи
После настройки всех прослушивателей теперь можно приступить к добавлению подписей.
try {
await captions.startCaptions({ spokenLanguage: 'en-us' });
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Остановки подписей
try {
captions.stopCaptions();
} catch (e) {
/* USER ERROR HANDLING CODE HERE */
}
Отмена подписки на прослушиватели
captions.off('CaptionsActiveChanged', captionsActiveChangedHandler);
captions.off('CaptionsReceived', captionsReceivedHandler);
Поддержка языка
Получение списка поддерживаемых языков
Получите список поддерживаемых языков, которые пользователи могут выбрать при включении закрытых подписей. Свойство возвращает массив языков в формате bcp 47.
const spokenLanguages = captions.supportedSpokenLanguages;
Настройка языка
Передайте значение из поддерживаемого массива языков, чтобы убедиться, что запрошенный язык поддерживается. По умолчанию, если contoso не предоставляет язык или неподдерживаемый язык, язык по умолчанию имеет значение 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 */
}
Добавление прослушивателя для получения типа подписей изменено состояние
Тип подписей может меняться с субтитров на TeamsCaptions, если пользователь Teams/CTE присоединяется к вызову или если вызов изменяется на тип вызова взаимодействия. Для продолжения работы с субтитрами требуется повторное использование прослушивателей подписей Teams. Тип TeamsCaptions нельзя переключить или вернуться к типу субтитров в вызове после использования TeamsCaptions в вызове.
const captionsKindChangedHandler = () => {
/* USER CODE HERE - E.G. SUBSCRIBE TO TEAMS CAPTIONS */
}
captions.on('CaptionsKindChanged', captionsKindChangedHandler)
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Приложение с голосовым и видеозвонками см. в кратких руководствах по голосовым и видеозвонкам .
Примечание.
Обратите внимание, что вам потребуется приложение голосового вызова с помощью Службы коммуникации Azure вызова пакетов SDK для доступа к функции закрытых подписей, описанной в этом руководстве.
Модели
Имя | Описание |
---|---|
CaptionsCallFeature | API для функции вызова подписей |
CommunicationCaptions | API для подписей для обмена данными |
StartCaptionOptions | Параметры закрытого заголовка, такие как разговорный язык |
CommunicationCaptionsReceivedEventArgs | Объект данных, полученный для каждого полученного события подписей связи |
Получение функции закрытых подписей
Необходимо получить и привести объект Captions для использования определенных функций Captions.
CaptionsCallFeature captionsCallFeature = call.Features.Captions;
CallCaptions callCaptions = await captionsCallFeature.GetCaptionsAsync();
if (callCaptions.CaptionsKind == CaptionsKind.CommunicationCaptions)
{
CommunicationCaptions communicationCaptions = callCaptions as CommunicationCaptions;
}
Подписка на прослушиватели
Добавление прослушивателя для получения подписей включено или отключено состояние
communicationCaptions.CaptionsEnabledChanged += OnIsCaptionsEnabledChanged;
private void OnIsCaptionsEnabledChanged(object sender, PropertyChangedEventArgs args)
{
if (communicationCaptions.IsEnabled)
{
}
}
Добавление прослушивателя для изменения типа подписей
Это событие будет активировано при изменении типа подписи на CommunicationCaptions
TeamsCaptions
приглашение пользователей Microsoft 365 только для вызовов ACS.
captionsCallFeature.ActiveCaptionsTypeChanged += OnIsCaptionsTypeChanged;
private void OnIsCaptionsTypeChanged(object sender, PropertyChangedEventArgs args)
{
// get captions
}
Добавление прослушивателя для полученных данных подписей
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
}
Добавление прослушивателя для получения активного состояния изменения языка
communicationCaptions.ActiveSpokenLanguageChanged += OnIsActiveSpokenLanguageChanged;
private void OnIsActiveSpokenLanguageChanged(object sender, PropertyChangedEventArgs args)
{
// communicationCaptions.ActiveSpokenLanguage
}
Начальные подписи
После настройки всех прослушивателей теперь можно приступить к добавлению подписей.
private async void StartCaptions()
{
var options = new StartCaptionsOptions
{
SpokenLanguage = "en-us"
};
try
{
await communicationCaptions.StartCaptionsAsync(options);
}
catch (Exception ex)
{
}
}
Остановки подписей
private async void StopCaptions()
{
try
{
await communicationCaptions.StopCaptionsAsync();
}
catch (Exception ex)
{
}
}
Удаление полученного прослушивателя субтитров
communicationCaptions.CaptionsReceived -= OnCaptionsReceived;
Поддержка языка
Получение списка поддерживаемых языков
Получите список поддерживаемых языков, которые пользователи могут выбрать при включении закрытых подписей.
// 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)
{
}
}
Очистка
Дополнительные сведения о очистке ресурсов см. здесь.
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Приложение с голосовым и видеозвонками см. в кратких руководствах по голосовым и видеозвонкам .
Примечание.
Обратите внимание, что вам потребуется приложение голосового вызова с помощью Службы коммуникации Azure вызова пакетов SDK для доступа к функции закрытых подписей, описанной в этом руководстве.
Модели
Имя | Описание |
---|---|
CaptionsCallFeature | API для функции вызова подписей |
CommunicationCaptions | API для подписей для обмена данными |
StartCaptionOptions | Параметры закрытого заголовка, такие как разговорный язык |
CommunicationCaptionsListener | Прослушиватель для CommunicationCaptions addOnCaptionsReceivedListener |
CommunicationCaptionsReceivedEvent | Объект данных, полученный для каждого события CommunicationCaptionsListener |
Получение функции закрытых подписей
Необходимо получить и привести объект Captions для использования определенных функций 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
}
}));
Подписка на прослушиватели
Добавление прослушивателя для получения подписей включено или отключено состояние
public void addOnIsCaptionsEnabledChangedListener() {
communicationCaptions.addOnCaptionsEnabledChangedListener( (PropertyChangedEvent args) -> {
if(communicationCaptions.isEnabled()) {
// captions enabled
}
});
}
Добавление прослушивателя для изменения типа подписей
Это событие будет активировано при изменении типа подписи на CommunicationCaptions
TeamsCaptions
приглашение пользователей Microsoft 365 только для вызовов ACS.
public void addOnIsCaptionsTypeChangedListener() {
captionsCallFeature.addOnActiveCaptionsTypeChangedListener( (PropertyChangedEvent args) -> {
if(communicationCaptions.isEnabled()) {
// captionsCallFeature.getCaptions();
}
});
}
Добавление прослушивателя для полученных данных подписей
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);
}
Добавление прослушивателя для получения активного состояния изменения языка
public void addOnActiveSpokenLanguageChangedListener() {
communicationCaptions.addOnActiveSpokenLanguageChangedListener( (PropertyChangedEvent args) -> {
// communicationCaptions.getActiveSpokenLanguage()
});
}
Начальные подписи
После настройки всех прослушивателей теперь можно приступить к добавлению подписей.
public void startCaptions() {
StartCaptionsOptions startCaptionsOptions = new StartCaptionsOptions();
startCaptionsOptions.setSpokenLanguage("en-us");
communicationCaptions.startCaptions(startCaptionsOptions).whenComplete((result, error) -> {
if (error != null) {
}
});
}
Остановки подписей
public void stopCaptions() {
communicationCaptions.stopCaptions().whenComplete((result, error) -> {
if (error != null) {
}
});
}
Удаление полученного прослушивателя субтитров
public void removeOnCaptionsReceivedListener() {
communicationCaptions.removeOnCaptionsReceivedListener(captionsListener);
}
Поддержка языка
Получение списка поддерживаемых языков
Получите список поддерживаемых языков, которые пользователи могут выбрать при включении закрытых подписей.
// bcp 47 formatted language code
communicationCaptions.getSupportedSpokenLanguages();
Настройка языка
Когда пользователь выбирает разговорный язык, приложение может задать язык, из которых он ожидает создания подписей.
public void setSpokenLanguage() {
communicationCaptions.setSpokenLanguage("en-us").whenComplete((result, error) -> {
if (error != null) {
}
});
}
Очистка
Дополнительные сведения о очистке ресурсов см. здесь.
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Приложение с голосовым и видеозвонками см. в кратких руководствах по голосовым и видеозвонкам .
Примечание.
Обратите внимание, что вам потребуется приложение голосового вызова с помощью Службы коммуникации Azure вызова пакетов SDK для доступа к функции закрытых подписей, описанной в этом руководстве.
Модели
Имя | Описание |
---|---|
CaptionsCallFeature | API для функции вызова подписей |
CommunicationCaptions | API для подписей для обмена данными |
StartCaptionOptions | Параметры закрытого заголовка, такие как разговорный язык |
CommunicationCaptionsDelegate | Делегат для подписей связи |
CommunicationCaptionsReceivedEventArgs | Объект данных, полученный для каждого полученного события подписей связи |
Получение функции закрытых подписей
Необходимо получить и привести объект Captions для использования определенных функций 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
}
}
}
}
Подписка на прослушиватели
Добавление прослушивателя для получения подписей включено или отключено, тип, разговорный язык, состояние языка субтитров изменено и полученные данные
Событие didChangeActiveCaptionsType
будет активировано при изменении типа подписи на CommunicationCaptions
TeamsCaptions
приглашение пользователей Microsoft 365 только для вызовов 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
Начальные подписи
После настройки всех прослушивателей теперь можно приступить к добавлению подписей.
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 {
}
})
}
Остановки подписей
func stopCaptions() {
communicationCaptions.stopCaptions(completionHandler: { (error) in
if error != nil {
}
})
}
Удаление полученного прослушивателя субтитров
communicationCaptions?.delegate = nil
Поддержка языка
Получение списка поддерживаемых языков
Получите список поддерживаемых языков, которые пользователи могут выбрать при включении закрытых подписей.
// bcp 47 formatted language code
let spokenLanguage : String = "en-us"
for language in communicationCaptions?.supportedSpokenLanguages ?? [] {
// choose required language
spokenLanguage = language
}
Настройка языка
Когда пользователь выбирает разговорный язык, приложение может задать язык, из которых он ожидает создания подписей.
func setSpokenLanguage() {
guard let communicationCaptions = self.communicationCaptions else {
return
}
communicationCaptions.set(spokenLanguage: spokenLanguage, completionHandler: { (error) in
if let error = error {
}
})
}
Очистка
Дополнительные сведения о очистке ресурсов см. здесь.
Очистка ресурсов
Если вы хотите отменить и удалить подписку на Службы коммуникации, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы. См. сведения об очистке ресурсов.
Следующие шаги
Дополнительные сведения см. в следующих статьях:
- Дополнительные сведения об использовании закрытых субтитров в сценариях взаимодействия Teams.
- Ознакомьтесь с нашим примером функции веб-вызовов.
- Узнайте больше о возможностях пакета SDK для вызовов
- Узнайте больше о принципе работы функции вызовов.