全部產品
Search
文件中心

Intelligent Media Services:即時字幕

更新時間:May 23, 2025

通過閱讀本文,您可以瞭解如何通過AICallKit SDK即時擷取到使用者側講話字幕,及智能體回答字幕。

使用說明

  • 本樣本主要旨在協助您在不含UI整合的情況下,如何利用API實現該功能。

  • 您需要提前整合AICallkit SDK。如何整合,請參見Android整合SDKiOS整合SDKWeb整合SDK

即時字幕效果預覽

使用者側即時字幕

使用者輸入的內容經過智能體識別後,即時顯示在UI介面上。

lQDPKeLM6OXzFGHNCMjNBDiwmvXWuI7zQ84HVy-x3Np4AA_1080_2248

智能體側即時字幕

大模型產生的內容將即時顯示在UI介面上。

lQDPJyB9LXbMhGHNCMjNBDiw5kh8C3S6jikHVy-y6E6YAA_1080_2248

說明

該功能以及UI介面均在含UI整合方案中內建。含UI整合方案詳情,請參見含UI整合方案

實現即時字幕功能

即時字幕在通話開始後,使用者側的講話內容將通過onUserSubtitleNotify進行返回,而智能體的回答內容則通過onVoiceAgentSubtitleNotify進行返回。

onUserSubtitleNotify詳情

使用者在講話過程中,智能體識別結果的通知將會多次返回。在即時字幕情境中,直接渲染常值內容到UI介面中即可;在非即時情境的對話式聊天中,應在isSentenceEnd=true時,將最終的常值內容渲染到使用者介面中。

狀態值

說明

text

被智能體識別出的提問文本,每一次返回都是當前句子的完整結果。

isSentenceEnd

當前文本是否為這句話的最終結果,為true時表示當前講話句子已經結束,接下來智能體會回答你的問題

sentenceId

當前text屬於的句子ID,每一次提問後ID會累加

voiceprintResult

Vad的反饋結果,如果有開啟了聲紋降噪(EnableVoicePrint)或者AIVad(VadLevel大於0),有以下取值結果:

0:沒開啟聲紋降噪Vad,且關閉AIVad。

1:已開啟聲紋降噪Vad,但還未完成聲紋註冊。

2:已開啟聲紋降噪Vad,識別到主講人。

3:已開啟聲紋降噪Vad,沒識別到主講人,在此狀態下,智能體不會回答

4:開啟AIVad,識別到主講人。

5:開啟AIVad,但沒識別到主講人,在此狀態下,智能體不會回答

說明

僅Web端暫不支援聲紋降噪。

例如,使用者在講話“今天天氣怎麼樣”的過程中,可能得到的回調結果如下:

text="今天" isSentenceEnd=false sentenceId=1

text="今天天氣" isSentenceEnd=false sentenceId=1

text="今天天氣怎麼樣?" isSentenceEnd=true sentenceId=1

onVoiceAgentSubtitleNotify詳情

智能體回答結果的過程中,回答內容將被拆分為多次通知。用戶端需要將這些回答的文本進行合并,並對合并後的文本進行拆字渲染,以便在UI介面中展示。

狀態值

說明

text

智能體回答的文本

isSentenceEnd

當前文本是否為此次回答的最後一句,為true時表示當前回答完畢,智能體狀態也會切換為聆聽中

userAsrSentenceId

使用者側提問的句子ID

例如,針對使用者剛才的提問,智能體回答“今天的天氣晴朗明媚,氣溫適中,非常適合外出活動。”,可能回調的結果如下:

text="今天的天氣晴朗明媚," isSentenceEnd=false userAsrSentenceId=1

text="氣溫適中,非常適合外出活動。" isSentenceEnd=false userAsrSentenceId=1

text="" isSentenceEnd=true userAsrSentenceId=1

範例程式碼

Android

// 給引擎添加設定回調
mARTCAICallEngine.setEngineCallback(mCallEngineCallbackWrapper); 

// 回調處理(僅樣本相關的回調操作)
ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallbackWrapper = new ARTCAICallEngine.IARTCAICallEngineCallback() {
    @Override
    public void onUserAsrSubtitleNotify(String text, boolean isSentenceEnd, int sentenceId, VoicePrintStatusCode voicePrintStatusCode) {
        // 同步ASR識別使用者的話
    }

    @Override
    public void onAIAgentSubtitleNotify(String text, boolean end, int userAsrSentenceId) {
        // 同步智能體回應的話
    }
}

iOS

// 給引擎添加設定回調
self.engine.delegate = self

func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int, voiceprintResult: ARTCAICallVoiceprintResult) {
    // 使用者提問被智能體識別結果的通知
}

func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int) {
    // 智能體回答結果通知
}

Web

// 給引擎添加回調
engine.on('userSubtitleNotify', (subtitle, voiceprintResult) => {
  // 使用者提問被智能體識別結果的通知
  console.log('AICallUserSubtitleNotify', subtitle.text, subtitle.end, subtitle.sentenceId, voiceprintResult);
});
engine.on('agentSubtitleNotify', (subtitle) => {
  // 智能體回答結果通知
  console.log('AICallAgentSubtitleNotify', subtitle.text, subtitle.end, subtitle.sentenceId);
});