【征文计划】基于Rokid CXR-M SDK 打造AI 实时会议助手:从连接到自定义界面的完整实践

作者:_摘星_日期:2025/10/6

【征文计划】基于Rokid CXR-M SDK 打造AI 实时会议助手:从连接到自定义界面的完整实践

> **摘要**:本文基于 Rokid CXR-M SDK,详细阐述如何构建一个面向商务会议场景的“AI 实时会议助手”应用。通过手机端与 Rokid 智能眼镜的协同,实现语音转写、要点提炼、提词引导、多语翻译与会后纪要自动生成。文章涵盖从环境配置、蓝牙/Wi-Fi 连接、设备控制、AI 场景交互到自定义 UI 渲染的完整开发流程,并提供关键代码示例与最佳实践建议。 > > ![](https://cdn.nlark.com/yuque/0/2025/png/27326384/1759117435499-9f4267cc-0ee7-4691-8e6e-b0506334efd7.png) >


一、引言:为什么需要一个“AI 会议助手”?

在快节奏的职场环境中,会议是信息传递与决策的核心场景。然而,传统会议存在诸多痛点:

  • 信息遗漏:参会者忙于记录,无法专注倾听;
  • 语言障碍:跨国会议中实时翻译需求迫切;
  • 效率低下:会后整理纪要耗时耗力;
  • 操作干扰:频繁操作手机/电脑打断会议节奏。

Rokid 智能眼镜凭借其免手持、第一视角、低干扰的特性,天然适合作为会议信息的呈现终端。而 CXR-M SDK 正好提供了手机端与眼镜端协同开发的完整能力。本文将基于该 SDK,手把手教你构建一个真正可落地的“AI 实时会议助手”。


二、技术架构设计

我们的系统采用 **“手机为大脑,眼镜为窗口”** 的双端架构:

  • 手机端(Android App)
    • 负责蓝牙/Wi-Fi 连接管理;
    • 调用云端大模型进行 ASR(语音识别)、NLU(语义理解)、TTS(语音合成);
    • 处理多语翻译、会议纪要生成;
    • 通过 CXR-M SDK 与眼镜通信。
  • 眼镜端(Rokid Glasses)
    • 接收并渲染实时转写文本、翻译字幕;
    • 在用户发言时自动推送提词内容;
    • 支持拍照记录白板、文档;
    • 所有交互通过语音或功能键触发,无需手动操作。

核心优势:眼镜端无需开发原生应用,所有 UI 均通过 CXR-M SDK 的 自定义页面(Custom View) 动态生成。


三、开发环境准备

3.1 项目配置

在 `settings.gradle.kts` 中添加 Rokid Maven 仓库:

1dependencyResolutionManagement {
2    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
3    repositories {
4        maven { url = uri("https://maven.rokid.com/repository/maven-public/") }
5        google()
6        mavenCentral()
7    }
8}
9

build.gradle.kts 中导入 SDK 依赖,并设置 minSdk = 28

1android {
2    defaultConfig {
3        minSdk = 28
4    }
5}
6
7dependencies {
8    implementation("com.rokid.cxr:client-m:1.0.1-20250812.080117-2")
9    // 其他依赖(如 Retrofit、OkHttp)按文档要求添加
10}
11

SDK文档:custom.rokid.com/prod/rokid_…

3.2 权限声明与动态申请

在 `AndroidManifest.xml` 中声明必要权限:

1<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2<uses-permission android:name="android.permission.BLUETOOTH" />
3<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
4<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
5<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
6<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
7<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
8<uses-permission android:name="android.permission.INTERNET" />
9

MainActivity 中动态申请权限(关键代码):

1private val REQUIRED_PERMISSIONS = mutableListOf(
2    Manifest.permission.ACCESS_FINE_LOCATION,
3    Manifest.permission.BLUETOOTH,
4    Manifest.permission.BLUETOOTH_ADMIN,
5).apply {
6    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
7        add(Manifest.permission.BLUETOOTH_SCAN)
8        add(Manifest.permission.BLUETOOTH_CONNECT)
9    }
10}.toTypedArray()
11
12override fun onCreate(savedInstanceState: Bundle?) {
13    requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS)
14}
15

