133 lines
4.0 KiB
Markdown
133 lines
4.0 KiB
Markdown
# Android 直播应用问题修复说明
|
||
|
||
## 问题诊断
|
||
|
||
### 1. RTMP 地址格式错误 ❌
|
||
**问题**:后端返回的 RTMP 地址不完整
|
||
- 错误格式:`rtmp://10.0.2.2:1935/live`
|
||
- 正确格式:`rtmp://10.0.2.2:1935/live/{streamKey}`
|
||
|
||
**原因**:`live-streaming/server/utils/streamUrl.js` 中缺少 streamKey
|
||
|
||
### 2. Android 应用功能误解 ⚠️
|
||
**重要**:你的 Android 应用**不支持推流**!
|
||
|
||
当前应用功能:
|
||
- ✅ 创建直播间
|
||
- ✅ 查看直播列表
|
||
- ✅ 观看直播(播放 HLS/FLV 流)
|
||
- ❌ **不能**从 Android 设备推流
|
||
|
||
正确的使用流程:
|
||
1. 在 Android 应用中创建直播间
|
||
2. 获取 RTMP 推流地址
|
||
3. **在电脑上用 OBS Studio 推流**
|
||
4. 在 Android 应用中观看直播
|
||
|
||
## 已完成的修复 ✅
|
||
|
||
### 1. 修复后端 RTMP 地址
|
||
修改了 `live-streaming/server/utils/streamUrl.js`:
|
||
```javascript
|
||
// 修复前
|
||
rtmp: `rtmp://${host}:${rtmpPort}/live`,
|
||
|
||
// 修复后
|
||
rtmp: `rtmp://${host}:${rtmpPort}/live/${streamKey}`,
|
||
```
|
||
|
||
### 2. 更新 Android 应用提示
|
||
修改了 `MainActivity.java` 中的提示信息,明确说明需要用 OBS 推流。
|
||
|
||
## 如何使用
|
||
|
||
### 步骤 1:启动后端服务器
|
||
```bash
|
||
cd live-streaming
|
||
npm start
|
||
```
|
||
|
||
确认服务器运行:
|
||
```bash
|
||
curl http://localhost:3001/health
|
||
```
|
||
|
||
### 步骤 2:重新构建 Android 应用
|
||
```bash
|
||
cd android-app
|
||
gradlew clean assembleDebug
|
||
gradlew installDebug
|
||
```
|
||
|
||
或在 Android Studio 中点击 "Run"
|
||
|
||
### 步骤 3:创建直播间
|
||
1. 在 Android 应用中点击"开始直播"
|
||
2. 填写直播间标题和主播名称
|
||
3. 创建成功后会显示 RTMP 推流地址
|
||
|
||
### 步骤 4:使用 OBS 推流
|
||
1. 打开 OBS Studio
|
||
2. 设置 → 推流
|
||
3. 服务器:`rtmp://localhost:1935/live/{你的streamKey}`
|
||
- 或直接填写应用显示的完整地址
|
||
4. 开始推流
|
||
|
||
### 步骤 5:在 Android 应用中观看
|
||
推流成功后,直播间会显示"直播中"状态,点击进入即可观看。
|
||
|
||
## Android 模拟器网络说明
|
||
|
||
在 Android 模拟器中:
|
||
- `10.0.2.2` = 宿主机的 `localhost`
|
||
- `10.0.2.16` = 模拟器自己的 IP
|
||
|
||
所以:
|
||
- Android 应用访问 API:`http://10.0.2.2:3001/api/`
|
||
- OBS 推流地址:`rtmp://localhost:1935/live/{streamKey}`
|
||
- Android 观看地址:`http://10.0.2.2:8080/live/{streamKey}.flv`
|
||
|
||
## 常见问题
|
||
|
||
### Q: 为什么 Android 应用不能直接推流?
|
||
A: 从 Android 设备推流需要:
|
||
- 摄像头/麦克风权限
|
||
- RTMP 推流库(如 librtmp)
|
||
- 视频编码处理
|
||
- 当前应用没有实现这些功能
|
||
|
||
### Q: 如果想让 Android 应用支持推流怎么办?
|
||
A: 需要添加推流功能,可以使用:
|
||
- [yasea](https://github.com/begeekmyfriend/yasea) - Android RTMP 推流库
|
||
- [LiveVideoBroadcaster](https://github.com/ant-media/LiveVideoBroadcaster) - Ant Media 的推流方案
|
||
|
||
### Q: 推流后 Android 应用看不到直播?
|
||
A: 检查:
|
||
1. OBS 是否成功推流(查看 OBS 状态栏)
|
||
2. 后端服务器是否收到推流(查看服务器日志)
|
||
3. RTMP 地址和 streamKey 是否正确
|
||
4. 防火墙是否阻止了端口 1935 和 8080
|
||
|
||
### Q: 出现"服务器异常"错误?
|
||
A: 可能原因:
|
||
1. 后端服务器未启动
|
||
2. 网络连接问题
|
||
3. API 地址配置错误
|
||
4. 查看 Android Studio 的 Logcat 获取详细错误信息
|
||
|
||
## 防火墙配置
|
||
|
||
如果遇到连接问题,添加防火墙规则:
|
||
```powershell
|
||
netsh advfirewall firewall add rule name="Node.js API" dir=in action=allow protocol=TCP localport=3001
|
||
netsh advfirewall firewall add rule name="RTMP Server" dir=in action=allow protocol=TCP localport=1935
|
||
netsh advfirewall firewall add rule name="HTTP-FLV" dir=in action=allow protocol=TCP localport=8080
|
||
```
|
||
|
||
## 相关文件
|
||
- 后端服务器:`live-streaming/server/index.js`
|
||
- RTMP 地址生成:`live-streaming/server/utils/streamUrl.js`
|
||
- Android 配置:`android-app/app/build.gradle.kts`
|
||
- Android 主界面:`android-app/app/src/main/java/com/example/livestreaming/MainActivity.java`
|
||
- Android 直播间:`android-app/app/src/main/java/com/example/livestreaming/RoomDetailActivity.java`
|