zhibo/OBS推流问题诊断.md
xiao12feng@outlook.com 40bfd4ec5c 直播功能正常使用
2025-12-17 08:47:15 +08:00

345 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 的推流地址吧!** 🚀