C Link SDK组件说明

物联网平台提供千里传音组件,该组件基于C Link SDK 4.x实现了一种高级能力,助您快速集成并使用千里传音服务。

功能说明

SDK中组件实现功能如下:

  • 自动下载物联网平台下发的语料。

  • 批量删除语料。

  • 同步或异步组合播报。

获取SDK

  • 获取设备端C Link SDK,解压出文件夹./LinkSDK

  • 下载千里传音组件,解压出文件夹./link-speech

    SDK中涉及的组件接口如下表,详情请参见./link-speech/aiot_linkspeech_api.h

    接口

    说明

    aiot_linkspeech_init()

    初始化千里传音组件。

    aiot_linkspeech_setopt()

    配置千里传音组件参数。

    aiot_linkspeech_start()

    启动千里传音服务。

    aiot_linkspeech_stop()

    退出千里传音服务。

    aiot_linkspeech_deinit()

    反初始化(删除)千里传音组件。

移植说明

完成Link SDK移植:linux/posix/freertos官方已完成移植。

使用说明

功能原理

应用程序通过调用C Link SDK的接口,基于MQTT的协议,与物联网平台建立的连接。

如下功能时序图,以设备的应用程序(./link-speech/demos/link_speech_basic_demo.c)为例,介绍应用程序实现千里传音功能的流程。流程图

步骤一:初始化千里传音组件

/* 组件初始化 */
void *linkspeech_handle = aiot_linkspeech_init();

步骤二:配置组件参数

  1. 配置连接参数,关联MQTT连接。

    千里传音服务依赖设备与物联网平台的MQTT连接,使用该功能前需要先完成MQTT建连。

    1. 设备端C Link SDK建连,请参见MQTT接入

    2. 将千里传音服务与MQTT连接关联。

      /* 关联MQTT */
      aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_MQTT_HANDLE, mqtt_handle);
  2. 配置音频文件目录。

    通过work_dir定义文件目录,语料下载及组合播报时,需使用该目录。

    /* 设置音频文件保存目录 */
    aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_WORK_DIR, (void *)work_dir);
  3. (可选)设置文件下载协议。

    语料下载支持HTTP和HTTPS协议,通过https_enable定义,默认为HTTP。

    HTTP消费更小,HTTPS更安全,您可根据实际环境设置下载协议。

    /* 设置文件下载协议,0:HTTP;1:HTTPS*/
    aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_HTTPS_ENABLE, (void *)&https_enable);
  4. 设置文件系统操作接口。

    组件支持跨平台移植,开发者移植SDK需要实现该接口并设置给组件。

    • 文件系统接口定义

      /**
       * @brief 用以向SDK描述其运行硬件平台的资源如何使用的方法结构体
       */
      typedef struct {
          /**
           * @brief 查询文件大小
           *
           * @return int32_t
           * @retval -1 文件不存在
           * @retval >=0 实际文件大小
           */
          int32_t (*file_size)(char *path);
          /**
           * @brief 删除文件
           *
           * @return int32_t
           * @retval 0 文件删除成功
           * @retval -1 文件修改失败
           */
          int32_t (*file_delete)(char *path);
          /**
           * @brief 写文件数据
           *
           * @details 如果文件不存在,则创建新文件
           * @return int32_t
           * @retval 成功,返回写入的文件长度
           * @retval 失败,返回-1
           */
          int32_t (*file_write)(char *path, uint32_t offset, uint8_t *data, uint32_t len);
          /**
           * @brief 写文件数据
           *
           * @details open操作需用户执行
           * @return int32_t
           * @retval 成功,返回读取到的文件长度
           * @retval 失败,返回-1
           */
          int32_t (*file_read)(char *path, uint32_t offset, uint8_t *data, uint32_t len);
      } aiot_fs_t;
    • 设置文件系统接口

      /* 设置文件系统操作接口 */
      aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_FILE_OPS, (void *)&posix_fs);
  5. 设置音频播放接口实现给组件。

    • 音频播放接口定义

      typedef struct {
          /* 当音频播报结束后执行该回调, 需要带userdata */
          void (*on_finish)(char *filename, void *userdata);
          void *userdata;
      } play_param_t;
      
      /* 设置音频播放回调,该接口不能长时间阻塞 */
      typedef int32_t (*player_cb_t)(char *filename, play_param_t *ext_params);
    • 设置音频播放接口

      /* 设置音频播放接口,音频播放回调内不能长时间阻塞 */
      aiot_linkspeech_setopt(linkspeech_handle, AIOT_LSOPT_PLAYER_CALLBACK, (void *)player);

步骤三:启动千里传音服务

/* 启动千里传音服务,该接口会长时间阻塞 */
aiot_linkspeech_start(linkspeech_handle);

(可选)步骤四:退出千里传音服务

/* 启动千里传音服务,该接口会长时间阻塞 */
aiot_linkspeech_stop(linkspeech_handle);

(可选)步骤五:删除千里传音服务

aiot_linkspeech_deinit(&linkspeech_handle);

使用示例