Skip to content

C SDK 接入

下载并选择二进制库

下载 C SDK选择与目标操作系统、CPU 架构和工具链匹配的下载包。云存储与实时音视频能力位于同一个 SDK 包;同一工程必须使用同一份下载包中的头文件和二进制库。

引入头文件和二进制库

把交付包的 include 目录加入编译器头文件搜索路径,把目标架构的库加入链接参数。业务代码引用公共头文件:

c
#include "tistore.h"

运行前确认动态库搜索路径和目标环境一致,并记录 TiStoreGetVersion()TiStoreGetBuildInfo() 的结果。

读取设备身份并请求 Token

设备需要三个值:

来源设备怎样使用
device_id设备注册或交付流程提供的既有设备标识按项目已经确认的配置或灌装方式加载;不要在固件中自行生成一个新值
device_secret_key设备注册或交付流程与 device_id 配套提供的既有密钥从对应设备的受控存储加载;只进入确有需要的设备管理流程,不通过普通业务日志、客户端或前端页面传递
device_access_token业务服务端调用 /issue-device-access-token 签发设备先用产品已有的设备鉴权方式请求自己的业务服务端,再接收服务端返回的 Token 和过期时间

C SDK 不会替设备登录业务系统,也不会主动请求业务服务端。设备应用需要实现这段网络交互;请求路径、协议和设备鉴权方式由你的业务系统定义。业务服务端确认设备身份后,使用应用级凭证调用 HTTP API,并且只向设备返回 device_access_token、过期时间和业务需要的保存策略信息。

不要让设备直接调用需要 AccessKeySecret 签名的 HTTP API。AccessKeySecret 只能留在可信业务服务端,不能写进固件。

SDK 触发 on_token_will_expireon_token_expired 时,把续签任务投递到设备业务线程。业务线程重新请求自己的业务服务端,取得新 Token 后调用 TiStoreServiceUpdateToken();不要在回调线程中执行阻塞网络请求。

初始化 SDK 并启动上传服务

  1. 使用 TISTORE_OPTIONS_INITIALIZER 初始化进程配置,并调用 TiStoreInit()
  2. 使用 TISTORE_SERVICE_OPTIONS_INITIALIZER 初始化 Service 配置。设置 device_secret_key、队列、缓存与回调后,调用 TiStoreServiceCreate(device_id, &options)
  3. 调用 TiStoreServiceUpdateToken() 设置 device_access_token
  4. 调用 TiStoreServiceStart()。启动后才可以写帧和提交上传请求。
  5. 退出前等待每个上传请求的 on_result,再停止和销毁 Service,最后调用 TiStoreUninit()

TiStoreServiceStop() 会立即中止活动任务,不会替应用等待上传排空。

最小初始化代码:

c
#include "tistore.h"

static int start_tistore(
    const char *device_id,
    const char *device_secret_key,
    const char *device_access_token
) {
    struct TiStoreOptions options = TISTORE_OPTIONS_INITIALIZER;
    int rc = TiStoreInit(&options);
    if (rc != TISTORE_OK) {
        return rc;
    }

    struct TiStoreServiceOptions service =
        TISTORE_SERVICE_OPTIONS_INITIALIZER;
    service.device_secret_key = device_secret_key;
    int service_id = TiStoreServiceCreate(device_id, &service);
    if (service_id < 0) {
        TiStoreUninit();
        return service_id;
    }

    rc = TiStoreServiceUpdateToken(service_id, device_access_token);
    if (rc == TISTORE_OK) {
        rc = TiStoreServiceStart(service_id);
    }
    if (rc != TISTORE_OK) {
        TiStoreServiceDestroy(service_id);
        TiStoreUninit();
        return rc;
    }
    return service_id;
}

TiStoreServiceStart() 返回 TISTORE_OK 后才可以提交上传请求和写帧。完整上传、最终结果判断与释放顺序见上传录像

TiStore 开发文档