添加游戏盾代理支持
This commit is contained in:
@@ -8,16 +8,17 @@ SDK 核心以 `InteractiveRtcEngine` 为中心,通过 `InteractiveRtcEngineEve
|
||||
|
||||
## 目录
|
||||
|
||||
1. 准备工作
|
||||
2. 快速开始
|
||||
3. 基础通话流程
|
||||
4. 常用功能
|
||||
5. 屏幕分享
|
||||
6. 视频帧前后处理
|
||||
7. 事件回调(EventHandler)
|
||||
8. 通话统计
|
||||
9. Token 机制
|
||||
10. 常见问题(FAQ)
|
||||
1. 准备工作
|
||||
2. 快速开始
|
||||
3. 基础通话流程
|
||||
4. 常用功能
|
||||
5. 屏幕分享
|
||||
6. 视频帧前后处理
|
||||
7. 事件回调(EventHandler)
|
||||
8. 通话统计
|
||||
9. Token 机制
|
||||
10. 代理地址配置
|
||||
11. 常见问题(FAQ)
|
||||
|
||||
---
|
||||
|
||||
@@ -38,19 +39,40 @@ SDK 核心以 `InteractiveRtcEngine` 为中心,通过 `InteractiveRtcEngineEve
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 创建引擎
|
||||
### 1. SDK 初始化
|
||||
|
||||
在使用音视频通话功能前,需先初始化 SDK:
|
||||
|
||||
```kotlin
|
||||
SellyCloudManager.initialize(
|
||||
context = applicationContext,
|
||||
appId = "your-app-id"
|
||||
)
|
||||
```
|
||||
|
||||
> `initialize` 的 `appId` 参数为权威值。可选传入 `SellyCloudConfig` 配置 `vhost`、`logEnabled` 等,详见推拉流文档。
|
||||
|
||||
### 2. 代理地址设置(可选)
|
||||
|
||||
若需通过代理(如洋葱盾)连接信令服务器,在创建引擎前设置:
|
||||
|
||||
```kotlin
|
||||
SellyCloudManager.setProxyAddress("http://127.0.0.1:12345")
|
||||
```
|
||||
|
||||
> SDK 内部通过代理地址解析真实信令服务器 IP。不设置则使用直连。详见「代理地址配置」章节。
|
||||
|
||||
### 3. 创建引擎
|
||||
|
||||
```kotlin
|
||||
val appId = getString(R.string.signaling_app_id)
|
||||
val token = getString(R.string.signaling_token).takeIf { it.isNotBlank() }
|
||||
val kiwiRsName = getString(R.string.signaling_kiwi_rsname).trim()
|
||||
|
||||
val rtcEngine = InteractiveRtcEngine.create(
|
||||
InteractiveRtcEngineConfig(
|
||||
context = applicationContext,
|
||||
appId = appId,
|
||||
defaultToken = token,
|
||||
kiwiRsName = kiwiRsName
|
||||
defaultToken = token
|
||||
)
|
||||
).apply {
|
||||
setEventHandler(eventHandler)
|
||||
@@ -68,9 +90,20 @@ val rtcEngine = InteractiveRtcEngine.create(
|
||||
}
|
||||
```
|
||||
|
||||
> `InteractiveRtcEngineConfig` 与默认 token 配置见 `example/src/main/java/com/demo/SellyCloudSDK/interactive/InteractiveLiveActivity.kt`。
|
||||
`InteractiveRtcEngineConfig` 参数说明:
|
||||
|
||||
### 2. 设置本地/远端画布
|
||||
| 参数 | 类型 | 说明 |
|
||||
| ---- | ---- | ---- |
|
||||
| `context` | Context | 应用上下文 |
|
||||
| `appId` | String | 应用 ID |
|
||||
| `defaultCallType` | CallType | 默认通话类型,默认 ONE_TO_ONE |
|
||||
| `defaultToken` | String? | 默认 Token |
|
||||
| `signalingUrlPrefix` | String | 信令 URL 前缀,默认 `ws://` |
|
||||
| `signalingUrlSuffix` | String | 信令 URL 后缀,默认 `/ws/signaling` |
|
||||
|
||||
> 完整 Demo 见 `example/src/main/java/com/demo/SellyCloudSDK/interactive/InteractiveLiveActivity.kt`。
|
||||
|
||||
### 4. 设置本地/远端画布
|
||||
|
||||
```kotlin
|
||||
val localRenderer = SurfaceViewRenderer(this)
|
||||
@@ -82,7 +115,7 @@ val remoteRenderer = SurfaceViewRenderer(this)
|
||||
rtcEngine.setupRemoteVideo(InteractiveVideoCanvas(remoteRenderer, remoteUserId))
|
||||
```
|
||||
|
||||
### 3. 加入通话
|
||||
### 5. 加入通话
|
||||
|
||||
```kotlin
|
||||
val options = InteractiveChannelMediaOptions(callType = CallType.ONE_TO_ONE)
|
||||
@@ -109,23 +142,9 @@ rtcEngine.leaveChannel()
|
||||
InteractiveRtcEngine.destroy(rtcEngine)
|
||||
```
|
||||
|
||||
### 4. 进阶配置(Demo 未覆盖)
|
||||
### 6. 进阶配置(Demo 未覆盖)
|
||||
|
||||
#### 4.1 InteractiveRtcEngineConfig 高级字段
|
||||
|
||||
```kotlin
|
||||
val config = InteractiveRtcEngineConfig(
|
||||
context = applicationContext,
|
||||
appId = appId,
|
||||
defaultCallType = CallType.ONE_TO_ONE,
|
||||
defaultToken = token,
|
||||
kiwiRsName = kiwiRsName,
|
||||
signalingUrlPrefix = "https://",
|
||||
signalingUrlSuffix = "/signaling"
|
||||
)
|
||||
```
|
||||
|
||||
#### 4.2 InteractiveChannelMediaOptions 订阅控制
|
||||
#### 6.1 InteractiveChannelMediaOptions 订阅控制
|
||||
|
||||
```kotlin
|
||||
val options = InteractiveChannelMediaOptions(
|
||||
@@ -135,7 +154,7 @@ val options = InteractiveChannelMediaOptions(
|
||||
)
|
||||
```
|
||||
|
||||
#### 4.3 InteractiveVideoEncoderConfig 更多参数
|
||||
#### 6.2 InteractiveVideoEncoderConfig 更多参数
|
||||
|
||||
可选项(按需设置):
|
||||
|
||||
@@ -150,14 +169,16 @@ val options = InteractiveChannelMediaOptions(
|
||||
|
||||
## 基础通话流程
|
||||
|
||||
1. 创建 `InteractiveRtcEngine`
|
||||
2. 设置 `EventHandler`
|
||||
3. 配置 `InteractiveVideoEncoderConfig`
|
||||
4. 设置本地画布 `setupLocalVideo`
|
||||
5. `joinChannel` 加入频道
|
||||
6. `onUserJoined` 后设置远端画布
|
||||
7. 通话中进行音视频控制
|
||||
8. `leaveChannel` 并释放资源
|
||||
1. 初始化 SDK(`SellyCloudManager.initialize`)
|
||||
2. 设置代理地址(可选,`SellyCloudManager.setProxyAddress`)
|
||||
3. 创建 `InteractiveRtcEngine`
|
||||
4. 设置 `EventHandler`
|
||||
5. 配置 `InteractiveVideoEncoderConfig`
|
||||
6. 设置本地画布 `setupLocalVideo`
|
||||
7. `joinChannel` 加入频道
|
||||
8. `onUserJoined` 后设置远端画布
|
||||
9. 通话中进行音视频控制
|
||||
10. `leaveChannel` 并释放资源
|
||||
|
||||
---
|
||||
|
||||
@@ -260,7 +281,7 @@ rtcEngine.setRenderVideoFrameInterceptor { frame, userId ->
|
||||
}
|
||||
```
|
||||
|
||||
> Demo 中的美颜示例见:
|
||||
> Demo 中的美颜示例见:
|
||||
> `example/src/main/java/com/demo/SellyCloudSDK/beauty/FuVideoFrameInterceptor.kt`
|
||||
|
||||
---
|
||||
@@ -321,6 +342,61 @@ rtcEngine.renewToken(newToken, expiresAtSec)
|
||||
|
||||
---
|
||||
|
||||
## 代理地址配置
|
||||
|
||||
SDK 支持通过外部代理(如洋葱盾等安全加速服务)连接信令服务器。代理地址由业务方在 SDK 外部获取,然后注入 SDK。
|
||||
|
||||
### 设置方式
|
||||
|
||||
```kotlin
|
||||
// 设置代理地址(在 joinChannel 之前)
|
||||
SellyCloudManager.setProxyAddress("http://127.0.0.1:12345")
|
||||
|
||||
// 清除代理(恢复直连)
|
||||
SellyCloudManager.setProxyAddress(null)
|
||||
|
||||
// 查询当前代理地址
|
||||
val proxy = SellyCloudManager.getProxyAddress() // null 表示未设置
|
||||
```
|
||||
|
||||
### 格式要求
|
||||
|
||||
- 必须以 `http://` 或 `https://` 开头
|
||||
- 传 `null` 或空字符串表示清除代理
|
||||
- 格式不合法时抛出 `IllegalArgumentException`
|
||||
|
||||
### 生效范围
|
||||
|
||||
设置后,SDK 内部通过代理地址解析真实信令服务器 IP,对上层接口透明。
|
||||
|
||||
### 时机要求
|
||||
|
||||
- 必须在 `joinChannel()` **之前** 设置
|
||||
- 通话过程中修改代理地址,需 `leaveChannel` 后重新 `joinChannel` 才能生效
|
||||
|
||||
### Demo 中的接入示例
|
||||
|
||||
Demo 使用 `KiwiHelper` 封装洋葱盾的初始化与代理获取,采用三阶段模式:
|
||||
|
||||
```kotlin
|
||||
// 阶段 1:Application.onCreate() 异步初始化
|
||||
KiwiHelper.initializeAsync()
|
||||
|
||||
// 阶段 2:Activity 初始化时启动代理获取(非阻塞)
|
||||
KiwiHelper.startProxySetup(enableKiwi = true, rsName = "your-rs-name")
|
||||
|
||||
// 阶段 3:joinChannel 前确保代理已就绪
|
||||
lifecycleScope.launch {
|
||||
KiwiHelper.awaitProxyReady()
|
||||
rtcEngine.joinChannel(...)
|
||||
}
|
||||
```
|
||||
|
||||
> `KiwiHelper` 内部通过 `SellyCloudManager.setProxyAddress()` 将代理地址传给 SDK。
|
||||
> 详见 `example/src/main/java/com/demo/SellyCloudSDK/KiwiHelper.kt`。
|
||||
|
||||
---
|
||||
|
||||
## 更多 API 速览(含 Demo 未覆盖)
|
||||
|
||||
引擎创建与销毁:
|
||||
@@ -328,6 +404,12 @@ rtcEngine.renewToken(newToken, expiresAtSec)
|
||||
- `InteractiveRtcEngine.create(config)`:创建引擎
|
||||
- `InteractiveRtcEngine.destroy(engine)` / `engine.destroy()`:释放引擎
|
||||
|
||||
SDK 初始化与代理:
|
||||
|
||||
- `SellyCloudManager.initialize(context, appId, config)`:初始化 SDK
|
||||
- `SellyCloudManager.setProxyAddress(address)`:设置代理地址
|
||||
- `SellyCloudManager.getProxyAddress()`:获取当前代理地址
|
||||
|
||||
通话控制:
|
||||
|
||||
- `setEventHandler(handler)`:设置事件回调
|
||||
@@ -369,7 +451,11 @@ rtcEngine.renewToken(newToken, expiresAtSec)
|
||||
1. 检查 `signaling_app_id` 是否正确
|
||||
2. Token 是否为空或已过期
|
||||
3. 网络是否受限
|
||||
4. 若使用代理,检查代理地址是否已正确设置
|
||||
|
||||
### Q:屏幕分享失败?
|
||||
1. 是否已获取 `MediaProjection` 授权
|
||||
2. Android 14+ 是否启动前台服务
|
||||
|
||||
### Q:如何接入代理/加速服务?
|
||||
SDK 本身不集成任何第三方代理 SDK。业务方需在外部完成代理初始化,获取本地代理地址后,通过 `SellyCloudManager.setProxyAddress()` 注入。详见「代理地址配置」章节。
|
||||
|
||||
Reference in New Issue
Block a user