StreamVideoSwiftUI 1.0.9

StreamVideoSwiftUI 1.0.9

由以下成员维护: Stream iOS BotMartin MitrevskiAlexey Alter-PesotskiyIlias PavlidakisStream - Nuno



StreamVideo iOS

StreamVideo StreamVideoSwiftUI

Stream Video for iOS Header image

这是 StreamVideo 的官方 iOS SDK,StreamVideo 是一个支持视频和音频通话的构建应用程序的平台。该仓库包括底层的 SDK 和一套可重用的 UI 组件,可在 UIKit 和 SwiftUI 中使用。

什么是 Stream?

Stream 允许开发者快速部署可扩展的动态内容、聊天消息和视频,并提供行业领先的 99.999% 的正常运行时间 SLA 保证。

使用 Stream 的视频组件,您可以利用他们的 SDK 构建应用程序中的视频通话、音频房间、音频通话或实时直播。最佳入门点是他们的教程

  • 视频 & 音频通话教程
  • 音频房间教程
  • 直播教程

Stream 提供了 UI 组件和状态处理,这使得构建您应用程序中的视频通话变得容易。所有通话都运行在 Stream 的全球边缘服务器网络中,确保最佳的延迟和可靠性。

👩‍💻 免费提供给创作者 👨‍💻

Stream服务对大多数侧面和业余项目免费。为了符合条件,您的项目/公司需要有少于5名团队成员和每月收入少于10,000美元。制作人员可免费获得每月100美元的视频信用额。

🌟支持的功能🌟

以下是我们的部分支持功能:

  • 开发者体验:出色的SDK、文档、教程和支持,让您可以快速构建项目
  • 边缘网络:全球服务器确保最佳延迟和可靠性
  • 聊天:存储聊天、反应、线程、输入指示器、URL预览等
  • 安全与隐私:基于美国和欧洲,Soc2认证,GDPR合规
  • 动态缩放:自动切换分辨率、fps、码率、编解码器和大型通话的视频分页
  • 屏幕共享
  • 画中画支持
  • 活跃发言人
  • 自定义事件
  • 地理围栏
  • 通知和呼叫声
  • Opus DTX & Red确保可靠的音频
  • Webhooks & SQS
  • 后台模式
  • 灵活的权限系统
  • 通过ID、链接或邀请加入通话
  • 在通话中启用和禁用音频和视频
  • 在通话中翻转、启用和禁用摄像头
  • 在通话中启用和禁用免提音箱
  • 推送通知服务提供商支持
  • 通话录制
  • 广播到HLS

仓库概述 😎

此仓库包含以下部分:

  • 呼叫的低层次客户端(如果您想构建自己的UI,可以独立使用)
  • SwiftUI SDK(使用SwiftUI开发的应用组件)
  • UIKit SDK(UIKit应用程序中使用时的包装器,便于使用)

主要原则

  • 逐步揭示:SDK易于使用,无需深入了解。随着您对其更加熟悉,您可以更深入地挖掘并开始从所有级别自定义它。
  • Swift 原生 API:利用 Swift 强大的语言特性,使 SDK 使用简单且类型安全。
  • 熟悉的操作:UI 元素是良好的平台公民,表现得像原生元素;它们遵守 tintColor、填充、日光/夜间模式、动态字体大小等。
  • 完全开源实现:您可以在 GitHub 上访问 SDK 的完整源代码。

低级客户端

低级客户端用于建立音频和视频通话。它与 Stream 的后端基础设施集成,并实现了 WebRTC 协议。

以下是低级客户端提供的重要组件:

  • StreamVideo - 主 SDK 对象。
  • Call - 一个提供通话状态信息并支持更新状态的方法的对象。

StreamVideo

这是与低级客户端交互的主对象。在 SDK 可以使用之前,需要用 API 密钥和用户/令牌进行初始化。

let streamVideo = StreamVideo(
    apiKey: "key1",
    user: user.userInfo,
    token: user.token,
    videoConfig: VideoConfig(),
    tokenProvider: { result in
      yourNetworkService.loadToken(completion: result)
    }
)

Call

Call 类提供了有关通话的所有信息,如图像的参与者、通话是否正在录制等。它还提供了执行通话期间的标准操作的方法,例如静音/取消静音用户、发送反应、更改摄像头输入、授权权限、录制等。

您可以通过 StreamVideo 的方法 func call(callType: String, callId: String, members: [Member]) 创建一个新的 Call

SwiftUI SDK

SwiftUI SDK 提供了开箱即用的 UI 组件,可在您的应用中使用。

将呼叫支持添加到您的托管视图的最简单方法是将 CallModifier 绑定上去。

struct CallView: View {

    @StateObject var viewModel: CallViewModel

    init() {
        _viewModel = StateObject(wrappedValue: CallViewModel())
    }

    var body: some View {
        HomeView(viewModel: viewModel)
            .modifier(CallModifier(viewModel: viewModel))
    }
}

通过在我们的 ViewFactory 中实现相应的函数,您可以自定义调用流程中显示的屏幕的外观和感觉。

我们的大部分组件都是公开的,所以如果需要构建自定义 UI,您可以将它们用作构建块。

SDK 中使用到的所有文本、图像、字体和声音均可以通过我们的 Appearance 类进行配置,以帮助您将视图与您的托管应用的品牌保持一致。

UIKit SDK

UIKit SDK 提供了对 SwiftUI 视图的 UIKit 包装器。其主要集成点是 CallViewController,您可以将它轻松地推入您的导航堆栈,或者将其添加为模态屏幕。

private func didTapStartButton() {
    let next = CallViewController.make(with: callViewModel)
    next.modalPresentationStyle = .fullScreen
    next.startCall(
            callType: "default",
            callId: callId,
            members: members
        )
    self.navigationController?.present(next, animated: true)
}

CallViewController 是与 CallViewModel 一起创建的,与我们在 SwiftUI SDK 中使用的同一个。

目前,UIKit SDK 中的所有自定义操作都需要在 SwiftUI 中完成。

路线图

视频路线图和变更日志可在此处找到。

0.2 编号里程碑

  • 吐司视图
  • 测试覆盖率
  • 接待室更新(显示参与者和活动)
  • 支持设置音频默认设备
  • 在所有 API 调用中报告 SDK 版本号
  • 修复 AppClips
  • 查询通道上的分页

0.3 工程里程碑

  • 远程固定的用户
  • 向AppStore应用添加聊天功能(如果可能,还包括应用快照)
  • 稳定性
  • API集成测试
  • CPU使用改进
  • 音频室UIKit教程
  • 改进聊天集成
  • 从手机分享屏幕
  • 切换扬声器/听筒的按钮
  • 音频过滤器

0.4 工程里程碑

  • 模拟冰重启和SFU切换的按钮
  • 画中画示例(如果获得相应的授权)
  • Dynascale 2.0(编解码器,分辨率切换,WebRTC分辨率处理)
  • 测试许多参与者
  • 视频UIKit教程
  • 呼叫分析/统计
  • 改进日志记录/Sentry集成
  • 完成重新连接流程
  • 分析集成
  • 查询成员的分页
  • 点击聚焦
  • 最高分辨率下的视频流图片
  • 地址测试反馈
  • 改进直播教程(取决于RTMP支持)