zhibo/使用教程.md

595 lines
13 KiB
Markdown
Raw Normal View History

2025-12-17 08:47:15 +08:00
# Android 直播系统完整使用教程
## 目录
1. [系统架构说明](#系统架构说明)
2. [环境准备](#环境准备)
3. [启动后端服务](#启动后端服务)
4. [Android Studio 使用教程](#android-studio-使用教程)
5. [OBS Studio 推流教程](#obs-studio-推流教程)
6. [完整操作流程](#完整操作流程)
7. [常见问题解决](#常见问题解决)
---
## 系统架构说明
```
┌──────────────┐
│ 电脑 OBS │ ← 你在这里推流(摄像头/屏幕)
└──────┬───────┘
│ RTMP 推流
┌──────────────┐
│ SRS 服务器 │ ← 接收推流,转换格式
│ (Docker) │
└──────┬───────┘
┌──────────────┐
│ Node.js 后端 │ ← 管理直播间,提供 API
└──────┬───────┘
│ REST API
┌──────────────┐
│ Android 应用 │ ← 观看直播
│ (模拟器) │
└──────────────┘
```
**角色说明**
- **OBS**:主播端,用于推流(发送视频)
- **Android 应用**:观众端,用于观看直播
- **后端服务**:管理直播间,连接 OBS 和 Android
---
## 环境准备
### 1. 必需软件
#### ✅ 已安装
- [x] Node.js
- [x] Docker Desktop
- [x] Android Studio
- [x] Android 模拟器
#### 📥 需要下载
- [ ] **OBS Studio** - 推流软件
- 下载地址https://obsproject.com/download
- 选择 Windows 版本
- 安装后重启电脑
### 2. 检查 Docker 容器
打开命令行,运行:
```bash
docker ps
```
应该看到 `srs-server` 容器正在运行:
```
CONTAINER ID IMAGE PORTS NAMES
f24a21e0bc02 ossrs/srs:5 0.0.0.0:1935->1935/tcp srs-server
0.0.0.0:8080->8080/tcp
0.0.0.0:1985->1985/tcp
```
如果没有运行,启动它:
```bash
cd live-streaming
docker-compose up -d
```
---
## 启动后端服务
### 步骤 1打开命令行
在项目根目录打开 PowerShell 或 CMD
### 步骤 2进入后端目录
```bash
cd live-streaming
```
### 步骤 3启动服务器
```bash
node server/index.js
```
### 步骤 4验证服务器运行
你应该看到类似输出:
```
[RoomStore] Loaded 1 rooms from storage
[Media Server] Embedded NodeMediaServer disabled (EMBEDDED_MEDIA_SERVER=0).
API 服务运行在 http://localhost:3001
API 服务也可通过 http://0.0.0.0:3001 访问(用于 Android 模拟器)
SRS RTMP: rtmp://localhost:1935/live/{streamKey}
SRS HTTP: http://localhost:8080/live/{streamKey}.flv
```
**⚠️ 重要**:保持这个命令行窗口打开,不要关闭!
### 步骤 5测试服务器可选
打开浏览器访问:
```
http://localhost:3001/health
```
应该看到:
```json
{"status":"ok","timestamp":"2025-12-16T09:30:00.000Z"}
```
---
## Android Studio 使用教程
### 步骤 1打开项目
1. 启动 **Android Studio**
2. 点击 **Open**
3. 选择 `android-app` 文件夹
4. 点击 **OK**
### 步骤 2等待 Gradle 同步
- 首次打开会自动下载依赖
- 等待底部状态栏显示 "Gradle sync finished"
- 可能需要 5-10 分钟
### 步骤 3启动 Android 模拟器
#### 方法 A使用现有模拟器
1. 点击顶部工具栏的设备下拉菜单
2. 选择一个模拟器(如 Pixel 5 API 34
3. 点击绿色的 ▶️ **Run** 按钮
#### 方法 B创建新模拟器
1. 点击 **Tools****Device Manager**
2. 点击 **Create Device**
3. 选择 **Phone****Pixel 5**
4. 点击 **Next**
5. 选择系统镜像(推荐 **API 34**
6. 点击 **Next****Finish**
7. 点击 ▶️ 启动模拟器
### 步骤 4运行应用
1. 等待模拟器完全启动(显示主屏幕)
2. 在 Android Studio 中点击 ▶️ **Run 'app'**
3. 应用会自动安装并启动
### 步骤 5创建直播间
在 Android 应用中:
1. 点击右上角的 **"开始直播"** 按钮
2. 填写信息:
- **直播间标题**:例如 "我的第一次直播"
- **主播名称**:例如 "小明"
3. 点击 **"创建"**
### 步骤 6获取推流地址
创建成功后会显示一个对话框,包含:
```
推流地址:
rtmp://10.0.2.2:1935/live/868c49cc-1021-4664-95a3-ed71e789adb2
电脑本机 OBS 可用:
rtmp://localhost:1935/live/868c49cc-1021-4664-95a3-ed71e789adb2
⚠️ 注意:
1. Android 应用只能观看直播
2. 需要用 OBS 在电脑上推流
3. OBS 设置:服务器填上面地址即可
4. 推流后在应用中观看
```
**📋 复制推流地址**
- 点击 **"复制地址"** 按钮
- 这个地址稍后在 OBS 中使用
### 步骤 7查看直播间列表
- 点击 **"知道了"** 关闭对话框
- 你会看到刚创建的直播间
- 状态显示 **"未开播"**(灰色)
---
## OBS Studio 推流教程
### 步骤 1下载并安装 OBS
1. 访问 https://obsproject.com/download
2. 下载 Windows 版本
3. 安装(使用默认设置)
4. 启动 OBS Studio
### 步骤 2首次配置向导如果出现
如果是第一次打开 OBS会出现配置向导
1. **使用信息**:选择 "优化推流,录制次之"
2. **视频设置**
- 基础分辨率1920x1080
- FPS30
3. **推流信息**:选择 "我将使用自定义流媒体服务器"
4. 点击 **"下一步"** 完成
### 步骤 3配置推流设置
#### 3.1 打开设置
- 点击右下角 **"设置"** 按钮
- 或者菜单栏:**文件** → **设置**
#### 3.2 配置推流
1. 左侧选择 **"推流"**
2. **服务**:选择 "自定义..."
3. **服务器**:粘贴从 Android 应用复制的地址
```
rtmp://localhost:1935/live/868c49cc-1021-4664-95a3-ed71e789adb2
```
**⚠️ 重要**
- 如果地址是 `rtmp://10.0.2.2:1935/...`,改成 `rtmp://localhost:1935/...`
- 完整地址包含 streamKey不需要单独填写串流密钥
4. **串流密钥**:留空(因为已经包含在服务器地址中)
5. 点击 **"应用"**
#### 3.3 配置输出(可选,优化画质)
1. 左侧选择 **"输出"**
2. **输出模式**:简单
3. **视频比特率**2500 Kbps
4. **编码器**x264
5. 点击 **"应用"**
#### 3.4 配置视频(可选)
1. 左侧选择 **"视频"**
2. **基础分辨率**1920x1080
3. **输出分辨率**1280x720
4. **常用 FPS 值**30
5. 点击 **"确定"**
### 步骤 4添加视频源
#### 方法 A添加摄像头
1.**"来源"** 区域点击 **+** 号
2. 选择 **"视频捕获设备"**
3. 命名:例如 "摄像头"
4. 点击 **"确定"**
5. **设备**:选择你的摄像头
6. 点击 **"确定"**
#### 方法 B添加屏幕捕获
1.**"来源"** 区域点击 **+** 号
2. 选择 **"显示器捕获"**
3. 命名:例如 "屏幕"
4. 点击 **"确定"**
5. **显示器**:选择要捕获的屏幕
6. 点击 **"确定"**
#### 方法 C添加窗口捕获
1.**"来源"** 区域点击 **+** 号
2. 选择 **"窗口捕获"**
3. 命名:例如 "浏览器"
4. 点击 **"确定"**
5. **窗口**:选择要捕获的窗口
6. 点击 **"确定"**
### 步骤 5调整画面
- 拖动红色边框调整大小
- 拖动中心调整位置
- 右键源 → **变换****适应屏幕** 可以自动适配
### 步骤 6开始推流
1. 点击右下角 **"开始推流"** 按钮
2. 按钮变成 **"停止推流"**,底部状态栏显示:
```
直播中 | 00:00:15 | 2500 kb/s | 0 丢帧
```
**✅ 推流成功标志**
- 状态栏显示 "直播中"
- 有比特率数据(如 2500 kb/s
- 丢帧数为 0 或很少
**❌ 推流失败标志**
- 提示 "连接失败"
- 状态栏显示红色错误
- 检查推流地址是否正确
### 步骤 7在 Android 应用中观看
1. 回到 Android 模拟器
2. 在直播间列表中,你的直播间状态应该变成 **"直播中"**(红色)
3. 点击直播间进入
4. 等待 2-3 秒,视频开始播放
5. 你应该能看到 OBS 中的画面
---
## 完整操作流程
### 🎬 完整演示流程
#### 第一步启动所有服务5 分钟)
```bash
# 1. 启动 Docker如果未运行
cd live-streaming
docker-compose up -d
# 2. 启动后端服务器
node server/index.js
# 保持窗口打开!
```
#### 第二步:启动 Android 应用3 分钟)
1. 打开 Android Studio
2. 打开 `android-app` 项目
3. 启动模拟器
4. 运行应用(点击 ▶️)
#### 第三步创建直播间1 分钟)
1. 在 Android 应用中点击 **"开始直播"**
2. 填写标题和主播名称
3. 点击 **"创建"**
4. 点击 **"复制地址"** 复制推流地址
5. 点击 **"知道了"**
#### 第四步:配置 OBS2 分钟)
1. 打开 OBS Studio
2. 点击 **"设置"** → **"推流"**
3. 服务:选择 "自定义..."
4. 服务器:粘贴推流地址(改 `10.0.2.2``localhost`
5. 点击 **"确定"**
#### 第五步添加视频源2 分钟)
1. 点击 **"来源"** 区域的 **+** 号
2. 选择 **"视频捕获设备"**(摄像头)或 **"显示器捕获"**(屏幕)
3. 配置并确定
#### 第六步开始直播1 分钟)
1. 在 OBS 中点击 **"开始推流"**
2. 等待 2-3 秒
3. 回到 Android 模拟器
4. 点击直播间进入
5. 观看直播!🎉
---
## 常见问题解决
### ❌ 问题 1Android 应用显示"网络错误"
**原因**:后端服务器未启动
**解决**
```bash
cd live-streaming
node server/index.js
```
验证:浏览器访问 http://localhost:3001/health
---
### ❌ 问题 2OBS 提示"连接失败"
**原因 A**:推流地址错误
**解决**
1. 检查地址格式:`rtmp://localhost:1935/live/{streamKey}`
2. 确保使用 `localhost` 而不是 `10.0.2.2`
3. 确保包含完整的 streamKey
**原因 B**SRS 服务器未运行
**解决**
```bash
docker ps
# 如果没有 srs-server运行
cd live-streaming
docker-compose up -d
```
---
### ❌ 问题 3Android 应用显示"未开播"
**原因**:后端无法检测到推流
**解决**
1. 确认 OBS 正在推流(状态栏显示"直播中"
2. 检查后端日志是否有错误
3. 重启后端服务器
4. 在 Android 应用中下拉刷新
**验证推流状态**
浏览器访问 http://localhost:1985/api/v1/streams/
应该看到你的 streamKey
---
### ❌ 问题 4视频播放黑屏
**原因 A**HLS 转码未启用
**解决**
检查 `live-streaming/.env` 中是否有 FFmpeg 配置
```env
FFMPEG_PATH=C:\path\to\ffmpeg.exe
```
**原因 B**:网络延迟
**解决**
- 等待 5-10 秒
- 退出直播间重新进入
- 检查网络连接
**原因 C**Android 播放器不支持格式
**解决**
查看后端日志,确认 HLS 地址可用
---
### ❌ 问题 5模拟器无法连接到后端
**原因**:防火墙阻止
**解决**
```powershell
# 以管理员身份运行 PowerShell
netsh advfirewall firewall add rule name="Node.js API" dir=in action=allow protocol=TCP localport=3001
```
---
### ❌ 问题 6重启后端后房间消失
**原因**:已修复!现在房间会自动保存
**验证**
检查 `live-streaming/data/rooms.json` 文件是否存在
---
### ❌ 问题 7OBS 画面卡顿
**原因**:比特率过高或电脑性能不足
**解决**
1. OBS 设置 → 输出
2. 降低视频比特率2500 → 1500 Kbps
3. 降低分辨率1080p → 720p
4. 降低帧率60fps → 30fps
---
## 快速参考
### 端口说明
| 端口 | 服务 | 用途 |
|------|------|------|
| 1935 | RTMP | OBS 推流 |
| 8080 | HTTP-FLV/HLS | 视频播放 |
| 1985 | SRS API | 推流状态检测 |
| 3001 | Node.js API | Android 应用接口 |
### 关键地址
| 用途 | 地址 |
|------|------|
| OBS 推流 | `rtmp://localhost:1935/live/{streamKey}` |
| Android API | `http://10.0.2.2:3001/api/` |
| 健康检查 | `http://localhost:3001/health` |
| SRS 状态 | `http://localhost:1985/api/v1/streams/` |
### 常用命令
```bash
# 启动后端
cd live-streaming
node server/index.js
# 启动 Docker
docker-compose up -d
# 查看 Docker 容器
docker ps
# 停止 Docker
docker-compose down
# 查看端口占用
netstat -ano | findstr :3001
```
---
## 视频教程(建议录制)
如果你想录制视频教程,可以按照以下脚本:
### 📹 脚本大纲
1. **开场**30秒
- "大家好,今天教大家如何搭建一个 Android 直播系统"
- 展示最终效果OBS 推流 → Android 观看
2. **环境准备**2分钟
- 展示必需软件
- 检查 Docker 运行状态
3. **启动后端**1分钟
- 打开命令行
- 运行 `node server/index.js`
- 展示成功日志
4. **Android Studio**3分钟
- 打开项目
- 启动模拟器
- 运行应用
- 创建直播间
- 复制推流地址
5. **OBS 配置**3分钟
- 打开设置
- 配置推流地址
- 添加视频源
- 开始推流
6. **观看直播**1分钟
- 回到 Android 应用
- 点击直播间
- 展示播放效果
7. **结尾**30秒
- 总结关键步骤
- 提醒常见问题
---
## 下一步学习
### 🚀 进阶功能
- [ ] 添加聊天功能
- [ ] 添加礼物打赏
- [ ] 添加观众人数统计
- [ ] 支持多个直播间
- [ ] 添加直播回放
### 📚 推荐资源
- OBS 官方文档https://obsproject.com/wiki/
- SRS 文档https://ossrs.net/
- Android ExoPlayerhttps://exoplayer.dev/
---
## 技术支持
如果遇到问题:
1. 查看本教程的"常见问题解决"部分
2. 查看 `android-app/问题修复总结.md`
3. 查看后端日志输出
4. 查看 Android Studio 的 Logcat
---
**祝你使用愉快!🎉**