StreamVideo iOS
这是 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支持)