⚠️ 注意:权限未授予时,SDK 将无法工作。


四、设备连接:蓝牙 + Wi-Fi 双通道

4.1 蓝牙连接(基础通道)

使用标准 Android Bluetooth API 扫描设备,并通过 Rokid 专属 UUID 过滤:

1val scanFilter = ScanFilter.Builder()
2    .setServiceUuid(ParcelUuid.fromString("00009100-0000-1000-8000-00805f9b34fb"))
3    .build()
4

连接流程分为两步:

  1. 初始化蓝牙
1CxrApi.getInstance().initBluetooth(context, device, callback)
2
  1. 建立连接(使用 onConnectionInfo 回调中的 socketUuidmacAddress):
1CxrApi.getInstance().connectBluetooth(context, socketUuid, macAddress, callback)
2

连接成功后,可通过 isBluetoothConnected 实时监听状态。

4.2 Wi-Fi P2P 连接(高速通道)

Wi-Fi 用于传输图片、视频等大文件,需在蓝牙连接成功后初始化:

1CxrApi.getInstance().initWifiP2P(object : WifiP2PStatusCallback {
2    override fun onConnected() {
3        Log.d("WiFi", "P2P connected")
4    }
5    override fun onFailed(errorCode: CxrWifiErrorCode?) {
6        // 处理错误:如手机 Wi-Fi 未开启
7    }
8})
9

💡 最佳实践:Wi-Fi 模块高耗电,仅在需要同步媒体文件时开启,完成后立即 deinitWifiP2P()


五、核心功能实现

5.1 实时语音转写与要点提炼

手机端流程:

1. 通过 `openAudioRecord(1, "meeting")` 开启 PCM 格式录音; 2. 将音频流发送至 ASR 服务(如讯飞、阿里云); 3. 收到转写文本后,调用大模型提取关键信息(如待办事项、决策点)。

推送至眼镜:

+ 使用 **自定义页面** 动态更新转写内容:

1[
2  {
3    "action": "update",
4    "id": "transcript_text",
5    "props": { "text": "刚才提到Q3预算需增加20%..." }
6  }
7]
8
  • 若检测到“待办事项”,高亮显示:
1{
2  "action": "update",
3  "id": "todo_item",
4  "props": { "text": "✅ 张三:周三前提交方案", "textColor": "#FF00FF00" }
5}
6

5.2 智能提词器(发言辅助)

当用户需要发言时,App 自动推送提纲:

  1. 打开提词器场景
1CxrApi.getInstance().controlScene(CxrSceneType.WORD_TIPS, true, null)
2
  1. 配置显示参数(居中、大字体):
1CxrApi.getInstance().configWordTipsText(
2    textSize = 24f,
3    lineSpace = 1.5f,
4    mode = "normal",
5    startPointX = 0, startPointY = 300,
6    width = 1200, height = 600
7)
8
  1. 发送提词内容
1val script = "各位同事,关于新项目,我想强调三点..."
2CxrApi.getInstance().sendStream(
3    CxrStreamType.WORD_TIPS,
4    script.toByteArray(),
5    "meeting_script.txt",
6    callback
7)
8

5.3 实时多语翻译

1. **打开翻译场景**:

1CxrApi.getInstance().controlScene(CxrSceneType.TRANSLATION, true, null)
2
  1. 配置显示区域(底部居中):
1CxrApi.getInstance().configTranslationText(
2    textSize = 20,
3    startPointX = 200, startPointY = 800,
4    width = 800, height = 100
5)
6
  1. 推送翻译结果(按 VAD 分段):
1// vadId=1 表示第一段语音
2CxrApi.getInstance().sendTranslationContent(
3    vadId = 1, subId = 0,
4    temporary = false, finished = true,
5    content = "The budget needs to be increased by 20%."
6)
7

