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_expire 或 on_token_expired 时,把续签任务投递到设备业务线程。业务线程重新请求自己的业务服务端,取得新 Token 后调用 TiStoreServiceUpdateToken();不要在回调线程中执行阻塞网络请求。
初始化 SDK 并启动上传服务
- 使用
TISTORE_OPTIONS_INITIALIZER初始化进程配置,并调用TiStoreInit()。 - 使用
TISTORE_SERVICE_OPTIONS_INITIALIZER初始化 Service 配置。设置device_secret_key、队列、缓存与回调后,调用TiStoreServiceCreate(device_id, &options)。 - 调用
TiStoreServiceUpdateToken()设置device_access_token。 - 调用
TiStoreServiceStart()。启动后才可以写帧和提交上传请求。 - 退出前等待每个上传请求的
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 后才可以提交上传请求和写帧。完整上传、最终结果判断与释放顺序见上传录像。