4.0 KiB
4.0 KiB
连麦功能实现说明(简化版)
功能概述
在 SCLivePusherViewController(直播推流页面)中添加了连麦功能,使用简单的 UIAlertController 列表选择连麦对象。
实现的功能
1. 连麦按钮
- 位置:右上角,关闭按钮左侧
- 图标:
- 未连麦状态:
person.2.wave.2(两个人挥手) - 连麦中状态:
person.2.slash(两个人被划掉)
- 未连麦状态:
- 显示时机:开始直播后显示,结束直播时隐藏
- 背景色:
- 未连麦:半透明灰色
- 连麦中:红色
2. 连麦流程
开始连麦
- 点击连麦按钮
- 显示 "正在获取直播列表..." 加载提示
- 调用 API 获取正在直播的用户列表
- 弹出 ActionSheet 样式的列表,显示 "流ID: xxx" 格式
- 选择一个流ID后:
- UI 切换到双屏模式
- 左侧:本地推流画面
- 右侧:连麦用户画面
- 单个视图宽度:
(屏幕宽度 - 8px) / 2 - 宽高比:9:16
断开连麦
- 再次点击连麦按钮
- 停止连麦播放器
- UI 恢复全屏模式
- 按钮恢复未连麦状态
3. 自动处理
- 结束直播时自动断开连麦
- 页面退出时自动断开连麦
- 播放器出错时自动断开并提示用户
修改的文件
SCLivePusherViewController.h
- 添加
isLinking属性:连麦状态 - 添加
linkingStream属性:连麦流信息
SCLivePusherViewController.m
新增导入:
<AFNetworking/AFNetworking.h><YYModel/YYModel.h>AVLiveStreamModel.hAVConstants.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间距 →
播放器状态
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_HOSTAPP_IDAPP_SECRET
优化点
相比完整版选择器:
- ✅ 无需额外创建自定义视图控制器
- ✅ 使用系统原生 UIAlertController,更轻量
- ✅ 只显示流ID,简单直观
- ✅ 代码更少,维护更简单
- ✅ 自动适配 iPhone 和 iPad
注意事项
- 连麦功能仅在直播中可用
- 暂不支持横屏连麦
- 网络错误会有友好提示
- 空列表会提示 "暂无正在直播的用户"