Sdílet prostřednictvím


Rychlý start: Přidání skrytých titulků do volající aplikace

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services Viz Vytvoření prostředku Azure Communication Services. Uložte připojovací řetězec pro tento prostředek.
  • Aplikace s hlasovým voláním a videohovory najdete v našich rychlých startech pro hlasové hovory a videohovory.

Poznámka:

Upozorňujeme, že pro přístup k funkci skrytých titulků, která je popsaná v této příručce, budete potřebovat aplikaci pro hlasové volání pomocí sad SDK služby Azure Communication Services.

Modely

Název Popis
CaptionsCallFeature Rozhraní API pro titulky
TitulkyCommon Základní třída titulků
StartCaptionOptions Možnosti skrytých titulků, jako je mluvený jazyk
Popisovač titulků Definice zpětného volání pro zpracování události CaptionsReceivedEventType
CaptionsInfo Přijatá datová struktura pro každou událost CaptionsReceivedEventType

Získání funkce skrytých titulků

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

Získání objektu titulků

Abyste mohli využívat specifické funkce Titulky, musíte získat a přetypovat objekt Titulky.

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

Přihlášení k odběru naslouchacích procesů

Přidání naslouchacího procesu pro příjem aktivního nebo neaktivního stavu titulků

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

Přidání naslouchacího procesu pro přijatá data titulků

Zpracování vráceného datového objektu CaptionsInfo.

Poznámka: Objekt obsahuje vlastnost resultType prop, která označuje, zda jsou data částečným titulkem nebo finalizovanou verzí titulku. ResultType Partial označuje živý needitovaný titulek, zatímco Final označuje finalizovanou interpretovanou verzi věty (tj. zahrnuje interpunkci a velká písmena).

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

Přidání naslouchacího procesu pro příjem stavu změně mluveného jazyka

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

Spustit titulky

Jakmile nastavíte všechny naslouchací procesy, můžete začít přidávat titulky.

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

Zastavení titulků

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

Odhlášení odběru pro naslouchací procesy

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

Podpora mluveného jazyka

Získání seznamu podporovaných mluvených jazyků

Získejte seznam podporovaných mluvených jazyků, ze kterých můžou uživatelé vybírat při povolování skrytých titulků. Vlastnost vrátí pole jazyků ve formátu bcp 47.

const spokenLanguages = captions.supportedSpokenLanguages; 

Nastavení mluveného jazyka

Předejte hodnotu z pole podporovaných mluvených jazyků, abyste zajistili podporu požadovaného jazyka. Pokud contoso ve výchozím nastavení neposkytuje žádný jazyk nebo nepodporovaný jazyk, je mluvený jazyk ve výchozím nastavení "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 */
}

Přidání naslouchacího procesu pro příjem stavu změny stavu titulků

Druh titulků se může změnit z titulků na TeamsCaptions, pokud se uživatel Teams/CTE připojí k hovoru nebo když se hovor změní na typ volání zprostředkovatele komunikace. Aby bylo pokračovat v práci s titulky, je potřeba znovu odeslat naslouchací procesy titulků Teams. Typ TeamsCaptions nelze přepnout ani změnit zpět na druh titulků při volání, jakmile se teamsCaptions použije v hovoru.

const captionsKindChangedHandler = () => {
    /* USER CODE HERE - E.G. SUBSCRIBE TO TEAMS CAPTIONS */
}
captions.on('CaptionsKindChanged', captionsKindChangedHandler)

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services Viz Vytvoření prostředku Azure Communication Services. Uložte připojovací řetězec pro tento prostředek.
  • Aplikace s hlasovým voláním a videohovory najdete v našich rychlých startech pro hlasové hovory a videohovory.

Poznámka:

Upozorňujeme, že pro přístup k funkci skrytých titulků, která je popsaná v této příručce, budete potřebovat aplikaci pro hlasové volání pomocí sad SDK služby Azure Communication Services.

Modely

Název Popis
CaptionsCallFeature Rozhraní API pro funkci volání titulků
Komunikačnícaptions Rozhraní API pro popisky komunikace
StartCaptionOptions Možnosti skrytých titulků, jako je mluvený jazyk
CommunicationCaptionsReceivedEventArgs Datový objekt přijatý pro každou událost přijatých titulků komunikace

Získání funkce skrytých titulků

Abyste mohli využívat specifické funkce Titulky, musíte získat a přetypovat objekt Titulky.

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

Přihlášení k odběru naslouchacích procesů

Přidání naslouchacího procesu pro příjem povolených nebo zakázaných titulků

communicationCaptions.CaptionsEnabledChanged += OnIsCaptionsEnabledChanged;

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

Přidání naslouchacího procesu pro příjem změně typu titulků

Tato událost se aktivuje, když se typ titulku změní na CommunicationCaptions TeamsCaptions po pozvání uživatelů Microsoftu 365 na volání jen pro službu ACS.

captionsCallFeature.ActiveCaptionsTypeChanged += OnIsCaptionsTypeChanged;

private void OnIsCaptionsTypeChanged(object sender, PropertyChangedEventArgs args)
{
    // get captions
}

Přidání naslouchacího procesu pro přijatá data titulků

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
}

Přidání naslouchacího procesu pro příjem stavu změny aktivního mluveného jazyka

communicationCaptions.ActiveSpokenLanguageChanged += OnIsActiveSpokenLanguageChanged;

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

Spustit titulky

