1,用SDK的websocket,当ENABLE_WEBSOCKET为1时表示使能可用
2,目前发布的SDK支持Authorization: Bearer的设置,接口websocket_client_set_token
3,目前不支持文本还是二进制类型,对外的接收回调统一是数据,而且应用层应该不需要感知这个的,如果实在需要建议从你们业务报文上做个字段区分。
涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
-
zhengmin4516
- Posts: 7
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
应用层真需要的,对接某些 ai大模型接口,它的音频下发是直接传二进制音频数据过来的
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
这个没关系呀,收完数据后处理就行
-
zhengmin4516
- Posts: 7
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
我意思是接收到有文本和二进制数据两种数据,我得区分是哪种然后用不同的程序逻辑去处理
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
针对第14楼关于"区分文本帧和二进制帧"的追问,以下是代码层面的分析:
根因说明(已查源码)
当前 websocket_client.h 的回调消息结构如下:
代码:全选
typedef struct {
websocket_client_event_t event; // 事件类型(RECV_DATA / CONNECT / DISCONNECT 等)
uint8_t *data;
uint32_t len;
} websocket_client_msg_t;
底层 websocket_client.c 中已正确解析了 opcode(0x01=文本, 0x02=二进制),但 WEBSOCKET_OPCODE_TEXT 和 WEBSOCKET_OPCODE_BIN 两个 case 都统一赋值 msg.event = WEBSOCKET_RECV_DATA_EVENT,opcode 值未往上透传,所以应用层目前确实无法通过回调区分帧类型。
fangweng 说的没错,这是当前 SDK 的已知限制。
可行的应用层替代方案
针对"AI 大模型音频下发(二进制)+ 文本控制(JSON)"这个典型场景:
方案一:内容嗅探(JSON 检测)
代码:全选
void ws_event_cb(websocket_client_msg_t *msg, void *priv) {
if (msg->event != WEBSOCKET_RECV_DATA_EVENT) return;
// 文本帧的第一个字节一定是 ASCII 可打印字符(如 '{', '[', '"')
// 二进制音频帧第一个字节通常是 0x000x1F 或特定格式头
if (msg->len > 0 && msg->data[0] == '{') {
// 文本 JSON 消息
handle_text_message(msg->data, msg->len);
} else {
// 二进制音频数据
handle_audio_data(msg->data, msg->len);
}
}
方案二:协议前置字节(自定义帧头)
发送端在每帧最前面加 1 字节类型标识:
代码:全选
#define FRAME_TYPE_TEXT 0x01
#define FRAME_TYPE_BINARY 0x02
// 发送文本时
uint8_t buf[MAX_LEN + 1];
buf[0] = FRAME_TYPE_TEXT;
memcpy(buf + 1, json_str, json_len);
websocket_client_send_text(ws_client, buf, json_len + 1);
// 接收端
uint8_t frame_type = msg->data[0];
uint8_t *payload = msg->data + 1;
uint32_t payload_len = msg->len - 1;
注意:此方案需要你控制服务端,或服务端配合加头。
功能增强建议
如果对接的 AI 服务端是第三方(无法修改协议),则需要 SDK 在 websocket_client_msg_t 中增加 opcode/frame_type 字段。
可以通过官方工单(涂鸦开发者支持)提交 Feature Request,说明场景:
"对接第三方 AI 大模型 WebSocket 接口,服务端混合下发文本(JSON 控制指令)和二进制(PCM/Opus 音频流),需要应用层能通过回调区分帧类型。"
以上内容由 AI 自动分析生成,如有疑问请回复补充。