zhibo/android-app/网络连接修复说明.md
xiao12feng@outlook.com 40bfd4ec5c 直播功能正常使用
2025-12-17 08:47:15 +08:00

133 lines
4.0 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.

# 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`