345 lines
8.5 KiB
Markdown
345 lines
8.5 KiB
Markdown
# OBS 推流问题诊断与解决
|
||
|
||
## 🔍 问题现象
|
||
|
||
- ✅ OBS 显示"直播中"
|
||
- ❌ Android 模拟器显示"未开播"
|
||
- ❌ 视频无法播放
|
||
|
||
## 🎯 根本原因
|
||
|
||
**你在 OBS 中使用了错误的推流地址!**
|
||
|
||
### ❌ 错误做法
|
||
你可能直接复制了 Android 应用显示的地址:
|
||
```
|
||
rtmp://10.0.2.2:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
|
||
**问题**:`10.0.2.2` 是 Android 模拟器专用的地址,OBS 无法识别!
|
||
|
||
### ✅ 正确做法
|
||
OBS 应该使用:
|
||
```
|
||
rtmp://localhost:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 立即修复(3 步)
|
||
|
||
### 步骤 1:停止 OBS 推流
|
||
1. 在 OBS 中点击 **"停止推流"** 按钮
|
||
2. 等待状态栏显示停止
|
||
|
||
### 步骤 2:修改推流地址
|
||
|
||
#### 方法 A:完整地址方式
|
||
1. 点击 **"设置"** → **"推流"**
|
||
2. **服务器** 改为:
|
||
```
|
||
rtmp://localhost:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
**注意**:把 `10.0.2.2` 改成 `localhost`
|
||
3. **串流密钥**:留空
|
||
4. 点击 **"确定"**
|
||
|
||
#### 方法 B:分开填写方式
|
||
1. 点击 **"设置"** → **"推流"**
|
||
2. **服务器**:
|
||
```
|
||
rtmp://localhost:1935/live
|
||
```
|
||
3. **串流密钥**:
|
||
```
|
||
a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
4. 点击 **"确定"**
|
||
|
||
### 步骤 3:重新开始推流
|
||
1. 点击 **"开始推流"** 按钮
|
||
2. 等待 2-3 秒
|
||
3. 检查状态栏是否显示"直播中"
|
||
|
||
---
|
||
|
||
## ✅ 验证推流成功
|
||
|
||
### 方法 1:查看 OBS 状态栏
|
||
正常推流应该显示:
|
||
```
|
||
直播中 | 00:00:15 | 2500 kb/s | 0 丢帧
|
||
```
|
||
|
||
**成功标志**:
|
||
- ✅ 显示"直播中"
|
||
- ✅ 有比特率数据(如 2500 kb/s)
|
||
- ✅ 丢帧数为 0 或很少
|
||
|
||
**失败标志**:
|
||
- ❌ 提示"连接失败"
|
||
- ❌ 状态栏显示红色错误
|
||
- ❌ 比特率为 0
|
||
|
||
### 方法 2:检查 SRS 服务器
|
||
打开浏览器访问:
|
||
```
|
||
http://localhost:1985/api/v1/streams/
|
||
```
|
||
|
||
**成功时应该看到**:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"streams": [
|
||
{
|
||
"name": "a9c62788-135e-44cb-bbd1-6dbac2f5bf14",
|
||
"app": "live",
|
||
"publish": {
|
||
"active": true
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**失败时会看到**:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"streams": []
|
||
}
|
||
```
|
||
|
||
### 方法 3:检查后端 API
|
||
打开浏览器访问:
|
||
```
|
||
http://localhost:3001/api/rooms
|
||
```
|
||
|
||
找到你的直播间,检查 `isLive` 字段:
|
||
```json
|
||
{
|
||
"id": "a9c62788-135e-44cb-bbd1-6dbac2f5bf14",
|
||
"isLive": true, ← 应该是 true
|
||
"streamUrls": {
|
||
"rtmp": "rtmp://localhost:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 方法 4:在 Android 应用中查看
|
||
1. 回到 Android 模拟器
|
||
2. 下拉刷新直播间列表
|
||
3. 直播间状态应该显示 **"直播中"**(红色标签)
|
||
4. 点击进入应该能看到视频
|
||
|
||
---
|
||
|
||
## 📋 完整的正确配置示例
|
||
|
||
### 你的直播间信息
|
||
```
|
||
直播间 ID: a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
Stream Key: a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
|
||
### OBS 推流设置(完整地址方式)
|
||
```
|
||
服务: 自定义...
|
||
服务器: rtmp://localhost:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
串流密钥: (留空)
|
||
```
|
||
|
||
### OBS 推流设置(分开填写方式)
|
||
```
|
||
服务: 自定义...
|
||
服务器: rtmp://localhost:1935/live
|
||
串流密钥: a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
|
||
### Android 应用中显示的地址
|
||
```
|
||
推流地址: rtmp://10.0.2.2:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
电脑本机 OBS 可用: rtmp://localhost:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
|
||
**记住**:OBS 使用第二个地址(localhost)!
|
||
|
||
---
|
||
|
||
## 🎬 完整操作流程(重新来一遍)
|
||
|
||
### 1. 确保后端服务器运行
|
||
```bash
|
||
cd live-streaming
|
||
node server/index.js
|
||
```
|
||
|
||
### 2. 在 Android 应用中创建直播间
|
||
- 点击"开始直播"
|
||
- 填写标题和主播名称
|
||
- 点击"创建"
|
||
- **记下 streamKey**(或点击"复制地址")
|
||
|
||
### 3. 配置 OBS
|
||
- 打开 OBS Studio
|
||
- 点击"设置" → "推流"
|
||
- 服务:自定义...
|
||
- 服务器:`rtmp://localhost:1935/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14`
|
||
- **重要**:使用 `localhost`,不是 `10.0.2.2`
|
||
- 点击"确定"
|
||
|
||
### 4. 添加视频源(如果还没有)
|
||
- 点击"来源"区域的 + 号
|
||
- 选择"视频捕获设备"(摄像头)或"显示器捕获"(屏幕)
|
||
- 配置并确定
|
||
|
||
### 5. 开始推流
|
||
- 点击"开始推流"
|
||
- 等待 2-3 秒
|
||
- 检查状态栏显示"直播中"
|
||
|
||
### 6. 在 Android 应用中观看
|
||
- 回到 Android 模拟器
|
||
- 下拉刷新或重新打开应用
|
||
- 直播间应该显示"直播中"
|
||
- 点击进入观看
|
||
|
||
---
|
||
|
||
## 🐛 常见错误及解决
|
||
|
||
### 错误 1:OBS 提示"连接失败"
|
||
|
||
**原因**:推流地址错误
|
||
|
||
**解决**:
|
||
1. 检查地址是否使用 `localhost` 而不是 `10.0.2.2`
|
||
2. 检查 streamKey 是否正确
|
||
3. 检查 SRS Docker 容器是否运行:`docker ps`
|
||
|
||
### 错误 2:OBS 显示"直播中"但 Android 显示"未开播"
|
||
|
||
**原因**:推流到了错误的地址或 streamKey 不匹配
|
||
|
||
**解决**:
|
||
1. 访问 http://localhost:1985/api/v1/streams/ 查看实际推流的 streamKey
|
||
2. 对比 Android 应用中的 streamKey 是否一致
|
||
3. 如果不一致,修改 OBS 的推流地址
|
||
|
||
### 错误 3:Android 应用显示"直播中"但视频黑屏
|
||
|
||
**原因**:视频格式或网络问题
|
||
|
||
**解决**:
|
||
1. 等待 5-10 秒(HLS 需要缓冲)
|
||
2. 退出直播间重新进入
|
||
3. 检查后端日志是否有错误
|
||
4. 确认 HLS 地址可访问:http://localhost:8080/live/a9c62788-135e-44cb-bbd1-6dbac2f5bf14.m3u8
|
||
|
||
### 错误 4:推流一段时间后断开
|
||
|
||
**原因**:网络不稳定或比特率过高
|
||
|
||
**解决**:
|
||
1. 降低 OBS 的视频比特率(设置 → 输出 → 2500 → 1500 Kbps)
|
||
2. 降低分辨率(设置 → 视频 → 1080p → 720p)
|
||
3. 检查网络连接
|
||
|
||
---
|
||
|
||
## 📸 OBS 设置截图说明
|
||
|
||
### 推流设置界面
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ 设置 │
|
||
├─────────────────────────────────────┤
|
||
│ 推流 │
|
||
│ │
|
||
│ 服务: [自定义... ▼] │
|
||
│ │
|
||
│ 服务器: │
|
||
│ ┌─────────────────────────────────┐ │
|
||
│ │rtmp://localhost:1935/live/a9c62│ │ ← 填这里
|
||
│ │788-135e-44cb-bbd1-6dbac2f5bf14 │ │
|
||
│ └─────────────────────────────────┘ │
|
||
│ │
|
||
│ 串流密钥: │
|
||
│ ┌─────────────────────────────────┐ │
|
||
│ │ │ │ ← 留空
|
||
│ └─────────────────────────────────┘ │
|
||
│ │
|
||
│ [取消] [确定] │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 调试命令
|
||
|
||
### 检查 SRS 推流状态
|
||
```bash
|
||
curl http://localhost:1985/api/v1/streams/
|
||
```
|
||
|
||
### 检查后端直播间状态
|
||
```bash
|
||
curl http://localhost:3001/api/rooms
|
||
```
|
||
|
||
### 检查特定直播间
|
||
```bash
|
||
curl http://localhost:3001/api/rooms/a9c62788-135e-44cb-bbd1-6dbac2f5bf14
|
||
```
|
||
|
||
### 检查 Docker 容器
|
||
```bash
|
||
docker ps
|
||
```
|
||
|
||
### 检查端口占用
|
||
```bash
|
||
netstat -ano | findstr :1935
|
||
netstat -ano | findstr :3001
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 关键要点总结
|
||
|
||
### ✅ 正确的做法
|
||
1. **Android 应用**:用于创建直播间和观看
|
||
2. **OBS 推流地址**:使用 `localhost`,不是 `10.0.2.2`
|
||
3. **streamKey**:必须与直播间的 streamKey 完全一致
|
||
4. **验证推流**:访问 http://localhost:1985/api/v1/streams/ 确认
|
||
|
||
### ❌ 常见错误
|
||
1. 直接复制 Android 应用显示的 `10.0.2.2` 地址给 OBS
|
||
2. streamKey 输入错误或不完整
|
||
3. 忘记把 `10.0.2.2` 改成 `localhost`
|
||
4. SRS 服务器未启动
|
||
|
||
### 🎯 记住这个公式
|
||
```
|
||
Android 应用显示: rtmp://10.0.2.2:1935/live/{streamKey}
|
||
↓ 改成 ↓
|
||
OBS 实际使用: rtmp://localhost:1935/live/{streamKey}
|
||
```
|
||
|
||
---
|
||
|
||
## 📞 需要帮助?
|
||
|
||
如果按照以上步骤操作后仍然有问题:
|
||
|
||
1. 检查后端服务器日志(命令行窗口)
|
||
2. 检查 OBS 日志(帮助 → 日志文件)
|
||
3. 访问 http://localhost:1985/api/v1/streams/ 查看实际推流状态
|
||
4. 截图 OBS 的推流设置和错误信息
|
||
|
||
---
|
||
|
||
**现在就去修改 OBS 的推流地址吧!** 🚀
|