StreamVideo 1.0.9

StreamVideo 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名团队成员和每月少于1万美元的收入。创客可以免费获得每月100美元的视频信用额。

💡支持的功能💡

以下是我们在支持的功能

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

存储库概述 😎

该存储库包括以下部分

  • 用于通话的低级客户端(如果想要构建自己的UI,也可以独立使用)
  • SwiftUI SDK(使用SwiftUI开发的UI组件)
  • 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 类提供了有关呼叫的所有信息,例如参与者、是否正在录音等。它还提供了在呼叫期间执行标准操作的方法,例如静音/取消静音用户、发送反应、更改摄像头输入、授予权限、录制等。

您可以通过 StreamVideofunc 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 与我们的 SwiftUI SDK 中使用的相同的 CallViewModel 一同创建。

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

路线图

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

0.2里程碑

  • Toast视图
  • 测试覆盖率
  • 大厅更新(显示参与者和事件)
  • 支持设置.audio.default_device
  • 报告API调用上的SDK版本号
  • 修复AppClips
  • 查询通道的分页

0.3里程碑

  • 远程固定用户
  • 将聊天添加到AppStore应用(如果可能,包括应用小工具)
  • 稳定性
  • API集成测试
  • CPU使用改进
  • 音频室UIKit教程
  • 改进聊天集成
  • 从手机进行屏幕分享
  • 切换免提/耳机按钮
  • 音频过滤器

0.4里程碑

  • 模拟ice-restart和SFU切换的按钮
  • 如有权限,提供画中画示例
  • Dynascale 2.0(编解码器、f分辨率切换、WebRTC处理分辨率)
  • 与许多参与者进行测试
  • 视频UIKit教程
  • 呼叫分析/统计数据
  • 改进日志/Sentry集成
  • 完成重新连接流程
  • 分析集成
  • 查询成员的分页
  • 点击聚焦
  • 以最高分辨率显示视频流图片
  • 解决测试反馈
  • 改进直播教程(取决于RTMP支持)