---
description: "直播相关文件检查指令"
---

本指令用于检查项目中直播相关的文件实现情况，为后续直播功能开发和维护提供上下文信息。

## 检查范围

### 1. 前端直播组件 (`src/client/mobile/components/Classroom/`)
- **useClassroom.ts**: 直播核心逻辑Hook，包含阿里云RTC和IM SDK集成
- **ClassroomLayout.tsx**: 直播界面布局组件
- **ClassroomProvider.tsx**: 直播上下文提供者
- **AuthLayout.tsx**: 认证布局组件
- **alivc-im.iife.d.ts**: 阿里云IM SDK类型定义

### 2. 直播页面 (`src/client/mobile/pages/ClassroomPage.tsx`)
- 直播页面入口，包含角色选择、课堂创建/加入功能
- 阿里云RTC SDK类型定义  node_modules/.pnpm/aliyun-rtc-sdk@7.1.2_@tensorflow+tfjs-core@4.22.0_debug@4.4.1_seedrandom@3.0.5/node_modules/aliyun-rtc-sdk/dist/types/index.d.ts

### 3. 后端API (`src/server/api/aliyun/index.ts`)
- IM Token生成接口
- RTC Token生成接口

### 4. 客户端API (`src/client/api.ts`)
- 阿里云服务客户端定义

## 详细检查结果

### 前端直播组件实现情况

#### useClassroom.ts (直播核心逻辑)
- ✅ **阿里云RTC SDK集成**: 使用 `aliyun-rtc-sdk` 进行实时音视频通信
- ✅ **阿里云IM SDK集成**: 使用 `alivc-im` 进行即时消息通信
- ✅ **角色管理**: 支持老师(Teacher)和学生(Student)两种角色
- ✅ **课堂状态管理**: 支持未开始(IN_PROGRESS)、进行中(IN_PROGRESS)、已结束(ENDED)三种状态
- ✅ **音视频控制**: 摄像头开关、麦克风开关、屏幕分享
- ✅ **消息功能**: 文本消息、举手功能、问题提问
- ✅ **课堂管理**: 创建课堂、加入课堂、离开课堂、开始/结束课堂
- ✅ **用户管理**: 静音学生、移出学生、应答举手

#### ClassroomLayout.tsx (界面布局)
- ✅ **视频区域**: 主屏幕共享容器 + 摄像头小窗容器
- ✅ **控制面板**: 摄像头、麦克风、屏幕分享控制按钮
- ✅ **消息区域**: 实时消息显示和发送
- ✅ **响应式设计**: 支持移动端和桌面端布局

### 后端API实现情况

#### 阿里云服务API (`/api/v1/aliyun`)
- ✅ **IM Token生成**: POST `/im_token` - 生成即时消息认证令牌
- ✅ **RTC Token生成**: POST `/rtc_token` - 生成实时通信认证令牌
- ✅ **安全认证**: 使用SHA-256加密生成Token
- ✅ **错误处理**: 完整的错误响应机制

### 技术栈和依赖

#### 前端SDK
- **阿里云RTC SDK**: 实时音视频通信
- **阿里云IM SDK**: 即时消息通信
- **React Hooks**: 状态管理和副作用处理

#### 后端依赖
- **环境变量配置**: IM_APP_ID, IM_APP_KEY, IM_APP_SIGN, RTC_APP_ID, RTC_APP_KEY
- **加密算法**: SHA-256哈希算法生成认证Token

## 功能特性

### 已实现功能
1. **基础直播功能**
   - 音视频通话
   - 屏幕共享
   - 实时消息
   - 举手互动
   - 问题提问

2. **课堂管理**
   - 创建课堂
   - 加入课堂
   - 开始/结束课堂
   - 用户管理

3. **权限控制**
   - 老师权限: 管理课堂、静音学生、应答举手
   - 学生权限: 观看直播、举手提问、发送消息


## 使用示例

### 创建课堂 (老师)
```typescript
const { createClass } = useClassroomContext();
const classId = await createClass('数学课堂');
```

### 加入课堂 (学生)
```typescript
const { joinClass } = useClassroomContext();
await joinClass('classroom_123');
```

### 发送消息
```typescript
const { sendMessage, msgText, setMsgText } = useClassroomContext();
setMsgText('大家好！');
await sendMessage();
```

### 举手提问
```typescript
const { handUp } = useClassroomContext();
await handUp('我有一个问题');
```

## 环境配置要求

### 必需环境变量
```bash
# 阿里云IM配置
IM_APP_ID=your_im_app_id
IM_APP_KEY=your_im_app_key
IM_APP_SIGN=your_im_app_sign

# 阿里云RTC配置
RTC_APP_ID=your_rtc_app_id
RTC_APP_KEY=your_rtc_app_key
```

### SDK引入
前端需要引入阿里云SDK：
```html
<script src="https://g.alicdn.com/apsara-media-box/imp-interaction/1.6.1/alivc-im.iife.js"></script>
```
