Dela via


Aktivera undertexter för Teams-samverkan

Lär dig hur du tillåter att dina användare aktiverar undertexter under ett Teams-samverkansscenario där dina användare kan vara i ett möte mellan en Azure Communication Services-användare och en Teams-klientanvändare, eller där dina användare använder Azure Communication Services som anropar SDK med sin Microsoft 365-identitet.

Förutsättningar

Kommentar

Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.

Modeller

Name beskrivning
CaptionsCallFeature API för anropsfunktion för undertexter
TeamsCaptions API för Teams-undertexter
StartCaptionOptions Alternativ för dold bildtext som talat språk
TeamsCaptionsReceivedEventArgs Dataobjekt som tagits emot för varje Teams-undertexter som tagits emot

Hämta funktionen för undertexter

Externa identitetsanvändare och Microsoft 365-användare

Om du skapar ett program som gör att Azure Communication Services-användare kan ansluta till ett Teams-möte

CaptionsCallFeature captionsCallFeature = call.Features.Captions;
CallCaptions callCaptions = await captionsCallFeature.GetCaptionsAsync();
if (callCaptions.CaptionsKind == CaptionsKind.TeamsCaptions)
{
    TeamsCaptions teamsCaptions = callCaptions as TeamsCaptions;
} 

Prenumerera på lyssnare

Lägg till en lyssnare för att ta emot undertexter aktiverade/inaktiverade status

teamsCaptions.CaptionsEnabledChanged += OnIsCaptionsEnabledChanged;

private void OnIsCaptionsEnabledChanged(object sender, PropertyChangedEventArgs args)
{
    if (teamsCaptions.IsEnabled)
    {
    }
}

Lägg till lyssnare för mottagna textningsdata

teamsCaptions.CaptionsReceived += OnCaptionsReceived;

private void OnCaptionsReceived(object sender, TeamsCaptionsReceivedEventArgs eventArgs)
{
    // Information about the speaker.
    // eventArgs.Speaker
    // The original text with no transcribed.
    // eventArgs.SpokenText
    // language identifier for the captions text.
    // eventArgs.CaptionLanguage
    // language identifier for the speaker.
    // eventArgs.SpokenLanguage
    // The transcribed text.
    // eventArgs.CaptionText
    // 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
}

Lägg till en lyssnare för att få statusen aktivt talat språk ändrat

teamsCaptions.ActiveSpokenLanguageChanged += OnIsActiveSpokenLanguageChanged;

private void OnIsActiveSpokenLanguageChanged(object sender, PropertyChangedEventArgs args)
{
    // teamsCaptions.ActiveSpokenLanguage
}

Lägg till en lyssnare för att få statusen ändrad för aktivt undertextspråk

teamsCaptions.ActiveCaptionLanguageChanged += OnIsActiveCaptionLanguageChanged;

private void OnIsActiveCaptionLanguageChanged(object sender, PropertyChangedEventArgs args)
{
    // teamsCaptions.ActiveCaptionLanguage
}

Starttexter

När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.


private async void StartCaptions()
{
    var options = new StartCaptionsOptions
    {
        SpokenLanguage = "en-us"
    };
    try
    {
        await teamsCaptions.StartCaptionsAsync(options);
    }
    catch (Exception ex)
    {
    }
}

Stoppa undertexter

private async void StopCaptions()
{
    try
    {
        await teamsCaptions.StopCaptionsAsync();
    }
    catch (Exception ex)
    {
    }
}

Ta bort undertext mottagen lyssnare

teamsCaptions.CaptionsReceived -= OnCaptionsReceived;

Stöd för talat språk

Hämta en lista över talade språk som stöds

Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter.

// bcp 47 formatted language code
IReadOnlyList<string> sLanguages = teamsCaptions.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 teamsCaptions.SetSpokenLanguageAsync("en-us");
    }
    catch (Exception ex)
    {
    }
}

Stöd för textningsspråk

Hämta undertextspråk som stöds

Om din organisation har en aktiv Teams Premium-licens kan dina Azure Communication Services-användare aktivera översatta undertexter så länge mötesorganisatören har en Teams Premium-licens. När det gäller användare med Microsoft 365-identiteter görs den här kontrollen mot deras eget användarkonto om de som möter organisatören inte har en Teams Premium-licens.

