1. 交付内容
talite_xrstream.h:Context、连接、回调、H.265 裸流和数据通信接口。talite_xrstream.so(目前仅支持arm-v8)
2. 公共类型
typedef void* TALITE_CONTEXT;
typedef enum talite_result_ {
talite_result_success = 0,
talite_result_invalid_param = 1,
talite_result_not_initialized = 2,
talite_result_not_connected = 3,
talite_result_transport_not_supported = 4,
talite_result_already_active = 5,
talite_result_out_of_memory = 6,
talite_result_internal_error = 7
} talite_result;
typedef struct talite_h265_stream_params_ {
const uint8_t* data;
size_t size;
uint64_t timestamp_us;
bool key_frame;
} talite_h265_stream_params;
typedef void (*talite_on_h265_stream)(
const talite_h265_stream_params* params
);
回调参数中的 H.265 Annex-B 裸流数据仅在本次回调期间有效。如需异步处理,应由调用方复制参数结构体及其数据内容。
3. 对外方法
3.1 初始化与生命周期
TALITE_API TALITE_CONTEXT DC_CALL talite_create_context(void);
TALITE_API talite_result DC_CALL talite_stop(TALITE_CONTEXT context);
TALITE_API talite_result DC_CALL talite_destroy_context(TALITE_CONTEXT context);
3.2 设备发现
TALITE_API talite_result DC_CALL talite_discover_devices(void);
调用该方法开始发现设备。发现结果通过设备列表回调返回;外部应用应先完成设备发现,再从列表中选择设备并建立连接。
3.3 连接控制
TALITE_API talite_result DC_CALL talite_connect(
TALITE_CONTEXT context,
const char* streamer_ip
);
TALITE_API talite_result DC_CALL talite_disconnect(
TALITE_CONTEXT context
);
talite_disconnect 主动断开当前设备连接并释放信令、音视频以及数据通道资源,但保留 Context 和已注册回调;断开后可再次调用 talite_connect 连接设备。talite_stop 继续保留为兼容接口,行为等同于 talite_disconnect。
3.4 数据发送(开发者自定义的控制面数据,全程透传)
TALITE_API talite_result DC_CALL talite_send_data(
TALITE_CONTEXT context,
const uint8_t* data,
size_t size
);
向当前已连接设备发送原始字节数组。data 指向待发送数据,size 为字节数;调用方应在设备连接成功后调用该方法。
3.5 H.265 裸流回调
TALITE_API talite_result DC_CALL talite_set_h265_stream_callback(
TALITE_CONTEXT context,
talite_on_h265_stream callback
);
SDK 收到视频数据后,通过该回调向上层交付 H.265 Annex-B 裸流。SDK 不负责外部应用的解码与渲染。
3.6 错误回调
typedef void (*talite_on_error)(
TALITE_CONTEXT context,
talite_result result,
const char* message
);
TALITE_API talite_result DC_CALL talite_set_error_callback(
TALITE_CONTEXT context,
talite_on_error callback
);
TALITE_API const char* DC_CALL talite_get_last_error_string(TALITE_CONTEXT context);
参数说明
• context:发生错误的上下文句柄,与 talite_create_context 返回值一致。
• result:错误码,取值见「2. 公共类型」。
• message:可读的错误描述;若无可读信息则为空字符串。
talite_get_last_error_string 用于获取当前 context 最近一次错误的描述字符串;在错误回调外部也可调用。返回的指针在 context 被销毁前有效。
3.7 设备列表回调
typedef struct talite_device_info_ {
const char* device_id;
const char* device_name;
const char* device_ip;
} talite_device_info;
typedef struct talite_device_list_ {
const talite_device_info* devices;
size_t device_count;
} talite_device_list;
typedef void (*talite_on_device_list)(
const talite_device_list* device_list
);
TALITE_API talite_result DC_CALL talite_set_device_list_callback(
TALITE_CONTEXT context,
talite_on_device_list callback
);
3.8 数据回调(相机内外参)
typedef enum talite_data_type_ {
talite_data_type_camera_calibration = 1
} talite_data_type;
typedef struct talite_float_array_ {
const float* data;
size_t size;
} talite_float_array;
typedef struct talite_int32_array_ {
const int32_t* data;
size_t size;
} talite_int32_array;
typedef struct talite_camera_calibration_ {
talite_float_array r_raw_l_row;
talite_float_array r_raw_r_row;
talite_float_array k_l;
talite_float_array k_r;
talite_float_array d_l;
talite_float_array d_r;
talite_int32_array image_size;
talite_float_array yaw_deg;
talite_float_array pitch_deg;
} talite_camera_calibration;
typedef union talite_data_value_ {
talite_camera_calibration camera_calibration;
} talite_data_value;
typedef struct talite_data_ {
talite_data_type type;
talite_data_value value;
} talite_data;
typedef void (*talite_on_data)(const talite_data* data);
TALITE_API talite_result DC_CALL talite_set_data_callback(
TALITE_CONTEXT context,
talite_on_data on_data
);
void on_data(const talite_data* data)
{
if (data == NULL) {
return;
}
switch (data->type) {
case talite_data_type_camera_calibration: {
const talite_camera_calibration* calibration =
&data->value.camera_calibration;
break;
}
default:
break;
}
}
公开字段 | 设备 JSON 字段 | 含义 |
|---|---|---|
r_raw_l_row / r_raw_r_row | RRawL_Row / RRawR_Row | 左右相机外参旋转或校正矩阵,按行展开 |
k_l / k_r | KL / KR | 左右相机内参矩阵 |
d_l / d_r | DL / DR | 左右相机畸变参数 |
image_size | ImgSize | 图像尺寸 |
yaw_deg / pitch_deg | YawDeg / PitchDeg | 相机水平和垂直角度参数 |
生命周期说明:回调参数 talite_data 及其中的相机参数数组指针仅在本次回调期间有效。回调返回后 SDK 会释放临时解析结果;如需异步使用,调用方必须复制结构体及数组内容。调用方根据 data->type 读取 data->value 中对应的联合体成员;当前仅支持 camera_calibration。
设备列表及其中的字符串指针仅在本次回调期间有效。如需异步处理,应由调用方复制。
3.9 音频控制
SDK 提供双向 Opus 音频通道,支持音频播放(下行)与采集(上行)的独立控制,以及运行状态查询
typedef struct talite_audio_status_ {
int transport_supported;
int channel_supported;
int receiving_audio;
int pushing_audio;
int playback_created;
int playback_paused;
int capture_created;
int capture_paused;
int capture_start_allowed;
uint64_t rx_pkts;
uint64_t rx_bytes;
uint64_t tx_pkts;
uint64_t tx_bytes;
uint64_t last_rx_timestamp_ms;
uint64_t last_tx_timestamp_ms;
uint64_t rx_age_ms;
uint64_t tx_age_ms;
uint64_t capture_callback_calls;
uint64_t capture_callback_frames;
uint64_t capture_callback_samples;
uint64_t capture_callback_bytes;
uint64_t capture_callback_nonzero_samples;
uint64_t capture_encode_skipped_callbacks;
uint64_t capture_encoded_pkts;
uint64_t capture_encoded_bytes;
uint64_t capture_send_skipped;
uint64_t capture_last_callback_timestamp_ms;
uint64_t capture_last_nonzero_timestamp_ms;
uint64_t capture_last_encoded_timestamp_ms;
uint64_t capture_last_send_skipped_timestamp_ms;
uint64_t capture_callback_age_ms;
uint64_t capture_nonzero_age_ms;
uint64_t capture_encoded_age_ms;
float playback_volume;
int playback_muted_by_volume;
} talite_audio_status;
TALITE_API talite_result DC_CALL talite_get_audio_status(
TALITE_CONTEXT context,
talite_audio_status* out
);
TALITE_API void DC_CALL talite_pause_audio_playback(TALITE_CONTEXT context);
TALITE_API void DC_CALL talite_resume_audio_playback(TALITE_CONTEXT context);
TALITE_API talite_result DC_CALL talite_set_audio_playback_volume(
TALITE_CONTEXT context,
float volume
);
TALITE_API void DC_CALL talite_pause_audio_capture(TALITE_CONTEXT context);
TALITE_API void DC_CALL talite_resume_audio_capture(TALITE_CONTEXT context);
字段 | 含义 |
|---|---|
transport_supported | 音频传输通道是否可用(1=可用,0=不可用) |
channel_supported | 音频通道是否已创建(1=已创建,0=未创建) |
receiving_audio | 是否正在接收音频(最近 2 秒内有收包) |
pushing_audio | 是否正在发送音频(最近 2 秒内有发包) |
playback_created / playback_paused | 播放通道是否已创建 / 是否已暂停 |
capture_created / capture_paused | 采集通道是否已创建 / 是否已暂停 |
capture_start_allowed | 是否允许启动采集 |
rx_pkts / rx_bytes | 累计接收包数 / 字节数 |
tx_pkts / tx_bytes | 累计发送包数 / 字节数 |
last_rx_timestamp_ms / last_tx_timestamp_ms | 最近收 / 发包时间戳(毫秒) |
rx_age_ms / tx_age_ms | 距最近收 / 发包的毫秒数 |
capture_callback_calls / frames / samples / bytes | 采集回调的调用次数 / 帧数 / 采样数 / 字节数 |
capture_callback_nonzero_samples | 采集回调中非零采样数 |
capture_encode_skipped_callbacks | 编码被跳过的回调次数 |
capture_encoded_pkts / bytes | 已编码包数 / 字节数 |
capture_send_skipped | 发送被跳过次数 |
capture_last_callback_timestamp_ms | 最近一次采集回调时间戳(毫秒) |
capture_last_nonzero_timestamp_ms | 最近一次非零采样时间戳(毫秒) |
capture_last_encoded_timestamp_ms | 最近一次编码时间戳(毫秒) |
capture_last_send_skipped_timestamp_ms | 最近一次发送跳过时间戳(毫秒) |
capture_callback_age_ms / nonzero_age_ms / encoded_age_ms | 距最近回调 / 非零采样 / 编码的毫秒数 |
playback_volume | 当前播放音量(0.0 ~ 1.0) |
playback_muted_by_volume | 是否因音量为 0 而被静音(1=是,0=否) |
方法说明
- talite_get_audio_status:获取音频通道运行状态统计。
out由调用方分配,SDK 填充;返回talite_result_success表示成功。 - talite_pause_audio_playback / talite_resume_audio_playback:暂停 / 恢复音频播放(下行)。resume 时会按需建立音频传输。
- talite_set_audio_playback_volume:设置播放音量,
volume取值范围 [0.0, 1.0]。 - talite_pause_audio_capture / talite_resume_audio_capture:暂停 / 恢复音频采集(上行)。resume 时会按需建立音频传输并启动采集。
3.10 视频编码码率控制
SDK 提供视频编码码率动态调整能力。连接前调用时,码率随握手 viewconfig 生效;连接中调用时,会立即重发 viewconfig 通知服务端编码器改码率。
// 视频编码码率钳制范围(单位 kbps)。0 表示恢复 SDK 默认码率。
#define TALITE_VIDEO_BITRATE_DEFAULT_KBPS 8000
#define TALITE_VIDEO_BITRATE_MIN_KBPS 2000
#define TALITE_VIDEO_BITRATE_MAX_KBPS 200000
// 设置视频编码码率(单位 kbps,超出范围时自动钳制,传 0 恢复默认值)。
// 返回值为实际生效的码率(写入 out_applied_kbps,可为 NULL)。
TALITE_API talite_result DC_CALL talite_set_video_bitrate_kbps(
TALITE_CONTEXT context,
uint32_t bitrate_kbps,
uint32_t* out_applied_kbps
);
方法说明
- talite_set_video_bitrate_kbps:设置视频编码码率。码率超出 [2000, 200000] 范围时自动钳制;传 0 恢复 SDK 默认码率 8000 kbps。连接前调用时码率随握手生效;连接中调用时立即通知服务端编码器改码率。
out_applied_kbps可为 NULL,成功时返回talite_result_success。
宏 / 参数 | 含义 |
|---|---|
TALITE_VIDEO_BITRATE_DEFAULT_KBPS | SDK 默认码率(8000 kbps) |
TALITE_VIDEO_BITRATE_MIN_KBPS | 最小码率(2000 kbps) |
TALITE_VIDEO_BITRATE_MAX_KBPS | 最大码率(200000 kbps) |
bitrate_kbps | 目标码率(kbps),0 表示恢复默认 |
out_applied_kbps | 实际生效码率(可为 NULL) |
3.11 遥测相关
SDK 提供一条独立于主流媒体通道的遥测数据通道,用于应用自定义的双向数据收发。SDK 只负责搬运原始字节,消息语义(JSON、二进制协议等)由应用层定义。
// 连接状态
typedef enum talite_telemetry_state_ {
talite_telemetry_state_disconnected = 0,
talite_telemetry_state_connecting = 1,
talite_telemetry_state_connected = 2
} talite_telemetry_state;
// 帧类型(区分文本帧 / 二进制帧)
typedef enum talite_telemetry_frame_type_ {
talite_telemetry_frame_binary = 0,
talite_telemetry_frame_text = 1
} talite_telemetry_frame_type;
// 入站帧回调。data 在回调期间有效,回调返回后可能被释放。
typedef void (*talite_on_telemetry)(
talite_telemetry_frame_type frame_type,
const uint8_t* data,
size_t size
);
// 连接状态变化回调。
typedef void (*talite_on_telemetry_state)(
talite_telemetry_state state,
const char* url
);
// 注册入站帧回调。传 nullptr 清除。
TALITE_API talite_result DC_CALL talite_set_telemetry_callback(
TALITE_CONTEXT context,
talite_on_telemetry callback
);
// 注册连接状态回调。传 nullptr 清除。
TALITE_API talite_result DC_CALL talite_set_telemetry_state_callback(
TALITE_CONTEXT context,
talite_on_telemetry_state callback
);
// 发送原始字节。未连接时返回 talite_result_not_connected。
TALITE_API talite_result DC_CALL talite_send_telemetry(
TALITE_CONTEXT context,
talite_telemetry_frame_type frame_type,
const uint8_t* data,
size_t size
);
方法说明
- talite_set_telemetry_callback:注册入站帧回调。每收到一帧(文本或二进制)都会触发一次回调。建议在
talite_create_context之后、talite_connect之前注册。传nullptr清除回调。 - talite_set_telemetry_state_callback:注册连接状态变化回调。状态切换(disconnected → connecting → connected,或反向)时触发,
url为当前连接的通道地址。 - talite_send_telemetry:通过遥测通道发送原始字节。
frame_type指示数据为文本或二进制;data会被拷贝,调用返回后可立即释放。未连接时返回talite_result_not_connected。
字段 | 含义 |
|---|---|
talite_telemetry_state_disconnected | 未连接(初始状态或断开后) |
talite_telemetry_state_connecting | 正在连接 / 重连中 |
talite_telemetry_state_connected | 已连接,可收发数据 |
talite_telemetry_frame_text | 文本帧,payload 为 UTF-8 文本 |
talite_telemetry_frame_binary | 二进制帧,payload 为原始字节 |
3.12 FEC 统计查询
视频下行启用 Talite RS-FEC 后,SDK 提供丢包率查询接口,返回自本次 stream 启动以来的累计丢包率,用于评估下行链路质量与 FEC 生效情况。
// 视频下行 FEC 统计快照(自本次 stream 启动累计)。
typedef struct talite_video_fec_stats_ {
float loss_rate_percent; // 丢包率(百分比,0~100)
} talite_video_fec_stats;
// 查询当前视频下行 FEC 丢包率。
TALITE_API talite_result DC_CALL talite_get_video_fec_stats(
TALITE_CONTEXT context,
talite_video_fec_stats* out
);
方法说明
- talite_get_video_fec_stats:查询视频下行自本次 stream 启动以来的累计丢包率
字段 | 含义 |
|---|---|
loss_rate_percent | 视频下行丢包率(百分比,0~100),自本次 stream 启动累计 |
4. 调用顺序
- 调用
talite_create_context创建 Context。 - 调用
talite_set_h265_stream_callback注册 H.265 裸流回调。 - 调用
talite_set_error_callback注册错误回调。 - 调用
talite_set_device_list_callback注册设备列表回调。 - 调用
talite_set_data_callback注册统一数据回调,以接收相机内外参等结构化设备数据。 - 调用
talite_discover_devices开始发现设备,并等待设备列表回调。 - 从设备列表中选择目标设备,调用
talite_connect建立连接。 - 连接成功后,可调用
talite_send_data发送原始字节数据;如需音频,调用 talite_resume_audio_playback / talite_resume_audio_capture 启用音频通道,并通过 talite_get_audio_status 查询运行状态;如需监控下行链路质量,可周期性调用 talite_get_video_fec_stats 查询视频 FEC 丢包率;如需调整视频编码码率,可调用 talite_set_video_bitrate_kbps 设置目标码率。 - 结束连接时调用
talite_disconnect;不再使用 Context 时再调用talite_destroy_context。