let aespaOption = AespaOption(albumName: "YOUR_ALBUM_NAME")
let aespaSession = Aespa.session(with: aespaOption)
// Done!
Aespa 是一个强大且直观的 Swift 包,用于视频和照片拍摄,专注于易于设置和使用。
它被设计成易于从初学者到中级开发人员使用。如果您是 iOS 视频录制的新手,或者您正在寻找简化现有相机设置的方法,那么 Aespa 可能是您项目的完美选择。
之前
graph LR
User --> RP["Permission Request"]
RP -- "Granted" --> AS["AVCaptureSession"]
AS -- "Connect" --> AI["AVCaptureVideoInput"]
AS -- "Connect" --> AIA["AVCaptureAudioInput"]
AS -- "Add" --> FO["AVCaptureFileOutput"]
FO --> PHCollectionListChangeRequest
Aespa
graph LR
User --> Aespa --> Session & Album
AVFoundation
的复杂性,使您可以轻松管理视频拍摄任务。graph TD
AS["AespaSession"]
AS --> RV["Recording a new video"]
AS --> Se["Change zoom, video quailty, camera position, ..."]
AS --> AV["Set options like stabilization, orientation ,..."]
AS --> D["Fetching asset files"]
graph LR;
A[Session update] -->|Trigger| B[previewLayerPublisher, ...]
B -->|React to Changes| C[Subscribers]
E[Background Thread] --Async--> F["Configure session"] --Finish--> A
Combine
,使您可以使用发布者和订阅者以反应式方式处理更新,例如视频输出和预览层。注意
您可以在这里访问我们的官方文档,以获取更全面和最新的说明
通用 | 描述 |
---|---|
✨ zoom |
修改缩放因子。 |
✨ position |
更改相机位置。 |
orientation |
修改方向。 |
focus |
改变自动对焦模式。 |
quality |
调整录制会话的视频质量预设。 |
doctor |
检查是否满足开始录制的必要条件。 |
previewLayerPublisher |
负责向预览层发送更新。 |
视频 | 描述 |
---|---|
✨ startRecording |
启动视频会话的录制。 |
✨ stopRecording |
终止当前的视频录制会话并尝试保存视频文件。 |
mute |
静音音频输入。 |
unmute |
恢复音频输入。 |
stabilization |
改变稳定模式。 |
torch |
调整闪光灯模式和级别。 |
customize |
使用特定的调整配置自定义会话。 |
✨ fetchVideoFiles |
获取录制的视频文件列表。 |
videoFilePublisher |
发出包含最新视频文件数据的 Result 对象。 |
照片 | 描述 |
---|---|
✨ capturePhoto |
拍摄照片并返回结果图像文件。 |
✨ flashMode |
设置照片拍摄会话的闪光模式。 |
redEyeReduction |
启用或禁用照片拍摄会话的红眼消除功能。 |
customize |
使用特定的 AVCapturePhotoSettings 自定义照片拍摄会话。 |
✨ fetchPhotoFiles |
获取拍摄的照片文件列表。 |
photoFilePublisher |
发出包含最新图像文件数据的 Result 对象。 |
主要功能之一,InteractivePreview
为那些不想进行复杂配置的人提供了预设会话。
特性 | 描述 |
---|---|
双击切换相机 | 双击时在前置和后置摄像头之间切换。 |
捏合缩放 | 允许使用捏合手势放大或缩小预览。 |
按照以下步骤使用 SPM 安装 Aespa
File
> Swift Packages
> Add Package Dependency
。Next
。https://github.com/enebin/Aespa.git
Version rule
,选择 Up to Next Minor
并指定当前的 Aespa 版本,然后单击 Next
。Aespa
库,然后单击 Finish
。Aespa 现在应该已集成到您的项目中 🚀。
注意
我们为 SwiftUI 应用程序提供了一个非常详细且随时可用的代码库,该代码库展示了该软件包的大部分功能。 您可以在这里访问它,演示应用程序。
import Aespa
let option = AespaOption(albumName: "YOUR_ALBUM_NAME")
let aespaSession = Aespa.session(with: option)
// Common setting
aespaSession
.common(.focus(mode: .continuousAutoFocus))
.common(.changeMonitoring(enabled: true))
.common(.orientation(orientation: .portrait))
.common(.quality(preset: .high))
.common(.custom(tuner: WideColorCameraTuner())) { result in
if case .failure(let error) = result {
print("Error: ", error)
}
}
// Photo-only setting
aespaSession
.photo(.flashMode(mode: .on))
.photo(.redEyeReduction(enabled: true))
// Video-only setting
aespaSession
.video(.mute)
.video(.stabilization(mode: .auto))
// Start recording
aespaSession.startRecording()
// Later... stop recording
aespaSession.stopRecording()
// Capture photo
aespaSession.capturePhoto()
aespaSession.stopRecording { result in
switch result {
case .success(let file):
print(file.path) // file://some/path
case .failure(let error):
print(error)
}
}
// or...
Task {
let files = await aespaSession.fetchVideoFiles(limit: 1)
}
// or you can use publisher
aespaSession.videoFilePublisher.sink { result in
print(result)
}
Aespa 还提供了一种超级简单的方法,将视频拍摄功能集成到 SwiftUI 应用程序中。 AespaSession
包含一个辅助方法来创建 SwiftUI UIViewRepresentable
,该方法提供视频拍摄的预览。
import Aespa
import SwiftUI
struct VideoContentView: View {
@StateObject private var viewModel = VideoContentViewModel()
var body: some View {
ZStack {
viewModel.preview
.frame(minWidth: 0,
maxWidth: .infinity,
minHeight: 0,
maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
}
}
}
class VideoContentViewModel: ObservableObject {
let aespaSession: AespaSession
var preview: some View {
aespaSession.interactivePreview()
}
init() {
let option = AespaOption(albumName: "YOUR_ALBUM_NAME")
self.aespaSession = Aespa.session(with: option)
setUp()
}
func setUp() {
aespaSession
.common(.quality(preset: .high))
// Other options
// ...
}
}
注意
在
UIKit
中,您可以通过AespaSession
的previewLayer
属性访问预览。 有关更多详细信息,请参阅 Apple 官方文档中的 AVCaptureVideoPreviewLayer。
热烈欢迎对 Aespa 的贡献。如果您发现错误或有功能请求,请随时提交 pull request 或创建 issue。
Aespa 在 MIT 许可下可用。 有关更多信息,请参见 LICENSE 文件。