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

4.0 KiB
Raw Blame History

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

// 修复前
rtmp: `rtmp://${host}:${rtmpPort}/live`,

// 修复后
rtmp: `rtmp://${host}:${rtmpPort}/live/${streamKey}`,

2. 更新 Android 应用提示

修改了 MainActivity.java 中的提示信息,明确说明需要用 OBS 推流。

如何使用

步骤 1启动后端服务器

cd live-streaming
npm start

确认服务器运行:

curl http://localhost:3001/health

步骤 2重新构建 Android 应用

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 应用访问 APIhttp://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: 需要添加推流功能,可以使用:

Q: 推流后 Android 应用看不到直播?

A: 检查:

  1. OBS 是否成功推流(查看 OBS 状态栏)
  2. 后端服务器是否收到推流(查看服务器日志)
  3. RTMP 地址和 streamKey 是否正确
  4. 防火墙是否阻止了端口 1935 和 8080

Q: 出现"服务器异常"错误?

A: 可能原因:

  1. 后端服务器未启动
  2. 网络连接问题
  3. API 地址配置错误
  4. 查看 Android Studio 的 Logcat 获取详细错误信息

防火墙配置

如果遇到连接问题,添加防火墙规则:

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