Jakmile nastavíte všechny naslouchací procesy, můžete začít přidávat titulky.


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

Zastavení titulků

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

Odebrání naslouchacího procesu přijetí titulku

communicationCaptions.CaptionsReceived -= OnCaptionsReceived;

Podpora mluveného jazyka

Získání seznamu podporovaných mluvených jazyků

Získejte seznam podporovaných mluvených jazyků, ze kterých můžou uživatelé vybírat při povolování skrytých titulků.

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

Vyčištění

Další informace o čištění prostředků najdete tady.

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services Viz Vytvoření prostředku Azure Communication Services. Uložte připojovací řetězec pro tento prostředek.
  • Aplikace s hlasovým voláním a videohovory najdete v našich rychlých startech pro hlasové hovory a videohovory.

Poznámka:

Upozorňujeme, že pro přístup k funkci skrytých titulků, která je popsaná v této příručce, budete potřebovat aplikaci pro hlasové volání pomocí sad SDK služby Azure Communication Services.

Modely

Název Popis
CaptionsCallFeature Rozhraní API pro funkci volání titulků
Komunikačnícaptions Rozhraní API pro popisky komunikace
StartCaptionOptions Možnosti skrytých titulků, jako je mluvený jazyk
CommunicationCaptionsListener Naslouchací proces pro addOnCaptionsReceivedListener
CommunicationCaptionsReceivedEvent Datový objekt přijatý pro každou událost CommunicationCaptionsListener

Získání funkce skrytých titulků

Abyste mohli využívat specifické funkce Titulky, musíte získat a přetypovat objekt Titulky.

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

Přihlášení k odběru naslouchacích procesů

Přidání naslouchacího procesu pro příjem povolených nebo zakázaných titulků

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

Přidání naslouchacího procesu pro příjem změně typu titulků

Tato událost se aktivuje, když se typ titulku změní na CommunicationCaptions TeamsCaptions po pozvání uživatelů Microsoftu 365 na volání jen pro službu ACS.

public void addOnIsCaptionsTypeChangedListener() {
    captionsCallFeature.addOnActiveCaptionsTypeChangedListener( (PropertyChangedEvent args) -> {
        if(communicationCaptions.isEnabled()) {
            // captionsCallFeature.getCaptions();
        }
    });
}

Přidání naslouchacího procesu pro přijatá data titulků

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

Přidání naslouchacího procesu pro příjem stavu změny aktivního mluveného jazyka

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

Spustit titulky

Jakmile nastavíte všechny naslouchací procesy, můžete začít přidávat titulky.

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

Zastavení titulků

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

Odebrání naslouchacího procesu přijetí titulku

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

Podpora mluveného jazyka

Získání seznamu podporovaných mluvených jazyků

Získejte seznam podporovaných mluvených jazyků, ze kterých můžou uživatelé vybírat při povolování skrytých titulků.

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

Nastavení mluveného jazyka

Když uživatel vybere mluvený jazyk, může vaše aplikace nastavit mluvený jazyk, ze kterého očekává vygenerování titulků.

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

Vyčištění

Další informace o čištění prostředků najdete tady.

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services Viz Vytvoření prostředku Azure Communication Services. Uložte připojovací řetězec pro tento prostředek.
  • Aplikace s hlasovým voláním a videohovory najdete v našich rychlých startech pro hlasové hovory a videohovory.

Poznámka:

Upozorňujeme, že pro přístup k funkci skrytých titulků, která je popsaná v této příručce, budete potřebovat aplikaci pro hlasové volání pomocí sad SDK služby Azure Communication Services.

Modely

Název Popis
CaptionsCallFeature Rozhraní API pro funkci volání titulků
Komunikačnícaptions Rozhraní API pro popisky komunikace
StartCaptionOptions Možnosti skrytých titulků, jako je mluvený jazyk
CommunicationCaptionsDelegate Delegát pro komunikační titulky
CommunicationCaptionsReceivedEventArgs Datový objekt přijatý pro každou událost přijatých titulků komunikace

Získání funkce skrytých titulků

Abyste mohli využívat specifické funkce Titulky, musíte získat a přetypovat objekt Titulky.

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

Přihlášení k odběru naslouchacích procesů

Přidání naslouchacího procesu pro příjem titulků s povoleným nebo zakázaným, typem, mluveným jazykem, změněným stavem jazyka titulků a přijatými daty

Událost didChangeActiveCaptionsType se aktivuje, když se typ titulku změní na CommunicationCaptions TeamsCaptions pozvání uživatelů Microsoftu 365 na volání jen pro službu 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

Spustit titulky

Jakmile nastavíte všechny naslouchací procesy, můžete začít přidávat titulky.

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

Zastavení titulků

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

Odebrání naslouchacího procesu přijetí titulku

communicationCaptions?.delegate = nil

Podpora mluveného jazyka

Získání seznamu podporovaných mluvených jazyků

Získejte seznam podporovaných mluvených jazyků, ze kterých můžou uživatelé vybírat při povolování skrytých titulků.

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

Nastavení mluveného jazyka

Když uživatel vybere mluvený jazyk, může vaše aplikace nastavit mluvený jazyk, ze kterého očekává vygenerování titulků.

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

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

Vyčištění

Další informace o čištění prostředků najdete tady.

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služby Communication Services, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků se odstraní také všechny ostatní prostředky, které jsou k ní přidružené. Přečtěte si další informace o čištění prostředků.

Další kroky

Další informace najdete v následujících článcích: