StreamVideoUIKit 1.0.9

StreamVideoUIKit 1.0.9

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



 
依赖
StreamVideo= 1.0.9
StreamVideoSwiftUI= 1.0.9
 

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 全球边缘服务器网络上运行,确保最佳延迟和可靠性。

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

对于大多数侧面和兴趣项目,流是免费的。要想符合资格,您的项目/公司需要拥有 < 5 个团队成员和 < 的月收入 $10k。制作者每月免费获得 $100 的视频 Credit。

💡支持的功能💡

以下是我们支持的一些功能:

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

仓库概览 😎

此仓库包含以下部分:

  • 用于调用的低级客户端(如果您想构建自己的 UI,则可以独立使用)
  • SwiftUI SDK(使用 SwiftUI 开发的 UI 组件)
  • UIKit SDK(在 UIKit 应用中更容易使用的包装器)

主要原则

  • 逐步揭露:可以对SDK进行容易使用,并无需深入理解即可使用。随着你对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 版本里程碑

  • Toast 视图
  • 测试覆盖率
  • 大堂更新(显示参与者和活动)
  • 支持设置.audio.default_device
  • 在所有 API 调用中报告 SDK 版本号
  • 修复 AppClips
  • 查询渠道的分页

0.3 版本里程碑

  • 用户远程锁定
  • 将聊天添加到 AppStore 应用(如果可能,还包括应用剪贴版)
  • 稳定性
  • API 集成测试
  • CPU 使用率改进
  • 音频房间 UIKit 指南
  • 改进聊天集成
  • 从手机进行屏幕共享
  • 切换免提/耳机按钮
  • 音频过滤器

0.4 版本里程碑

  • 模拟 ICE 重启和 SFU 切换的按钮
  • 画中画示例(如果获得权限的话)
  • Dynascale 2.0(编解码器,f 分辨率切换,WebRTC 处理分辨率)
  • 与许多参与者测试
  • 视频 UIKit 指南
  • 呼叫分析 / 统计
  • 改进日志记录 / Sentry 集成
  • 完成重新连接流程
  • 分析集成
  • 查询成员的分页
  • 轻触聚焦
  • 以最高分辨率显示的视频流图片
  • 处理测试反馈
  • 改进实时流指南(取决于 RTMP 支持情况)