🌐 提示:眼镜端自动进入远场拾音模式,仅拾取他人语音。

5.4 白板/文档拍照与同步

1. **触发拍照**(通过功能键长按或语音指令):

1// 在 AI 场景中拍照,结果通过蓝牙返回
2CxrApi.getInstance().takeGlassPhoto(1920, 1080, 80, photoCallback)
3
  1. 监听未同步文件数量
1CxrApi.getInstance().getUnsyncNum { _, _, pictureNum, _ ->
2    if (pictureNum > 0) startSyncPictures()
3}
4
  1. 通过 Wi-Fi 同步图片
1CxrApi.getInstance().startSync(
2    savePath = getExternalFilesDir(Environment.DIRECTORY_PICTURES)?.absolutePath ?: "",
3    types = arrayOf(CxrMediaType.PICTURE),
4    callback = syncCallback
5)
6

六、自定义 UI:打造专属会议界面

CXR-M SDK 的 **Custom View** 是本项目的核心亮点。我们设计一个包含三区域的会议界面:

  • 顶部:会议标题与状态
  • 中部:实时转写/翻译
  • 底部:操作提示(如“长按拍照”)

6.1 初始化 JSON

``[json { "type": "LinearLayout", "props": { "layout\_width": "match\_parent", "layout\_height": "match\_parent", "orientation": "vertical", "backgroundColor": "#FF000000" }, "children": \[ { "type": "TextView", "props": { "id": "title", "layout\_width": "wrap\_content", "layout\_height": "wrap\_content", "text": "Q3 项目评审会", "textSize": "18sp", "textColor": "#FF00FF00", "gravity": "center", "paddingTop": "50dp" } }, { "type": "TextView", "props": { "id": "content", "layout\_width": "match\_parent", "layout\_height": "0dp", "layout\_weight": "1", "text": "等待语音输入...", "textSize": "16sp", "textColor": "#FF00FF00", "gravity": "top|start", "padding": "30dp" } }, { "type": "TextView", "props": { "id": "hint", "layout\_width": "wrap\_content", "layout\_height": "wrap\_content", "text": "长按功能键拍照", "textSize": "12sp", "textColor": "#888888", "gravity": "center", "paddingBottom": "30dp" } } \] } \](https://xplanc.org/primers/document/zh/10.Bash/90.%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C/EX.type.md)\`\`

6.2 动态更新内容

``[kotlin fun updateTranscript(text: String) { val updateJson = """ \[ { "action": "update", "id": "content", "props": { "text": "$text" } } \] """.trimIndent() CxrApi.getInstance().updateCustomView(updateJson) } \](https://xplanc.org/primers/document/zh/10.Bash/90.%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C/EX.id.md)\`\`

6.3 上传图标(可选)

如需显示状态图标(如麦克风、翻译标志),需提前上传 Base64 图片:

1val icon = IconInfo("mic_icon", base64String)
2CxrApi.getInstance().sendCustomViewIcons(listOf(icon))
3

📏 限制:图片 ≤128×128px,建议使用纯绿色通道(#00FF00)以确保显示效果。


七、会后自动化:生成结构化纪要

会议结束后,App 自动整合以下内容:

  • 全程转写文本;
  • AI 提取的待办事项;
  • 拍摄的白板/文档图片;
  • 会议元数据(时间、参与人)。

最终生成 Markdown 格式纪要:

1# Q3 项目评审会纪要
2**时间**:2025-04-27 14:00  
3**参会人**:张三、李四、王五
4
5## 关键结论
6- 预算增加 20%
7- 新功能上线延期至 6 月
8
9## 待办事项
10- [ ] 张三:周三前提交详细方案
11- [ ] 李四:联系供应商确认报价
12
13## 附件
14![白板](whiteboard_001.jpg)
15

支持一键分享至企业微信、钉钉或邮箱。


八、错误处理与用户体验优化

8.1 网络异常

+ 监听 ASR/TTS 失败,调用 `notifyNoNetwork()` 或 `notifyAiError()`; + 眼镜端显示友好提示:“网络中断,请检查连接”。

8.2 设备状态监听

+ 实时监听电量、音量、亮度,自动调整:

1CxrApi.getInstance().setBatteryLevelUpdateListener { level, charging ->
2    if (level < 10 && !charging) {
3        // 提示低电量
4    }
5}
6

8.3 会话管理

+ 会议开始时 `setScreenOffTimeout(3600)`(1小时不熄屏); + 会议结束时 `notifyGlassShutdown()` 节省电量。


九、总结与展望

本文完整展示了如何利用 **Rokid CXR-M SDK** 构建一个高价值的“AI 实时会议助手”。我们充分利用了 SDK 的以下能力:

  • 蓝牙/Wi-Fi 双通道连接;
  • AI 场景交互(ASR/TTS/拍照);
  • 提词器与翻译场景;
  • 自定义页面动态渲染;
  • 媒体文件同步。

该方案不仅技术可行,且直击用户痛点,具备极强的落地潜力。未来可进一步扩展:

  • 接入企业知识库,实现智能问答;
  • 支持多人眼镜协同,打造沉浸式会议空间;
  • 结合 AR 标注,实现远程协作指导。

【征文计划】基于Rokid CXR-M SDK 打造AI 实时会议助手:从连接到自定义界面的完整实践》 是转载文章,点击查看原文


相关推荐


第4篇 vs2019+QT调用SDK连接海康相机显示图片
txwtech笛克电科2025/10/5

vs2019+QT调用SDK连接海康相机显示图片 连接,采图,获取与设置参数,曝光,增益,帧率 新建项目-文件结构: debug x64 调用类: TTcamera.cpp #include "TTcamera.h" #include <QDebug> TTcamera::TTcamera() { m_hDevHandle = NULL; m_pBufForSaveImage = nullptr; m_nBufSizeForSaveImage = 0;


AI 自动化测试:接口测试全流程自动化的实现方法
Jinkxs2025/10/4

在 AI 技术飞速渗透各行各业的当下,我们早已告别 “谈 AI 色变” 的观望阶段,迈入 “用 AI 提效” 的实战时代 💡。无论是代码编写时的智能辅助 💻、数据处理中的自动化流程 📊,还是行业场景里的精准解决方案 ,AI 正以润物细无声的方式,重构着我们的工作逻辑与行业生态 🌱。曾几何时,我们需要花费数小时查阅文档 📚、反复调试代码 ⚙️,或是在海量数据中手动筛选关键信息 ,而如今,一个智能工具 🧰、一次模型调用 ⚡,就能将这些繁琐工作的效率提升数倍 📈。正是在这样的变革中,AI


基于PyTorch的CIFAR10加载与TensorBoard可视化实践
StarPrayers.2025/10/3

视频学习来源:https://www.bilibili.com/video/BV1hE411t7RN?t=1.1&p=15 import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter from test_03 import writer # 添加 添加 download=True 参数来下载数据集 test_data = torchv


什么是 ONNX Runtime?
Cosolar2025/10/2

在人工智能技术飞速发展的今天,模型训练与部署之间的“鸿沟”始终是行业痛点——训练好的模型往往因框架差异、硬件限制等问题难以高效落地。而ONNX Runtime的出现,为这一难题提供了强有力的解决方案。作为微软开源的跨平台推理引擎,ONNX Runtime凭借其跨框架兼容性、全硬件加速能力和极致的性能优化,已成为AI模型部署领域的关键基础设施。本文将深入解析ONNX Runtime的核心价值、技术原理与应用场景,带你领略它如何为AI落地“加速”。 1、什么是ONNX Runtime? ONNX R


关于win11的Microsoft To Pdf打印机修改端口后无法再刷新显示于设备界面的问题
随风万里无云2025/10/2

请记住,有时候死钻牛角尖,反倒是不值得; 从24号到30号,再到今天国庆节第一天才记录,这就是过程,每个过程都结束的时候, 所以,请别焦虑,或许换个思路,就能柳暗花明又一村 (如果你只是需要解决的方法,直接看2.2往后) 1.问题起因: 我需要修改端口实现打印不弹出选择的保存界面,直接存在固定的位置 2.修改完成端口本地端口为固定路径 测试打印没问题,然后离谱的就出现了! 设备界面中再也找不到这个打印机了,但是你打印的时候依旧可以正常打印 我在网上找了很多帖子想要


分布式秒杀系统设计方案
nlog3n10/2/2025

核心组件说明1. 接入层CDN: 静态资源缓存,减少服务器压力Nginx: 负载均衡,请求分发,限流API Gateway: 统一入口,认证,限流,熔断2. 应用层秒杀服务: 核心业务逻辑处理用户服务: 用户认证和信息管理商品服务: 商品信息管理订单服务: 订单处理和管理支付服务: 支付处理3. 中间件层Redis集群: 缓存热点数据,分布式锁RocketMQ: 异步消息处理,削峰填谷Elasticsearch: 日志分析和搜索4. 数据层MySQL主从集群:


2025 年 AI+BI 趋势下,Wyn 商业智能软件如何重构企业决策效率?
葡萄城技术团队9/30/2025

2025年AI+BI趋势下,Wyn商业智能软件通过&quot;嵌入式架构+AI原生能力&quot;重构企业决策效率。Gartner预测,60%的企业将依赖自然语言交互完成数据分析。Wyn具备三大核心优势:1)零门槛AI对话分析,业务人员可自然语言提问获取分析结果;2)国产化与灵活部署,适配统信UOS等国产系统;3)嵌入式全域集成,可融入MES、OA等业务系统。典型案例显示,Wyn帮助制造企业减少40%设备停机时间,医药企业提升70%决策响应速度。选型考量聚焦可信性、易用性、集成性和国产化。


