initial commit
This commit is contained in:
140
Example/SellyCloudSDK/Live/连麦功能实现说明_简化版.md
Normal file
140
Example/SellyCloudSDK/Live/连麦功能实现说明_简化版.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# 连麦功能实现说明(简化版)
|
||||
|
||||
## 功能概述
|
||||
|
||||
在 `SCLivePusherViewController`(直播推流页面)中添加了连麦功能,使用简单的 UIAlertController 列表选择连麦对象。
|
||||
|
||||
## 实现的功能
|
||||
|
||||
### 1. 连麦按钮
|
||||
- 位置:右上角,关闭按钮左侧
|
||||
- 图标:
|
||||
- 未连麦状态:`person.2.wave.2`(两个人挥手)
|
||||
- 连麦中状态:`person.2.slash`(两个人被划掉)
|
||||
- 显示时机:开始直播后显示,结束直播时隐藏
|
||||
- 背景色:
|
||||
- 未连麦:半透明灰色
|
||||
- 连麦中:红色
|
||||
|
||||
### 2. 连麦流程
|
||||
|
||||
#### 开始连麦
|
||||
1. 点击连麦按钮
|
||||
2. 显示 "正在获取直播列表..." 加载提示
|
||||
3. 调用 API 获取正在直播的用户列表
|
||||
4. 弹出 ActionSheet 样式的列表,显示 "流ID: xxx" 格式
|
||||
5. 选择一个流ID后:
|
||||
- UI 切换到双屏模式
|
||||
- 左侧:本地推流画面
|
||||
- 右侧:连麦用户画面
|
||||
- 单个视图宽度:`(屏幕宽度 - 8px) / 2`
|
||||
- 宽高比:9:16
|
||||
|
||||
#### 断开连麦
|
||||
1. 再次点击连麦按钮
|
||||
2. 停止连麦播放器
|
||||
3. UI 恢复全屏模式
|
||||
4. 按钮恢复未连麦状态
|
||||
|
||||
### 3. 自动处理
|
||||
- 结束直播时自动断开连麦
|
||||
- 页面退出时自动断开连麦
|
||||
- 播放器出错时自动断开并提示用户
|
||||
|
||||
## 修改的文件
|
||||
|
||||
### SCLivePusherViewController.h
|
||||
- 添加 `isLinking` 属性:连麦状态
|
||||
- 添加 `linkingStream` 属性:连麦流信息
|
||||
|
||||
### SCLivePusherViewController.m
|
||||
新增导入:
|
||||
- `<AFNetworking/AFNetworking.h>`
|
||||
- `<YYModel/YYModel.h>`
|
||||
- `AVLiveStreamModel.h`
|
||||
- `AVConstants.h`
|
||||
|
||||
新增属性:
|
||||
- `linkButton`:连麦按钮
|
||||
- `linkPlayer`:连麦播放器
|
||||
- `linkPlayerView`:连麦播放器视图
|
||||
- `localPusherView`:本地推流视图
|
||||
|
||||
新增方法:
|
||||
- `linkButtonTapped`:连麦按钮点击
|
||||
- `showLiveStreamSelector`:获取并显示直播列表
|
||||
- `showStreamListWithStreams:`:显示流ID选择列表
|
||||
- `startLinkWithStream:`:开始连麦
|
||||
- `setupLinkViews`:设置双屏布局
|
||||
- `startLinkPlayer`:启动连麦播放器
|
||||
- `disconnectLink`:断开连麦
|
||||
- 实现 `SellyLivePlayerDelegate` 代理方法
|
||||
|
||||
## UI 展示
|
||||
|
||||
### 连麦列表(UIAlertController)
|
||||
```
|
||||
┌─────────────────────────┐
|
||||
│ 选择连麦用户 │
|
||||
│ 请选择要连麦的直播流 │
|
||||
│ │
|
||||
│ 流ID: stream_001 │
|
||||
│ 流ID: stream_002 │
|
||||
│ 流ID: stream_003 │
|
||||
│ │
|
||||
│ 取消 │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
### 双屏布局
|
||||
```
|
||||
连麦前: 连麦中:
|
||||
┌─────────────┐ ┌──────┬──────┐
|
||||
│ │ │ │ │
|
||||
│ 全屏直播 │ → │ 本地 │ 连麦 │
|
||||
│ │ │ 9:16 │ 9:16 │
|
||||
└─────────────┘ └──────┴──────┘
|
||||
← 8px间距 →
|
||||
```
|
||||
|
||||
## 播放器状态
|
||||
|
||||
```objective-c
|
||||
typedef NS_ENUM(NSInteger, SellyPlayerState) {
|
||||
SellyPlayerStateIdle = 0, // 空闲
|
||||
SellyPlayerStateConnecting = 1, // 连接中
|
||||
SellyPlayerStatePlaying = 2, // 播放中
|
||||
SellyPlayerStatePaused = 3, // 已暂停
|
||||
SellyPlayerStateStoppedOrEnded = 4, // 已停止
|
||||
SellyPlayerStateFailed = 5 // 失败(自动断开连麦)
|
||||
};
|
||||
```
|
||||
|
||||
## 依赖说明
|
||||
|
||||
项目需要集成:
|
||||
- SellyCloudSDK(直播推拉流)
|
||||
- AFNetworking(网络请求)
|
||||
- YYModel(JSON 解析)
|
||||
- Masonry(Auto Layout)
|
||||
|
||||
常量配置(AVConstants.h):
|
||||
- `V_HOST`
|
||||
- `APP_ID`
|
||||
- `APP_SECRET`
|
||||
|
||||
## 优化点
|
||||
|
||||
相比完整版选择器:
|
||||
1. ✅ 无需额外创建自定义视图控制器
|
||||
2. ✅ 使用系统原生 UIAlertController,更轻量
|
||||
3. ✅ 只显示流ID,简单直观
|
||||
4. ✅ 代码更少,维护更简单
|
||||
5. ✅ 自动适配 iPhone 和 iPad
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 连麦功能仅在直播中可用
|
||||
2. 暂不支持横屏连麦
|
||||
3. 网络错误会有友好提示
|
||||
4. 空列表会提示 "暂无正在直播的用户"
|
||||
Reference in New Issue
Block a user