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