StreamVideo iOS
这是 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
类提供了有关呼叫的所有信息,例如参与者、是否正在录音等。它还提供了在呼叫期间执行标准操作的方法,例如静音/取消静音用户、发送反应、更改摄像头输入、授予权限、录制等。
您可以通过 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
与我们的 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支持)