// ISO 639-1 formatted language code
IReadOnlyList<string> cLanguages = teamsCaptions.SupportedCaptionLanguages;

Ange textningsspråk

public async void SetCaptionLanguage()
{
    try
    {
        await teamsCaptions.SetCaptionLanguageAsync("en");
    }
    catch (Exception ex)
    {
    }
}

Förutsättningar

Kommentar

Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.

Modeller

Name beskrivning
CaptionsCallFeature API för bildtexter
CaptionsCommon Basklass för bildtexter
StartCaptionOptions Alternativ för dold bildtext som talat språk
TeamsCaptionHandler Motringningsdefinition för hantering av captionsReceivedEventType-händelse
TeamsCaptionsInfo Datastruktur som tas emot för varje CaptionsReceivedEventType-händelse

Hämta funktionen för undertexter

Externa identitetsanvändare

Om du skapar ett program som gör att Azure Communication Services-användare kan ansluta till ett Teams-möte.

let captionsCallFeature: SDK.CaptionsCallFeature = call.feature(SDK.Features.Captions);

Microsoft 365-användare

let captionsCallFeature: SDK.CaptionsCallFeature = teamsCall.feature(SDK.Features.Captions);

Hämta objekt för teams-undertexter

Du måste hämta och casta objektet Teams-undertexter för att kunna använda specifika funktioner för Teams-undertexter

let teamsCaptions: SDK.TeamsCaptions;
if (captionsCallFeature.captions.kind === 'TeamsCaptions') {
    teamsCaptions = captionsCallFeature.captions as SDK.TeamsCaptions;
}

Prenumerera på lyssnare

Lägg till en lyssnare för att ta emot undertexter som är aktiva/inaktiva

const captionsActiveChangedHandler = () => {
    if (teamsCaptions.isCaptionsFeatureActive) {
        /* USER CODE HERE - E.G. RENDER TO DOM */
    }
}
teamsCaptions.on('CaptionsActiveChanged', captionsActiveChangedHandler);

Lägga till en lyssnare för mottagna textningsdata

Hantera det returnerade Dataobjektet TeamsCaptionsInfo.

Obs! Objektet innehåller en resultType-prop som anger om data är en partiell beskrivning eller en slutförd version av bildtexten. ResultType partial anger live oredigerad bildtext, medan final anger en slutförd tolkad version av meningen (d.v.s. innehåller skiljetecken och versaler).

