4.0 KiB
4.0 KiB
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 设备推流
正确的使用流程:
- 在 Android 应用中创建直播间
- 获取 RTMP 推流地址
- 在电脑上用 OBS Studio 推流
- 在 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:创建直播间
- 在 Android 应用中点击"开始直播"
- 填写直播间标题和主播名称
- 创建成功后会显示 RTMP 推流地址
步骤 4:使用 OBS 推流
- 打开 OBS Studio
- 设置 → 推流
- 服务器:
rtmp://localhost:1935/live/{你的streamKey}- 或直接填写应用显示的完整地址
- 开始推流
步骤 5:在 Android 应用中观看
推流成功后,直播间会显示"直播中"状态,点击进入即可观看。
Android 模拟器网络说明
在 Android 模拟器中:
10.0.2.2= 宿主机的localhost10.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 - Android RTMP 推流库
- LiveVideoBroadcaster - Ant Media 的推流方案
Q: 推流后 Android 应用看不到直播?
A: 检查:
- OBS 是否成功推流(查看 OBS 状态栏)
- 后端服务器是否收到推流(查看服务器日志)
- RTMP 地址和 streamKey 是否正确
- 防火墙是否阻止了端口 1935 和 8080
Q: 出现"服务器异常"错误?
A: 可能原因:
- 后端服务器未启动
- 网络连接问题
- API 地址配置错误
- 查看 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