zhibo/OBS推流问题诊断.md

345 lines
8.5 KiB
Markdown
Raw Permalink Normal View History

2025-12-17 08:47:15 +08:00
# 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 模拟器
- 下拉刷新或重新打开应用
- 直播间应该显示"直播中"
- 点击进入观看
---
## 🐛 常见错误及解决
### 错误 1OBS 提示"连接失败"
**原因**:推流地址错误
**解决**
1. 检查地址是否使用 `localhost` 而不是 `10.0.2.2`
2. 检查 streamKey 是否正确
3. 检查 SRS Docker 容器是否运行:`docker ps`
### 错误 2OBS 显示"直播中"但 Android 显示"未开播"
**原因**:推流到了错误的地址或 streamKey 不匹配
**解决**
1. 访问 http://localhost:1985/api/v1/streams/ 查看实际推流的 streamKey
2. 对比 Android 应用中的 streamKey 是否一致
3. 如果不一致,修改 OBS 的推流地址
### 错误 3Android 应用显示"直播中"但视频黑屏
**原因**:视频格式或网络问题
**解决**
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 的推流地址吧!** 🚀