Skip to content

Commit 4bff4b6

Browse files
authored
Merge pull request #231721 from valindrae/closed-captions-teams-interop
Closed captions teams interop
2 parents bcf665f + f90d3e7 commit 4bff4b6

File tree

8 files changed

+766
-0
lines changed

8 files changed

+766
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
title: Enable Closed captions with Teams Interoperability
3+
titleSuffix: An Azure Communication Services concept document
4+
description: Conceptual information about closed captions in Teams interop scenarios
5+
author: Kunaal
6+
ms.service: azure-communication-services
7+
ms.subservice: calling
8+
ms.topic: include
9+
ms.date: 03/22/2023
10+
ms.author: kpunjabi
11+
ms.custom: public_preview
12+
---
13+
14+
# Enable Closed captions with Teams Interoperability
15+
16+
[!INCLUDE [Public Preview](../../includes/public-preview-include-document.md)]
17+
18+
Closed captions are a textual representation of a voice or video conversation that is displayed to users in real-time. Azure Communication Services Closed captions offer developers the ability to allow users to select when they wish to toggle captions on or off. These captions are only available during the call/meeting for the user that has selected to enable captions, ACS does **not** store these captions anywhere. Closed captions can be accessed through Azure Communication Services client-side SDKs for Web, Windows, iOS and Android.
19+
20+
In this document we're going to be looking at specifically Teams interoperability scenarios. For example, an Azure Communication Services user joins a Teams meeting and enabling captions or two Microsoft 365 users using Azure Communication Calling SDK to join a call or meeting.
21+
22+
## Supported scenarios
23+
24+
### Basic Closed Captions
25+
| Feature | ACS user | Microsoft 365 user with ACS calling SDK | Teams user in Teams app |
26+
| ------- | ------------ | -------------- | -------------- |
27+
| Enable captions in ACS call | N/A | ✔︎ | ✔︎ |
28+
| Enable captions in ACS rooms | N/A | ✔︎ | ✔︎ |
29+
| Enable captions in Teams meeting | ✔︎ | ✔︎ | ✔︎ |
30+
| Enable captions in Teams call | ✔︎ | ✔︎ | ✔︎ |
31+
32+
*✕ = not supprted in current release.*
33+
34+
### Translated Captions
35+
36+
| Feature | ACS user | Microsoft 365 user with ACS calling SDK | Teams user in Teams app |
37+
| ------- | -------------- | -------------- | -------------- |
38+
| Enable captions in ACS call | N/A | ✔︎ | ✔︎ |
39+
| Enable captions in ACS rooms | N/A | ✔︎ | ✔︎ |
40+
| Enable captions in Teams meeting | ✔︎ | ✔︎ | ✔︎ |
41+
| Enable captions in Teams call | ✔︎ | ✔︎ | ✔︎ |
42+
43+
*Usage of translations through Teams generated captions requires the organizer to have assigned a Teams Premium license, or in the case of Microsoft 365 users they must have a Teams premium license. More information about Teams Premium can be found [here](https://www.microsoft.com/microsoft-teams/premium#tabx93f55452286a4264a2778ef8902fb81a).*
44+
45+
In scenarios where there's a Teams user on a Teams client or a Microsoft 365 user with ACS SDKs in the call, the developer can use Teams caption. This allows developers to work with the Teams captioning technology that may already be familiar with today. With Teams captions developers are limited to what their Teams license allows. Basic captions allows only one spoken and one caption language for the call. With Teams premium license developers can use the translation functionality offered by Teams to provide one spoken language for the call and translated caption languages on a per user basis. In a Teams interop scenario, captions enabled through ACS follows the same policies that are defined in Teams for [meetings](/powershell/module/skype/set-csteamsmeetingpolicy) and [calls](/powershell/module/skype/set-csteamscallingpolicy).
46+
47+
## Common use cases
48+
49+
### Building accessible experiences
50+
Accessibility – For people with hearing impairments or who are new to the language to participate in calls and meetings. A key feature requirement in the Telemedical industry is to help patients communicate effectively with their health care providers.
51+
52+
### Teams interoperability
53+
Use Teams – Organizations using ACS and Teams can use Teams closed captions to improve their applications by providing closed captions capabilities to users. Those organizations can keep using Microsoft Teams for all calls and meetings without third party applications providing this capability.
54+
55+
### Global inclusivity
56+
Provide translation – Use the translation functions provided to provide translated captions for users who may be new to the language or for companies that operate at a global scale and have offices around the world, their teams can have conversations even if some people might not be familiar with the spoken language.
57+
58+
## Sample architecture of ACS user using captions in a Teams meeting
59+
![Diagram of Teams meeting interop](./media/acs-teams-interop-captions.png)
60+
61+
## Sample architecture of an ACS user using captions in a meeting with a Microsoft 365 user on ACS SDK
62+
![Diagram of CTE user](./media/m365-captions-interop.png)
63+
64+
65+
## Privacy concerns
66+
67+
Closed captions are only available during the call or meeting for the participant that has selected to enable captions, ACS does not store these captions anywhere. Many countries and states have laws and regulations that apply to storing of data. It is your responsibility to use the closed captions in compliance with the law should you choose to store any of the data generated through closed captions. You must obtain consent from the parties involved in a manner that complies with the laws applicable to each participant.
68+
69+
Interoperability between Azure Communication Services and Microsoft Teams enables your applications and users to participate in Teams calls, meetings, and chats. It is your responsibility to ensure that the users of your application are notified when closed captions are enabled in a Teams call or meeting and being stored.
70+
71+
Microsoft indicates to you via the Azure Communication Services API that recording or closed captions has commenced, and you must communicate this fact, in real-time, to your users within your application's user interface. You agree to indemnify Microsoft for all costs and damages incurred due to your failure to comply with this obligation.
72+
73+
## Next steps
74+
75+
- Learn how to use [closed captions for Teams interopability](../../how-tos/calling-sdk/closed-captions-teams-interop-how-to.md).
76+
77+
199 KB
Loading
258 KB
Loading
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
title: Enable Closed captions during a call
3+
titleSuffix: An Azure Communication Services how-to document
4+
description: Provides a how-to guide enabling Closed captions during a call.
5+
author: kunaal
6+
ms.service: azure-communication-services
7+
ms.subservice: calling
8+
ms.topic: include
9+
ms.date: 03/20/2023
10+
ms.author: kpunjabi
11+
ms.custom: private_preview
12+
services: azure-communication-services
13+
zone_pivot_groups: acs-plat-web-ios-android-windows
14+
---
15+
16+
# Enable Closed captions for Teams interoperability
17+
18+
Learn how to allow your users to enable closed captions during a Teams interoperability scenario where your users might be in a meeting between an ACS user and a Teams client user, or where your users are using ACS calling SDK with their Microsoft 365 identity.
19+
20+
[!INCLUDE [Public Preview](../../../communication-services/includes/public-preview-include.md)]
21+
22+
::: zone pivot="platform-windows"
23+
[!INCLUDE [Closed captions with Windows](./includes/closed-captions/closed-captions-teams-interop-windows.md)]
24+
::: zone-end
25+
26+
::: zone pivot="platform-web"
27+
[!INCLUDE [Closed captions with Typescript](./includes/closed-captions/closed-captions-teams-interop-web.md)]
28+
::: zone-end
29+
30+
::: zone pivot="platform-android"
31+
[!INCLUDE [Closed captions with Android](./includes/closed-captions/closed-captions-teams-interop-android.md)]
32+
::: zone-end
33+
34+
::: zone pivot="platform-ios"
35+
[!INCLUDE [Closed captions with iOS](./includes/closed-captions/closed-captions-teams-interop-ios.md)]
36+
::: zone-end
37+
38+
## Clean up resources
39+
40+
If you want to clean up and remove a Communication Services subscription, you can delete the resource or resource group. Deleting the resource group also deletes any other resources associated with it. Learn more about [cleaning up resources here](../../quickstarts/create-communication-resource.md#clean-up-resources).
41+
42+
## Next steps
43+
44+
For more information, see the following articles:
45+
- Learn about [Voice](./manage-calls.md) and [Video calling](./manage-video.md).
46+
- Learn about [Teams interoperability](./teams-interoperability.md).
47+
- Learn more about Microsoft Teams [live translated captions](https://support.microsoft.com//office/use-live-captions-in-a-teams-meeting-4be2d304-f675-4b57-8347-cbd000a21260).
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
---
2+
title: include file
3+
description: Android how-to guide for enabling Closed captions during a call.
4+
author: Kunaal
5+
ms.service: azure-communication-services
6+
ms.subservice: calling
7+
ms.topic: include
8+
ms.topic: include file
9+
ms.date: 03/20/2023
10+
ms.author: kpunjabi
11+
---
12+
13+
## Prerequisites
14+
- Azure account with an active subscription, for details see [Create an account for free.](https://azure.microsoft.com/free/)
15+
- Azure Communication Services resource. See [Create an Azure Communication Services resource](../../../../quickstarts/create-communication-resource.md?tabs=windows&pivots=platform-azp). Save the connection string for this resource.
16+
- An app with voice and video calling, refer to our [Voice](../../../../quickstarts/voice-video-calling/getting-started-with-calling.md) and [Video](../../../../quickstarts/voice-video-calling/get-started-with-video-calling.md) calling quickstarts.
17+
- [Access tokens](../../../../quickstarts/manage-teams-identity.md) for Microsoft 365 users.
18+
- [Access tokens](../../../../quickstarts/identity/access-tokens.md) for External identity users.
19+
- For Translated captions, you need to have a [Teams premium](/MicrosoftTeams/teams-add-on-licensing/licensing-enhance-teams#meetings) license.
20+
21+
>[!NOTE]
22+
>Please note that you will need to have a voice calling app using ACS calling SDKs to access the closed captions feature that is described in this guide.
23+
24+
## Models
25+
| Name | Description |
26+
|------|-------------|
27+
| TeamsCaptionsCallFeature | API for TeamsCall captions |
28+
| StartCaptionOptions | Closed caption options like spoken language |
29+
| TeamsCaptionsListener | Listener for addOnCaptionsReceivedListener |
30+
| TeamsCaptionsInfo | Data object received for each TeamsCaptionsListener event |
31+
32+
## Get closed captions feature
33+
34+
### External Identity users
35+
36+
If you're building an application that allows ACS users to join a Teams meeting
37+
38+
``` java
39+
TeamsCaptionsCallFeature captionsCallFeature = call.feature(Features.TEAMS_CAPTIONS);
40+
```
41+
42+
### Microsoft 365 users
43+
44+
If you're building an application for Microsoft 365 Users using ACS SDK.
45+
46+
``` java
47+
TeamsCaptionsCallFeature captionsCallFeature = teamsCall.feature(Features.TEAMS_CAPTIONS);
48+
```
49+
50+
## Subscribe to listeners
51+
52+
### Add a listener to receive captions active/inactive status
53+
54+
``` java
55+
public void addOnIsCaptionsActiveChangedListener() {
56+
captionsCallFeature.addOnCaptionsActiveChangedListener( (PropertyChangedEvent args) -> {
57+
if(captionsCallFeature.isCaptionsFeatureActive()) {
58+
59+
}
60+
});
61+
}
62+
```
63+
64+
### Add listener for captions data received
65+
66+
``` java
67+
TeamsCaptionsListener captionsListener = (TeamsCaptionsInfo captionsInfo) -> {
68+
69+
};
70+
public void addOnCaptionsReceivedListener() {
71+
captionsCallFeature.addOnCaptionsReceivedListener(captionsListener);
72+
}
73+
```
74+
75+
## Start captions
76+
77+
Once you've got all your listeners setup, you can now start captions.
78+
79+
``` java
80+
public void startCaptions() {
81+
StartCaptionsOptions startCaptionsOptions = new StartCaptionsOptions();
82+
startCaptionsOptions.setSpokenLanguage("en-us");
83+
captionsCallFeature.startCaptions(startCaptionsOptions).whenComplete((result, error) -> {
84+
if (error != null) {
85+
}
86+
});
87+
}
88+
```
89+
90+
## Stop captions
91+
92+
``` java
93+
public void stopCaptions() {
94+
captionsCallFeature.stopCaptions().whenComplete((result, error) -> {
95+
if (error != null) {
96+
}
97+
});
98+
}
99+
```
100+
101+
## Remove caption received listener
102+
103+
``` java
104+
public void removeOnCaptionsReceivedListener() {
105+
captionsCallFeature.removeOnCaptionsReceivedListener(captionsListener);
106+
}
107+
```
108+
109+
## Spoken language support
110+
111+
### Get a list of supported spoken languages
112+
113+
Get a list of supported spoken languages that your users can select from when enabling closed captions.
114+
115+
``` java
116+
// bcp 47 formatted language code
117+
captionsCallFeature.getSupportedSpokenLanguages();
118+
```
119+
120+
### Set spoken language
121+
122+
When the user selects the spoken language, your app can set the spoken language that it expects captions to be generated from.
123+
124+
``` java
125+
public void setSpokenLanguage() {
126+
captionsCallFeature.setSpokenLanguage("en-us").whenComplete((result, error) -> {
127+
if (error != null) {
128+
}
129+
});
130+
}
131+
```
132+
133+
## Caption language support
134+
135+
### Get supported caption language
136+
137+
If your organization has an active Teams premium license, then your ACS users can enable translated captions as long as the organizer of the meeting has a Teams premium license. As for users with Microsoft 365 identities this check is done against their own user account if they meeting organizer doesn't have a Teams premium license.
138+
139+
``` java
140+
// ISO 639-1 formatted language code
141+
captionsCallFeature.getSupportedCaptionLanguages();
142+
```
143+
### Set caption language
144+
145+
``` java
146+
public void setCaptionLanguage() {
147+
captionsCallFeature.setCaptionLanguage("en").whenComplete((result, error) -> {
148+
if (error != null) {
149+
}
150+
});
151+
}
152+
```
153+
154+
155+

0 commit comments

Comments
 (0)