let currentCaptionLanguage : string;
const captionsReceivedHandler : TeamsCaptionsHandler = (data: TeamsCaptionsInfo) => { 
    /** USER CODE HERE - E.G. RENDER TO DOM 
     * data.captionLanguage
     * data.captionText
     * data.resultType
     * data.speaker
     * data.spokenText
     * data.timeStamp
    */
   // Example code:
   // Create a dom element, i.e. div, with id "captionArea" before proceeding with the sample code
    if (!this._currentCaptionLanguage || this._currentCaptionLanguage === data.captionLanguage) {
        let mri: string;
        switch (data.speaker.identifier.kind) {
            case 'communicationUser': { mri = data.speaker.identifier.communicationUserId; break; }
            case 'microsoftTeamsUser': { mri = data.speaker.identifier.microsoftTeamsUserId; 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.captionText ?? 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(newClassName);

            captionArea.appendChild(captionContainer);
        } else {
            foundCaptionContainer.textContent = captionText;

            if (captionData.resultType === 'Final') {
                foundCaptionContainer.setAttribute('isNotFinal', 'false');
            }
        }
    }
}; 
teamsCaptions.on('CaptionsReceived', captionsReceivedHandler); 

Lägg till en lyssnare för att få ändrat status för talat språk

const spokenLanguageChangedHandler = () => {
    if (teamsCaptions.activeSpokenLanguage !== currentSpokenLanguage) {
        /* USER CODE HERE - E.G. RENDER TO DOM */
    }
}
teamsCaptions.on('SpokenLanguageChanged', spokenLanguageChangedHandler)

Lägg till en lyssnare för att få statusen ändrad i bildtextspråket

const captionLanguageChangedHandler = () => {
    if (teamsCaptions.activeCaptionLanguage !== currentCaptionLanguage) {
        /* USER CODE HERE - E.G. RENDER TO DOM */
    }
}
teamsCaptions.on('CaptionLanguageChanged', captionLanguageChangedHandler)

Starttexter

När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.

try {
    await teamsCaptions.startCaptions({ spokenLanguage: 'en-us' });
} catch (e) {
    /* USER ERROR HANDLING CODE HERE */
}

Stoppa undertexter

try {
    teamsCaptions.stopCaptions(); 
} catch (e) {
    /* USER ERROR HANDLING CODE HERE */
}

Avsluta prenumerationen på lyssnare

teamsCaptions.off('CaptionsActiveChanged', captionsActiveChangedHandler);
teamsCaptions.off('CaptionsReceived', captionsReceivedHandler); 

Stöd för talat språk

Hämta en lista över talade språk som stöds

Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter. Egenskapen returnerar en matris med språk i bcp 47-format.

const spokenLanguages = teamsCaptions.supportedSpokenLanguages; 

Ange talat språk

Skicka in ett värde från matrisen talade språk som stöds för att säkerställa att det begärda språket stöds. Om contoso inte tillhandahåller något språk eller ett språk som inte stöds är standardspråket "en-us".

// bcp 47 formatted language code
const language = 'en-us'; 

// Altneratively, pass a value from the supported spoken languages array
const language = spokenLanguages[0]; 

try {
    teamsCaptions.setSpokenLanguage(language);
} catch (e) {
    /* USER ERROR HANDLING CODE HERE */
}

Stöd för textningsspråk

Hämta en lista över undertextspråk som stöds

Om din organisation har en aktiv Teams Premium-licens kan du tillåta att användarna använder översatta bildtexter som tillhandahålls av Teams-undertexter. När det gäller användare med en Microsoft 365-identitet, om mötesorganisatören inte har en aktiv Teams Premium-licens, görs språkkontrollen för undertexter mot Microsoft 365-användarkontot.

Egenskapen returnerar en matris med språkkoder med två bokstäver i ISO 639-1 standard.

const captionLanguages = teamsCaptions.supportedCaptionLanguages;

Ange textningsspråk

// ISO 639-1 formatted language code
const language = 'en'; 

// Altneratively, pass a value from the supported caption languages array
const language = captionLanguages[0];
try {
    teamsCaptions.setCaptionLanguage(language);
} catch (e) {
    /* USER ERROR HANDLING CODE HERE */
}

Förutsättningar

Kommentar

Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.

Modeller

Name beskrivning
CaptionsCallFeature API för anropsfunktion för undertexter
TeamsCaptions API för Teams-undertexter
StartCaptionOptions Alternativ för dold bildtext som talat språk
TeamsCaptionsListener Lyssnare för TeamsCaptions addOnCaptionsReceivedListener
TeamsCaptionsReceivedEvent Dataobjekt som tas emot för varje TeamsCaptionsListener-händelse

Hämta funktionen för undertexter

Externa identitetsanvändare och Microsoft 365-användare

Om du skapar ett program som gör det möjligt för användare att ansluta till ett Teams-möte

CaptionsCallFeature captionsCallFeature = call.feature(Features.CAPTIONS);
captionsCallFeature.getCaptions().whenComplete(
    ((captions, throwable) -> {
        if (throwable == null) {
            CallCaptions callCaptions = captions;
            if (captions.getCaptionsType() == CaptionsType.TEAMS_CAPTIONS) {
            // teams captions
            TeamsCaptions teamsCaptions = (TeamsCaptions) captions;
            }
        } else {
        // get captions failed
        // throwable is the exception/cause
        }
    }));

Prenumerera på lyssnare

Lägg till en lyssnare för att ta emot undertexter aktiverade/inaktiverade status

public void addOnIsCaptionsEnabledChangedListener() {
    teamsCaptions.addOnCaptionsEnabledChangedListener( (PropertyChangedEvent args) -> {
        if(teamsCaptions.isEnabled()) {
            // captions enabled
        }
    });
}

Lägg till lyssnare för mottagna textningsdata

TeamsCaptionsListener captionsListener = (TeamsCaptionsReceivedEvent args) -> {
  // Information about the speaker.
  // CallerInfo participantInfo = args.getSpeaker();
  // The original text with no transcribed.
  // args.getSpokenText();
  // language identifier for the captions text.
  // args.getCaptionLanguage();
  // language identifier for the speaker.
  // args.getSpokenLanguage();
  // The transcribed text.
  // args.getCaptionText();
  // 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() {
  teamsCaptions.addOnCaptionsReceivedListener(captionsListener); 
}

Lägg till en lyssnare för att få statusen aktivt talat språk ändrat

public void addOnActiveSpokenLanguageChangedListener() {
    teamsCaptions.addOnActiveSpokenLanguageChangedListener( (PropertyChangedEvent args) -> {
       // teamsCaptions.getActiveSpokenLanguage()
    });
}

Lägg till en lyssnare för att få statusen ändrad för aktivt undertextspråk

public void addOnActiveCaptionLanguageChangedListener() {
    teamsCaptions.addOnActiveCaptionLanguageChangedListener( (PropertyChangedEvent args) -> {
       // teamsCaptions.getActiveCaptionLanguage()
    });
}

Starttexter

När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.

public void startCaptions() {
    StartCaptionsOptions startCaptionsOptions = new StartCaptionsOptions();
    startCaptionsOptions.setSpokenLanguage("en-us");
    teamsCaptions.startCaptions(startCaptionsOptions).whenComplete((result, error) -> {
        if (error != null) {
        }
    });
}

Stoppa undertexter

public void stopCaptions() {
    teamsCaptions.stopCaptions().whenComplete((result, error) -> {
        if (error != null) {
        }
    });
}

Ta bort undertext mottagen lyssnare

public void removeOnCaptionsReceivedListener() {
    teamsCaptions.removeOnCaptionsReceivedListener(captionsListener);
}

Stöd för talat språk

Hämta en lista över talade språk som stöds

Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter.

// bcp 47 formatted language code
teamsCaptions.getSupportedSpokenLanguages();

Ange talat språk

När användaren väljer det talade språket kan appen ange det talade språk som den förväntar sig att undertexter ska genereras från.

public void setSpokenLanguage() {
    teamsCaptions.setSpokenLanguage("en-us").whenComplete((result, error) -> {
        if (error != null) {
        }
    });
}

Stöd för textningsspråk

Hämta undertextspråk som stöds

Om din organisation har en aktiv Teams Premium-licens kan dina Azure Communication Services-användare aktivera översatta undertexter så länge mötesorganisatören har en Teams Premium-licens. När det gäller användare med Microsoft 365-identiteter görs den här kontrollen mot deras eget användarkonto om de som möter organisatören inte har en Teams Premium-licens.

// ISO 639-1 formatted language code
teamsCaptions.getSupportedCaptionLanguages();

Ange textningsspråk

public void setCaptionLanguage() {
    teamsCaptions.setCaptionLanguage("en").whenComplete((result, error) -> {
        if (error != null) {
        }
    });
}

Förutsättningar

Kommentar

Observera att du måste ha en röstsamtalsapp med hjälp av Azure Communication Services som anropar SDK:er för att få åtkomst till funktionen för undertexter som beskrivs i den här guiden.

Modeller

Name beskrivning
CaptionsCallFeature API för anropsfunktion för undertexter
TeamsCaptions API för Teams-undertexter
StartCaptionOptions Alternativ för dold bildtext som talat språk
TeamsCaptionsDelegate Ombud för Teams-undertexter
TeamsCaptionsReceivedEventArgs Dataobjekt som tagits emot för varje Teams-undertexter som tagits emot

Hämta funktionen för undertexter

Externa identitetsanvändare och Microsoft 365-användare

Om du skapar ett program som gör att Azure Communication Services-användare kan ansluta till ett Teams-möte

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.teamsCaptions) {
                // teams captions
                @State var teamsCaptions = value as? TeamsCaptions
            }
        }
    }
}

