Files
SellyCloudSDK_demo/Example/SellyCloudSDK/Live/连麦功能实现说明_简化版.md
2026-03-01 15:59:27 +08:00

141 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 连麦功能实现说明(简化版)
## 功能概述
`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网络请求
- YYModelJSON 解析)
- MasonryAuto Layout
常量配置AVConstants.h
- `V_HOST`
- `APP_ID`
- `APP_SECRET`
## 优化点
相比完整版选择器:
1. ✅ 无需额外创建自定义视图控制器
2. ✅ 使用系统原生 UIAlertController更轻量
3. ✅ 只显示流ID简单直观
4. ✅ 代码更少,维护更简单
5. ✅ 自动适配 iPhone 和 iPad
## 注意事项
1. 连麦功能仅在直播中可用
2. 暂不支持横屏连麦
3. 网络错误会有友好提示
4. 空列表会提示 "暂无正在直播的用户"