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

4.0 KiB
Raw Permalink Blame History

连麦功能实现说明(简化版)

功能概述

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间距 →

播放器状态

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. 空列表会提示 "暂无正在直播的用户"