add docs folder.

Signed-off-by: chaoq <chaoq@gxtech.ltd>
This commit is contained in:
2025-09-17 15:55:45 +08:00
parent 0ca9d5011f
commit 202ebef35d
8 changed files with 4991 additions and 0 deletions

285
docs/dev-plan.md Normal file
View File

@@ -0,0 +1,285 @@
## 实现步骤
阶段1基础架构和登录
**目标**:搭建项目基础架构,实现用户登录功能
**验收标准**
- [ ] 项目能正常编译运行,无构建错误
- [ ] MVVM架构清晰ViewModel与UI分离
- [ ] 网络请求能正常访问测试API
- [ ] Room数据库能正常读写用户数据
- [ ] 登录界面UI完整手机号输入和验证码功能正常
- [ ] 登录成功后可跳转至主界面,失败有明确提示
- [ ] 用户会话能在应用重启后保持
**测试**:单元测试通过,登录流程测试通过
阶段2实时通信基础
**目标**集成LiveKit实现基础音视频通话
**验收标准**
- [ ] LiveKit库集成成功无版本冲突
- [ ] 音视频权限申请流程完整,用户授权处理正确
- [ ] 本地摄像头预览正常显示,画面清晰无卡顿
- [ ] 能成功连接到LiveKit测试房间
- [ ] 基础通话功能正常,可正常开启/关闭音视频
- [ ] 网络状态变化时有一定容错处理
**测试**LiveKit连接测试通过音视频权限测试通过
阶段3协作会话
**目标**:实现完整的会议管理和控制功能
**验收标准**
- [ ] 会议发起界面完整,能输入会议主题和设置
- [ ] 加入会议功能正常,支持邀请码和链接加入
- [ ] 参会者列表实时显示,能显示在线状态
- [ ] 音视频控制按钮响应及时,状态显示正确
- [ ] 会议邀请码生成正确,可被其他用户成功使用
- [ ] 简单录制功能正常,能保存录制文件
- [ ] 会议结束处理完整,资源释放正确
**测试**:端到端会议测试通过,参会者管理测试通过
阶段4AR环境集成
**目标**集成ARCore实现基础AR功能
**验收标准**
- [ ] ARCore v1.50.0依赖配置正确,无版本冲突
- [ ] AR权限申请处理完整用户拒绝时有降级方案
- [ ] AR场景能正常初始化相机画面显示正常
- [ ] 平面检测功能正常,能识别水平和垂直平面
- [ ] 点击交互响应及时,能在检测到的平面上创建锚点
- [ ] 在低端设备上有适当的降级处理
- [ ] AR场景切换和退出时资源释放正确
**测试**ARCore兼容性测试通过平面检测测试通过
阶段5AR标注工具
**目标**实现完整的AR标注功能
**验收标准**
- [ ] 箭头标注能准确放置在AR空间中位置稳定
- [ ] 画笔涂鸦流畅,支持不同颜色和粗细
- [ ] 矩形框选工具能准确框选目标区域
- [ ] 激光笔指示实时响应,移动平滑
- [ ] 清除标注功能完整,能清除单个或全部标注
- [ ] 标注在不同设备间同步位置准确
- [ ] 标注能稳定跟随AR场景移动无明显漂移
**测试**AR标注同步测试通过标注稳定性测试通过
阶段6协作增强
**目标**:增强协作功能,支持白板、屏幕共享等
**验收标准**
- [ ] 白板模式切换流畅,界面响应及时
- [ ] 屏幕共享功能正常,能捕获和传输屏幕内容
- [ ] 文件发送/接收功能完整,支持常见格式
- [ ] 颜色选择器交互友好,支持多种颜色选择
- [ ] 撤销/重做功能正常,操作历史记录完整
- [ ] 白板内容能实时同步给所有参会者
- [ ] 文件传输过程有进度显示,支持断点续传
**测试**:白板协作功能测试通过,文件传输完整性测试通过
阶段7AI能力集成
**目标**集成AI服务提供智能化功能
**验收标准**
- [ ] 语音转文字API调用正常转换准确率>90%
- [ ] 实时字幕显示及时,延迟<3秒
- [ ] 会议纪要生成功能完整包含关键信息
- [ ] AI知识库查询响应及时结果相关度高
- [ ] AI服务异常时有适当的错误处理
- [ ] 用户可控制AI功能的开启/关闭
- [ ] AI处理过程有明确的进度和状态提示
**测试**AI服务集成测试通过语音识别准确率测试通过
阶段8优化和兼容性
**目标**优化性能提升用户体验
**验收标准**
- [ ] 应用启动时间<3秒界面切换流畅
- [ ] 音视频通话延迟<200ms画质清晰
- [ ] AR渲染帧率>30fps标注稳定无漂移
- [ ] 内存占用合理,无内存泄漏
- [ ] 电池消耗优化,正常使用下耗电合理
- [ ] 网络自适应良好弱网环境下功能降级graceful
- [ ] 支持多种设备,从低端到高端都有良好体验
- [ ] 崩溃率<0.1%异常处理完善
**测试**性能压力测试通过设备兼容性测试通过
## 技术挑战与解决方案
挑战1LiveKit连接和房间管理
- 问题房间连接失败网络适配断线重连
- 解决方案使用LiveKit 2.x的自动重连机制ConnectionQuality API监控网络状态
挑战2ARCore v1.50.0新特性适配
- 问题新版本ARCore API变化性能优化要求
- 解决方案使用ARCore 1.50.0的增强命中测试和光照估计功能
挑战3多端标注同步
- 问题不同设备看到的标注位置不一致
- 解决方案使用AR锚点和时间戳同步
挑战4性能优化
- 问题AR+视频通话耗电严重
- 解决方案动态调整帧率和码率
挑战5设备兼容性
- 问题低端设备不支持ARCore
- 解决方案功能降级仅使用2D标注
## 具体实现细节
Gradle依赖配置
dependencies {
// UI
implementation 'androidx.compose.ui:ui:1.5.4'
implementation 'androidx.compose.material3:material3:1.1.2'
// LiveKit
implementation 'io.livekit:livekit-android:2.20.2'
// AR
implementation 'com.google.ar:core:1.50.0'
// 网络
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
// 本地存储
implementation 'androidx.room:room-runtime:2.6.1'
// 权限
implementation 'pub.devrel:easypermissions:3.0.0'
}
核心组件示例
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SynergyLensTheme {
MainNavigation()
}
}
}
}
@Composable
fun CallScreen(
room: Room,
onAnnotationClick: () -> Unit
) {
val room by rememberLiveKitRoom()
val remoteParticipants by room.remoteParticipants.collectAsState()
val currentParticipant = remoteParticipants.values.firstOrNull()
Box(modifier = Modifier.fillMaxSize()) {
// 视频渲染 - 使用最新的VideoRenderer组件
currentParticipant?.let { participant ->
VideoRenderer(
participant = participant,
modifier = Modifier.fillMaxSize()
)
}
// 控制按钮
CallControls(
room = room,
onAnnotationClick = onAnnotationClick
)
}
}
class LiveKitManager(applicationContext: Context) {
private val room = LiveKit.create(
appContext = applicationContext,
options = RoomOptions(
adaptiveStream = true,
dynacast = true,
// 新版本特性:端到端加密
e2eeOptions = E2EEOptions(
keyProvider = BaseKeyProvider("your-encryption-key")
)
)
)
suspend fun connectToRoom(url: String, token: String) {
try {
room.connect(url, token)
// 新版本API使用TrackPublication来管理音视频
room.localParticipant.setMicrophoneEnabled(true)
room.localParticipant.setCameraEnabled(true)
} catch (e: Exception) {
// 新版本错误处理
when (e) {
is ConnectException -> println("连接失败: ${e.message}")
is AuthenticationException -> println("认证失败")
else -> println("其他错误: ${e.message}")
}
}
}
fun disconnect() {
room.disconnect()
}
fun release() {
room.release()
}
}
class ARAnnotationManager(
private val arFragment: ArFragment
) {
fun placeArrow(x: Float, y: Float) {
// 使用ARCore v1.50.0增强的命中测试
val frame = arFragment.arSceneView.arFrame ?: return
val hitResults = frame.hitTest(x, y)
val hitResult = hitResults.firstOrNull {
it.trackable is Plane && (it.trackable as Plane).isPoseInPolygon(it.hitPose)
} ?: return
val anchor = hitResult.createAnchor()
val anchorNode = AnchorNode(anchor)
val arrowNode = createArrowNode()
anchorNode.addChild(arrowNode)
arFragment.arSceneView.scene.addChild(anchorNode)
}
fun createArrowNode(): Node {
// 使用ARCore 1.50.0的光照估计创建更真实的渲染
return Node().apply {
renderable = ShapeFactory.makeCylinder(
0.01f, 0.1f,
Vector3(0f, 0.05f, 0f),
MaterialFactory.makeOpaqueWithColor(
context,
Color(1.0f, 0.0f, 0.0f)
)
)
}
}
}
## 测试策略
单元测试:
- 登录流程测试
- LiveKit房间连接测试
- LiveKit TrackPublication管理测试
- AR标注创建测试
集成测试:
- 端到端通话测试
- AR标注同步测试
- 设备兼容性测试
UI测试
- 界面交互测试
- 控制按钮功能测试
## 部署要求
客户端要求:
- 最小SDK Android 8.0 (API 26)
- 目标SDK Android 16 (API 36)
- 权限: CAMERA, RECORD_AUDIO, INTERNET
- 可选: ARCore支持设备 (v1.50.0+)
服务端接口:
- 用户认证API
- LiveKit 2.x房间管理
- AI服务API (语音转文字等)
- 需要支持E2EE端到端加密