Prenumerera på lyssnare

Lägg till en lyssnare för att ta emot undertexter aktiverade/inaktiverade, talat språk, status för textningsspråk har ändrats och mottagna data

extension CallObserver: TeamsCaptionsDelegate {
    // listener for receive captions enabled/disabled status
    public func teamsCaptions(_ teamsCaptions: TeamsCaptions, didChangeCaptionsEnabledState args: PropertyChangedEventArgs) {
        // teamsCaptions.isEnabled
    }
    
    // listener for active spoken language state change
    public func teamsCaptions(_ teamsCaptions: TeamsCaptions, didChangeActiveSpokenLanguageState args: PropertyChangedEventArgs) {
        // teamsCaptions.activeSpokenLanguage
    }
    
    // listener for active caption language state change
    public func teamsCaptions(_ teamsCaptions: TeamsCaptions, didChangeActiveCaptionLanguageState args: PropertyChangedEventArgs) {
        // teamsCaptions.activeCaptionLanguage
    }
    
    // listener for captions data received
    public func teamsCaptions(_ teamsCaptions: TeamsCaptions, didReceiveCaptions:TeamsCaptionsReceivedEventArgs) {
            // Information about the speaker.
            // didReceiveCaptions.speaker
            // The original text with no transcribed.
            // didReceiveCaptions.spokenText
            // language identifier for the captions text.
            // didReceiveCaptions.captionLanguage
            // language identifier for the speaker.
            // didReceiveCaptions.spokenLanguage
            // The transcribed text.
            // didReceiveCaptions.captionText
            // 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
    }
}

