Windows

更新时间:2025-06-11 02:11:49

实时字幕功能为线上会议、在线教育等场景提供实时的语音转文字服务,这项功能可以帮助参会者更好的理解会议内容。DingRTC为您提供了实时字幕的功能。通过阅读本文,您可以了解Windows端集成实时字幕能力的方法。

一、集成说明

请集成3.8.0及以上版本的SDK。

二、实现字幕基本功能

1)在Android端使用字幕功能前,业务服务端需对接完智能纪要功能,并通过StartCloudNote接口启动。

2)按照“快速入门”部分的说明,完成引擎的创建、加入频道、发布和订阅音视频流。

3)获取字幕管理器

ding::rtc::RtcEngineSubtitleManager *subtitleEngine = rtcEngine->GetSubtitleManager();

4)设置发言语言类型

subtitleEngine->SetCurrentSpeakLanguage("zh");

5)设置翻译语言列表

int languageSize = 1;
const char **langs_c = (const char **) malloc(sizeof(char *) * (languageSize + 1));
langs_c[0] = "zh";
subtitleEngine->SetCurrentTranslateLanguages(langs_c, languageSize);

6)设置字幕监听器

// 实现字幕观察者接口
class MySubtitleObserver : public ding::rtc::RtcEngineSubtitleObserver {
public:
    // 语言列表更新回调
    void OnLanguageListsUpdated() override {
        std::cout << "Language lists updated. Please refresh the language list." << std::endl;
    }

    // 字幕服务状态变化回调
    void OnSubtitleServiceStatusChanged(ding::rtc::RtcEngineSubtitleStatus status) override {
        std::cout << "Subtitle service status changed to: " << static_cast<int>(status) << std::endl;
    }

    // 字幕消息回调
    void OnSubtitleMessage(const ding::rtc::RtcEngineSubtitleMessage &message) override {
        std::cout << "Received subtitle message: " << message.text << std::endl;
    }
};


MySubtitleObserver* observer = new MySubtitleObserver();
subtitleManager->RegisterSubtitleObserver(observer);

7)开启字幕

subtitleEngine->EnableSubtitle(true);

三、Windows C++接口说明

1)字幕管理器

class RtcEngineSubtitleManager {
public:
    /*!
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 字幕语言枚举回调
     * @param context 用户自定义上下文
     * @param language 语言类型
     * @return 返回true继续, 返回false停止
     */
    using EnumLanguageCallback = bool(*) (void *context, const char *language);

    /**
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 枚举支持的发言语言列表。
     * @param cb 回调函数
     * @param context 用户自定义上下文, 在回调函数中返回给用户
     */
    virtual void EnumerateSpeakLanguages(EnumLanguageCallback cb, void *context) const = 0;

    /**
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 选择发言语言类型。
     * @param language 语言类型。
     * @return
     * - 0:成功;
     * - 非0:失败。
     */
    virtual int SetCurrentSpeakLanguage(const char *language) = 0;

    /**
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 枚举支持的翻译语言列表。
     * @param cb 回调函数
     * @param context 用户自定义上下文, 在回调函数中返回给用户
     */
    virtual void EnumerateTranslateLanguages(EnumLanguageCallback cb, void *context) const = 0;

    /**
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 选择翻译语言类型。
     * @param languages 语言类型数组。
     * @param number 语言类型数量。
     * @return
     * - 0:成功;
     * - 非0:失败。
     */
    virtual int SetCurrentTranslateLanguages(const char *languages[], int number) = 0;

    /**
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 注册字幕观察类对象。
     * @param observer 字幕观察类对象指针。
     * @return
     * - 0:成功;
     * - 非0:失败。
     * @note 要移除observer,调用RegisterSubtitleObserver(NULL)。
     */
    virtual int RegisterSubtitleObserver(RtcEngineSubtitleObserver *observer) = 0;

    /**
     * @ingroup CPP_DingRtcEngineSubtitle
     * @since 3.8
     * @brief 是否开启字幕。
     * @param enable
     * - 是否开启/关闭字幕。
     * - true:开启字幕。
     * - false:关闭字幕。
     * @return
     * - 0:设置成功;
     * - <0:设置失败,返回错误码。
     * @note SDK默认设置不开启字幕。在开启字幕前,请调用字幕管理类接口进行设置。
     */
    virtual int EnableSubtitle(bool enable) = 0;
};

2)字幕监听器

class RtcEngineSubtitleObserver {
public:
    virtual ~RtcEngineSubtitleObserver() {}

    /**
     * @brief 语言列表更新回调。
     * @details 语言列表有更新时,通过此接口通知到业务层重新获取语言列表。
     * @since 3.8
    */
    virtual void OnLanguageListsUpdated() = 0;

    /**
     * @brief 字幕服务状态变化通知。
     * @details 字幕服务状态有变化时,通过此接口回调到业务层。
     * @param status 字幕服务状态,详见{@link RtcEngineSubtitleStatus}。
     * @since 3.8
    */
    virtual void OnSubtitleServiceStatusChanged(RtcEngineSubtitleStatus status) = 0;

    /**
     * @brief 字幕消息回调。
     * @details 所有字幕消息都通过此接口回调到业务层。
     * @param message 字幕消息,详见{@link RtcEngineSubtitleMessage}。
     * @since 3.8
    */
    virtual void OnSubtitleMessage(const RtcEngineSubtitleMessage &message) = 0;
}

3)相关数据类

enum RtcEngineSubtitleStatus {
    /** 字幕服务开启。 */
    RtcEngineSubtitleStatusOpen = 0,
    /** 字幕服务关闭。 */
    RtcEngineSubtitleStatusClose = 1,
    /** 字幕服务出错。 */
    RtcEngineSubtitleStatusError = 2
};

struct RtcEngineSubtitleMessage {
    /** 字幕用户ID。 */
    const char* userId = nullptr;
    /** 字幕内容。 */
    const char* subtitle = nullptr;
    /** 字幕句子序列号。 */
    uint64_t sentenceIndex = 0;
    /** 字幕句子结束标识。 */
    bool sentenceEnd = false;
    /** 翻译字幕标识。 */
    bool translate = false;
    /** 字幕语言类型。 */
    const char* language = nullptr;
    /** 字幕句子开始时间。 */
    uint64_t beginTime = 0;
    /** 字幕句子结束时间。 */
    uint64_t endTime = 0;
};
  • 本页导读 (0)
  • 一、集成说明
  • 二、实现字幕基本功能
  • 三、Windows C++接口说明