CICD工具选型指南,Jenkins vs Arbess哪一款更好用?
高效研发之旅2025/10/8

Jenkins是一款常用的CICD工具,Arbess作为一款新兴的国产开源免费的CICD工具,两款工具各有特点。本文将从安装配置、功能特性、用户体验等几个方面对两款软件进行详细对比。 1、安装配置 项目 Jenkins Arbess 安装难度需要预装Java环境,需要手动配置端口和后台服务。一键安装,私有部署不同环境均支持傻瓜式一键安装。配置难度需要配置国内镜像源,安装核心插件零配置,安装后即刻可用,无需额外配置。支持操作系统支持Windows、ma


深入解析 Vue 3 源码:computed 的底层实现原理
excel2025/10/9

在 Vue 3 的响应式系统中,computed 是一个非常重要的功能,它用于创建基于依赖自动更新的计算属性。本文将通过分析源码,理解 computed 的底层实现逻辑,帮助你从源码层面掌握它的原理。 一、computed 的基本使用 在使用层面上,computed 有两种常见用法: 1. 只读计算属性 const count = ref(1) const plusOne = computed(() => count.value + 1) console.log(plusOne.value)


先用js快速开发,后续引入ts是否是一个好的实践?
你的人类朋友2025/10/11

前言 我在业余时间做一些小项目时,每次进行技术选型,都会有一个疑问: 应该直接使用 TypeScript 开发,还是先用 JavaScript 快速启动,后续再引入 TypeScript? 今天干脆来整理一下思路,方便后续复用这些想法 正文 一、快速开发的优势 先用 JavaScript 进行快速开发确实有其明显优势: 开发速度更快 无需类型定义和接口声明 跳过类型检查的编译步骤 ⭐ 【重要】特别适合【原型开发】和【概念验证】,个人认为这个是最重要的 学习成本低 更容易上手 ⭐ 【重要】减

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0