components/common/ 是项目自己写的代码 (火山 RTC SDK 的 wrapper + HTTP 客户端 + JSON 工具 + 设备管理), 历史上被 .gitignore 的 components/ 规则误排除。共 15 个文件 2750 行项目代码长期未被 git 跟踪, 修改易丢失, 不利于多设备开发和回溯。 主要变动: 1. .gitignore - 改 components/ → /components/* (顶层 children 而非目录本身) - 加 !/components/common/ 例外, 让项目自己代码进入跟踪 - 加 esp-spot/**/components/ 显式 ignore 子项目里的 components/ 保持原行为 2. components/common/ 首次入 git (~2750 行) - inc/volc_rtc.h, src/volc_rtc.c — 火山 RTC SDK 的封装层 - inc/volc_http.h, src/volc_http.c — HTTP 客户端 - inc/util/volc_json.h, src/volc_json.c — JSON 工具 - inc/base/volc_device_manager.h, src/volc_device_manager.c — RTC 设备凭证管理 - inc/util/volc_log.h — 日志宏 - inc/util/volc_list.h — 链表工具 - inc/volc_conv_ai.h — 会话 AI 接口定义 - inc/volc_platform.h, src/volc_platform.c — 平台抽象 - inc/base/volc_base.h — 基础类型 未跟踪的兄弟目录 (保持 ignore): - components/78__esp-opus-encoder/ (IDF managed component) - components/volc_engine_rtc_lite/ (火山 RTC SDK 二进制库) - components/zlib/ (第三方库) 后续 fix(rtc) NULL guard 等 components/common/ 的改动将作为独立 commit。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
166 lines
5.0 KiB
C
166 lines
5.0 KiB
C
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
|
||
// SPDX-License-Identifier: Apache-2.0
|
||
|
||
#ifndef __VOLC_CONV_AI_H__
|
||
#define __VOLC_CONV_AI_H__
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
#include <stdbool.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define __volc_rt_api__ __attribute__((visibility("default")))
|
||
|
||
#define VOLC_VERSION_MAJOR 1
|
||
#define VOLC_VERSION_MINOR 0
|
||
#define VOLC_VERSION_PATCH 0
|
||
#define VOLC_VERSION_CHECK(major, minor, patch) ((major * 10000U) + (minor * 100U) + patch)
|
||
#define VOLC_VERSION VOLC_VERSION_CHECK(VOLC_VERSION_MAJOR, VOLC_VERSION_MINOR, VOLC_VERSION_PATCH)
|
||
|
||
typedef enum {
|
||
VOLC_ERR_NO_ERROR = 0,
|
||
VOLC_ERR_FAILED = -1,
|
||
VOLC_ERR_LICENSE_EXHAUSTED = -10,
|
||
VOLC_ERR_LICENSE_EXPIRED = -11,
|
||
} volc_error_code_e;
|
||
|
||
typedef enum {
|
||
VOLC_AUDIO_DATA_TYPE_UNKNOWN = 0,
|
||
VOLC_AUDIO_DATA_TYPE_OPUS = 1,
|
||
VOLC_AUDIO_DATA_TYPE_G722 = 2,
|
||
VOLC_AUDIO_DATA_TYPE_AACLC = 3,
|
||
VOLC_AUDIO_DATA_TYPE_G711A = 4,
|
||
VOLC_AUDIO_DATA_TYPE_PCM = 5,
|
||
VOLC_AUDIO_DATA_TYPE_G711U = 6,
|
||
} volc_audio_data_type_e;
|
||
|
||
typedef enum {
|
||
VOLC_AUDIO_CODEC_TYPE_UNKNOWN = 0,
|
||
VOLC_AUDIO_CODEC_TYPE_OPUS = 1,
|
||
VOLC_AUDIO_CODEC_TYPE_G722 = 2,
|
||
VOLC_AUDIO_CODEC_TYPE_AACLC = 3,
|
||
VOLC_AUDIO_CODEC_TYPE_G711A = 4,
|
||
VOLC_AUDIO_CODEC_TYPE_G711U = 5,
|
||
} volc_audio_codec_type_e;
|
||
|
||
typedef struct {
|
||
volc_audio_data_type_e data_type;
|
||
// uint16_t sent_ts;
|
||
bool commit;
|
||
} volc_audio_frame_info_t;
|
||
|
||
typedef enum {
|
||
VOLC_VIDEO_CODEC_TYPE_UNKNOWN = 0,
|
||
VOLC_VIDEO_CODEC_TYPE_H264 = 1,
|
||
VOLC_VIDEO_CODEC_TYPE_BYTEVC1 = 2,
|
||
} volc_video_codec_type_e;
|
||
|
||
typedef enum {
|
||
VOLC_VIDEO_DATA_TYPE_UNKNOWN = 0,
|
||
VOLC_VIDEO_DATA_TYPE_H264 = 1,
|
||
VOLC_VIDEO_DATA_TYPE_BYTEVC1 = 2,
|
||
VOLC_VIDEO_DATA_TYPE_I420 = 3,
|
||
} volc_video_data_type_e;
|
||
|
||
typedef enum {
|
||
VOLC_VIDEO_FRAME_TYPE_AUTO = 0,
|
||
VOLC_VIDEO_FRAME_TYPE_KEY = 1,
|
||
VOLC_VIDEO_FRAME_TYPE_DELTA = 2,
|
||
} volc_video_frame_type_e;
|
||
|
||
typedef struct {
|
||
volc_video_data_type_e data_type;
|
||
} volc_video_frame_info_t;
|
||
|
||
typedef enum {
|
||
VOLC_CONV_STATUS_LISTENING = 1,
|
||
VOLC_CONV_STATUS_THINKING,
|
||
VOLC_CONV_STATUS_ANSWERING,
|
||
VOLC_CONV_STATUS_INTERRUPTED,
|
||
VOLC_CONV_STATUS_ANSWER_FINISH,
|
||
} volc_conv_status_e;
|
||
|
||
typedef struct {
|
||
// place holder
|
||
bool is_binary;
|
||
} volc_message_info_t;
|
||
|
||
typedef enum {
|
||
VOLC_DATA_TYPE_AUDIO = 0,
|
||
VOLC_DATA_TYPE_VIDEO,
|
||
VOLC_DATA_TYPE_MESSAGE,
|
||
VOLC_DATA_TYPE_CNT,
|
||
} volc_data_type_e;
|
||
|
||
typedef struct {
|
||
volc_data_type_e type;
|
||
union {
|
||
volc_audio_frame_info_t audio;
|
||
volc_video_frame_info_t video;
|
||
volc_message_info_t message;
|
||
} info;
|
||
} volc_data_info_t;
|
||
|
||
typedef enum {
|
||
VOLC_EV_UNKNOWN = 0, // 未知事件
|
||
VOLC_EV_CONNECTED, // 成功连接
|
||
VOLC_EV_DISCONNECTED, // 断开连接
|
||
} volc_event_code_e;
|
||
|
||
typedef struct {
|
||
volc_event_code_e code; // 包含错误码、告警码、关键事件码等
|
||
union {
|
||
int placeholder;
|
||
} data; // 事件数据,具体内容根据event_code而定
|
||
} volc_event_t;
|
||
|
||
typedef enum {
|
||
VOLC_MODE_RTC = 0,
|
||
VOLC_MODE_WS = 1,
|
||
VOLC_MODE_UNKNOWN,
|
||
} volc_mode_e;
|
||
typedef struct {
|
||
volc_mode_e mode;
|
||
char* bot_id;
|
||
bool wait_for_session_update;
|
||
} volc_opt_t;
|
||
|
||
typedef void* volc_engine_t;
|
||
|
||
typedef struct {
|
||
void (*on_volc_event)(volc_engine_t handle, volc_event_t* event, void* user_data);
|
||
void (*on_volc_conversation_status)(volc_engine_t handle, volc_conv_status_e status, void* user_data);
|
||
void (*on_volc_audio_data)(volc_engine_t handle, const void* data_ptr, size_t data_len, volc_audio_frame_info_t* info_ptr, void* user_data);
|
||
void (*on_volc_video_data)(volc_engine_t handle, const void* data_ptr, size_t data_len, volc_video_frame_info_t* info_ptr, void* user_data);
|
||
void (*on_volc_message_data)(volc_engine_t handle, const void* data_ptr, size_t data_len, volc_message_info_t* info_ptr, void* user_data);
|
||
} volc_event_handler_t;
|
||
|
||
__volc_rt_api__ const char* volc_get_version(void);
|
||
|
||
__volc_rt_api__ const char* volc_err_2_str(int err_code);
|
||
|
||
__volc_rt_api__ int volc_create(volc_engine_t* handle, const char* config_json, volc_event_handler_t* event_handler, void* user_data);
|
||
|
||
__volc_rt_api__ void volc_destroy(volc_engine_t handle);
|
||
|
||
__volc_rt_api__ int volc_start(volc_engine_t handle, volc_opt_t* opt);
|
||
|
||
__volc_rt_api__ int volc_stop(volc_engine_t handle);
|
||
|
||
__volc_rt_api__ int volc_update(volc_engine_t handle, const void* data_ptr, size_t data_len);
|
||
|
||
__volc_rt_api__ int volc_send_audio_data(volc_engine_t handle, const void* data_ptr, size_t data_len, volc_audio_frame_info_t* info_ptr);
|
||
|
||
__volc_rt_api__ int volc_send_video_data(volc_engine_t handle, const void* data_ptr, size_t data_len, volc_video_frame_info_t* info_ptr);
|
||
|
||
__volc_rt_api__ int volc_send_message(volc_engine_t handle, const void* data_ptr, size_t data_len, volc_message_info_t* info_ptr);
|
||
|
||
__volc_rt_api__ int volc_interrupt(volc_engine_t handle);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* __VOLC_CONV_AI_H__ */ |