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 許可證下可用,請參閱許可證文件以獲取更多資訊。