NextLevel
是一款 Swift 相机系统,专为 iOS 中的轻松集成、定制媒体捕获和图像流而设计。集成可以选择利用AVFoundation
或ARKit
。
特征 | |
---|---|
? | “藤蔓”视频剪辑录制 |
? | 照片捕获(RAW、JPEG 和视频帧) |
? | 可定制的手势交互和界面 |
? | ARKit 集成(测试版) |
? | 双镜头、广角、长焦和真实深度支持 |
? | 支持硬件上的可调节帧速率(即快/慢动作捕捉) |
? | 深度数据捕获支持和肖像效果遮罩支持 |
? | 视频变焦 |
⚖ | 白平衡、对焦和曝光调整 |
? | 闪光灯和手电筒支持 |
? | 镜像支持 |
☀ | 弱光增强 |
? | 平滑的自动对焦 |
⚙ | 可配置的编码和压缩设置 |
? | 简单的媒体捕获和编辑 API |
? | 用于图像处理和 CV 的可扩展 API |
? | 动画 GIF 创建者 |
? | 人脸识别;二维码和条形码识别 |
? | 雨燕5 |
需要不同版本的 Swift?
5.0
- 将您的 Podfile 定位到最新版本或主版本4.2
- 将您的 Podfile 定位到swift4.2
分支 # CocoaPods
pod "NextLevel" , "~> 0.16.3"
# Carthage
github "nextlevel/NextLevel" ~> 0.16 . 3
# Swift PM
let package = Package (
dependencies : [
. Package ( url : "https://github.com/nextlevel/NextLevel" , majorVersion : 0 )
]
)
或者,将 NextLevel 源文件或项目文件拖放到您的 Xcode 项目中。
ARKit 和原深度相机软件功能分别通过包含 Swift 编译器标志USE_ARKIT
和USE_TRUE_DEPTH
来启用。
Apple 将拒绝链接 ARKit 或原深度相机 API 的应用程序,并且不会使用它们。
如果您使用 Cocoapods,则可以在以下Podfile
添加中包含-D USE_ARKIT
或-D USE_TRUE_DEPTH
或将其添加到 Xcode 构建设置中。
installer . pods_project . targets . each do | target |
# setup NextLevel for ARKit use
if target . name == 'NextLevel'
target . build_configurations . each do | config |
config . build_settings [ 'OTHER_SWIFT_FLAGS' ] = [ '$(inherited)' , '-DUSE_ARKIT' ]
end
end
end
在开始之前,请确保权限密钥已添加到应用程序的Info.plist
中。
< key >NSCameraUsageDescription key >
< string >Allowing access to the camera lets you take photos and videos. string >
< key >NSMicrophoneUsageDescription key >
< string >Allowing access to the microphone lets you record audio. string >
导入库。
import NextLevel
设置相机预览。
let screenBounds = UIScreen . main . bounds
self . previewView = UIView ( frame : screenBounds )
if let previewView = self . previewView {
previewView . autoresizingMask = [ . flexibleWidth , . flexibleHeight ]
previewView . backgroundColor = UIColor . black
NextLevel . shared . previewLayer . frame = previewView . bounds
previewView . layer . addSublayer ( NextLevel . shared . previewLayer )
self . view . addSubview ( previewView )
}
配置捕获会话。
override func viewDidLoad ( ) {
NextLevel . shared . delegate = self
NextLevel . shared . deviceDelegate = self
NextLevel . shared . videoDelegate = self
NextLevel . shared . photoDelegate = self
// modify .videoConfiguration, .audioConfiguration, .photoConfiguration properties
// Compression, resolution, and maximum recording time options are available
NextLevel . shared . videoConfiguration . maximumCaptureDuration = CMTimeMakeWithSeconds ( 5 , 600 )
NextLevel . shared . audioConfiguration . bitRate = 44000
}
在适当的时候开始/停止会话。这些方法在调用时为“NextLevel.shared.session”创建一个新的“会话”实例。
override func viewWillAppear ( _ animated : Bool ) {
super . viewWillAppear ( animated )
NextLevel . shared . start ( )
// …
}
override func viewWillDisappear ( _ animated : Bool ) {
super . viewWillDisappear ( animated )
NextLevel . shared . stop ( )
// …
}
视频录制/暂停。
// record
NextLevel . shared . record ( )
// pause
NextLevel . shared . pause ( )
编辑并完成录制的会话。
if let session = NextLevel . shared . session {
//..
// undo
session . removeLastClip ( )
// various editing operations can be done using the NextLevelSession methods
// export
session . mergeClips ( usingPreset : AVAssetExportPresetHighestQuality , completionHandler : { ( url : URL ? , error : Error ? ) in
if let _ = url {
//
} else if let _ = error {
//
}
} )
//..
}
视频还可以使用 NextLevelSessionExporter(Swift 中的媒体转码库)进行处理。
“NextLevel”专为样本缓冲区分析和实时自定义修改以及丰富的相机功能而设计。
请注意,对缓冲区执行的修改并提供回 NextLevel 可能会影响帧速率。
启用自定义渲染。
NextLevel . shared . isVideoCustomContextRenderingEnabled = true
可选的钩子,允许读取sampleBuffer
进行分析。
extension CameraViewController : NextLevelVideoDelegate {
// ...
// video frame processing
public func nextLevel ( _ nextLevel : NextLevel , willProcessRawVideoSampleBuffer sampleBuffer : CMSampleBuffer ) {
// Use the sampleBuffer parameter in your system for continual analysis
}
用于读取缓冲区进行修改的另一个可选钩子imageBuffer
。这也是推荐将缓冲区提供回 NextLevel 进行录制的位置。
extension CameraViewController : NextLevelVideoDelegate {
// ...
// enabled by isCustomContextVideoRenderingEnabled
public func nextLevel ( _ nextLevel : NextLevel , renderToCustomContextWithImageBuffer imageBuffer : CVPixelBuffer , onQueue queue : DispatchQueue ) {
// provide the frame back to NextLevel for recording
if let frame = self . _availableFrameBuffer {
nextLevel . videoCustomContextImageBuffer = frame
}
}
NextLevel 将在将缓冲区写入目标文件时检查此属性。这适用于capturePhotoFromVideo
的视频和照片。
nextLevel . videoCustomContextImageBuffer = modifiedFrame
NextLevel 最初是一个周末项目,现已发展成为一个由相机平台爱好者组成的开放社区。该软件提供了用于管理 iOS 上的媒体录制、相机界面自定义、手势交互自定义和图像流的基础组件。 Snapchat、Instagram 和 Vine 等应用程序也具有相同的功能。
目标是继续为快速集成提供良好的基础(使项目能够更上一层楼)——让重点放在最重要的功能上,无论是实时图像处理、计算机视觉方法、增强现实还是计算摄影。
NextLevel 提供了用于捕获 ARKit 视频和照片的组件。这实现了各种新的相机功能,同时利用 NextLevel 的现有录制功能和媒体管理。
如果您尝试从 SceneKit 捕获帧以进行 ARKit 录制,请查看示例项目。
您可以在此处找到文档。文档由 jazzy 生成并托管在 GitHub-Pages 上。
如果您发现这个项目有帮助,请查看下一级贴纸。
NextLevel 是一个社区——欢迎贡献和讨论!
NextLevel 在 MIT 许可证下可用,请参阅许可证文件以获取更多信息。