teamsCaptions.delegate = self.callObserver

Starttexter

När du har konfigurerat alla lyssnare kan du nu börja lägga till bildtexter.

func startCaptions() {
    guard let teamsCaptions = teamsCaptions else {
        return
    }
    let startCaptionsOptions = StartCaptionsOptions()
    startCaptionsOptions.spokenLanguage = "en-us"
    teamsCaptions.startCaptions(startCaptionsOptions: startCaptionsOptions, completionHandler: { (error) in
        if error != nil {
            
        }
    })
}

Stoppa undertexter

func stopCaptions() {
    teamsCaptions.stopCaptions(completionHandler: { (error) in
        if error != nil {
            
        }
    })
}

Ta bort undertext mottagen lyssnare

teamsCaptions?.delegate = nil

Stöd för talat språk

Hämta en lista över talade språk som stöds

Hämta en lista över talade språk som stöds och som användarna kan välja mellan när de aktiverar undertexter.

// bcp 47 formatted language code
let spokenLanguage : String = "en-us"
for language in teamsCaptions?.supportedSpokenLanguages ?? [] {
    // choose required language
    spokenLanguage = language
}

Ange talat språk

När användaren väljer det talade språket kan appen ange det talade språk som den förväntar sig att undertexter ska genereras från.

func setSpokenLanguage() {
    guard let teamsCaptions = self.teamsCaptions else {
        return
    }

    teamsCaptions.set(spokenLanguage: spokenLanguage, completionHandler: { (error) in
        if let error = error {
        }
    })
}

Stöd för textningsspråk

Hämta undertextspråk som stöds

Om din organisation har en aktiv Teams Premium-licens kan dina Azure Communication Services-användare aktivera översatta undertexter så länge mötesorganisatören har en Teams Premium-licens. När det gäller användare med Microsoft 365-identiteter görs den här kontrollen mot deras eget användarkonto om de som möter organisatören inte har en Teams Premium-licens.

// ISO 639-1 formatted language code
let captionLanguage : String = "en"
for language in teamsCaptions?.supportedCaptionLanguages ?? [] {
    // choose required language
    captionLanguage = language
}

Ange textningsspråk

func setCaptionLanguage() {
    guard let teamsCaptions = self.teamsCaptions else {
        return
    }

    teamsCaptions.set(captionLanguage: captionLanguage, completionHandler: { (error) in
        if let error = error {
        }
    })
}

Rensa resurser

Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort. Läs mer om att rensa resurser här.

Nästa steg

Mer information finns i följande artiklar: