在设备端工程中接入 TiRTC C SDK,并准备初始化代码骨架。
获取二进制库
先从下载 C SDK获取匹配的 C SDK。
拿到压缩包后,不要只拷贝 include/ 和 lib/。请先完整查看包内 README.md、manifest/ 以及包内声明的构建契约文件,再开始接入。对 MCU / RTOS / mini 预编译包,这些文件和头文件一起构成运行合同;如果只按本文的通用初始化步骤接入,可能出现“编译通过,但运行时因 RTOS、PSRAM、线程栈、socket 或板级网络前置条件不匹配而崩溃”的情况。
不同平台的库文件名会有差异,但对外 C API 入口一致。以 Linux x86_64 标准包为例,解压后目录结构如下:
tirtc-c-sdk/
|-- include/
| `-- tirtc/
| |-- basedef.h
| `-- tiRTC.h
`-- lib/
|-- libTiRTC.a
`-- libTiRTC.so业务代码只需要包含 include/tirtc/tiRTC.h。basedef.h 是 tiRTC.h 依赖的公开头文件,需要和 tiRTC.h 一起保留在 include/tirtc/ 目录下。
在工程中引用
把 SDK 的 include/ 目录加入头文件搜索路径,然后链接包内提供的 TiRTC 入口库。
业务代码推荐这样包含头文件:
#include <tirtc/tiRTC.h>Linux 标准包提供两种接入方式:
- 静态接入:编译期链接
lib/libTiRTC.a。 - 动态接入:编译期链接
lib/libTiRTC.so,运行时确保程序能找到这个.so文件,例如放在系统库目录、程序约定的库目录,或配置LD_LIBRARY_PATH/ rpath。
其他设备平台包通常提供静态库,按静态链接接入即可。
初始化 SDK
TiRtcInit() 用来初始化 SDK 运行时,函数内部无网络交互,可以在设备连通互联网之前调用。
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <tirtc/tiRTC.h>
static volatile sig_atomic_t g_should_exit = 0;
static void on_signal(int signo)
{
(void)signo;
g_should_exit = 1;
}
int main(int argc, char **argv)
{
signal(SIGINT, on_signal);
signal(SIGTERM, on_signal);
if (TiRtcInit() != 0) {
return 1;
}
while (!g_should_exit) {
sleep(1);
}
TiRtcUninit();
return 0;
}为 4G 设备补充网络初始化配置
SDK 无法感知设备当前网络的访问限制,因此需要你在 TiRtcStart() 前主动提供相关网络信息。SDK 会根据这些信息适配对应网络。
部分 4G 定向卡会通过域名或 IP 地址白名单限制设备可以访问的地址。这类网络也常被称为 4G 白名单网络,本文统一称为受限网络。
通过 TiRtcSetOption 设置 TIRTC_OPT_RESTRICTED_NETWORK,可以把这类访问限制告诉 SDK。设备直接使用受限的物联网卡,或者通过 Wi-Fi 接入使用此类物联网卡的路由器,都应设置为 1;普通 4G 网络设置为 0。如果你不清楚当前网络的访问限制,可以向 SIM 卡运营商或方案商确认。
设备直接使用 4G 网络时,还需要设置 TIRTC_OPT_NETWORK_TYPE 和 TIRTC_OPT_ICCID。TIRTC_OPT_NETWORK_TYPE 只描述设备自身直接使用的联网方式。设备连接 Wi-Fi 时应设置为 TIRTC_NETCONN_WIFI,即使上游路由器通过 4G 联网,也不要设置为 TIRTC_NETCONN_4G。
TIRTC_OPT_ICCID 只填写设备直接使用的 4G SIM 卡 ICCID。设备通过 Wi-Fi 联网时,不填写上游路由器内 SIM 卡的 ICCID。
| 设备联网场景 | TIRTC_OPT_NETWORK_TYPE | TIRTC_OPT_ICCID | TIRTC_OPT_RESTRICTED_NETWORK |
|---|---|---|---|
| 普通 4G 网络 | TIRTC_NETCONN_4G | 当前 SIM 卡 ICCID,必填 | 显式设置为 0 |
| 受限网络,设备直接通过 4G 联网 | TIRTC_NETCONN_4G | 当前 SIM 卡 ICCID,必填 | 显式设置为 1 |
| 受限网络,设备通过 Wi-Fi 接入 | TIRTC_NETCONN_WIFI | 不需要提供路由器内 SIM 卡的 ICCID | 设置为 1 |
下面的示例适用于设备直接使用 4G SIM 卡联网:
static int set_4g_network_options(const char *iccid, int restricted_network)
{
int network_type = TIRTC_NETCONN_4G;
int code;
if (iccid == NULL || iccid[0] == '\0') {
return TIRTC_E_INVALID_PARAMETER;
}
if (restricted_network != 0 && restricted_network != 1) {
return TIRTC_E_INVALID_PARAMETER;
}
code = TiRtcSetOption(TIRTC_OPT_NETWORK_TYPE, &network_type,
(uint32_t)sizeof(network_type));
if (code != 0) {
return code;
}
code = TiRtcSetOption(TIRTC_OPT_ICCID, iccid,
(uint32_t)strlen(iccid));
if (code != 0) {
return code;
}
return TiRtcSetOption(TIRTC_OPT_RESTRICTED_NETWORK,
&restricted_network,
(uint32_t)sizeof(restricted_network));
}调用顺序为:TiRtcInit() → 设置上述三个网络选项 → TiRtcStart()。
下一步
完成 C SDK 引用和初始化后,继续参考建立与设备端的连接,完成 device_secret_key、client_id 设置、TiRtcStart() 启动和客户端建连处理。