NextLevel
은 iOS에서 손쉬운 통합, 맞춤형 미디어 캡처 및 이미지 스트리밍을 위해 설계된 Swift 카메라 시스템입니다. 통합에서는 선택적으로 AVFoundation
또는 ARKit
활용할 수 있습니다.
특징 | |
---|---|
? | "덩굴 같은" 비디오 클립 녹화 및 편집 |
? | 사진 캡처(Raw, JPEG 및 비디오 프레임) |
? | 사용자 정의 가능한 제스처 상호 작용 및 인터페이스 |
? | ARKit 통합(베타) |
? | 듀얼, 광각, 망원, 진정한 깊이 지원 |
? | 지원되는 하드웨어에서 조정 가능한 프레임 속도(예: 빠른/느린 모션 캡처) |
? | 깊이 데이터 캡처 지원 및 인물 효과 매트 지원 |
? | 비디오 줌 |
⚖ | 화이트 밸런스, 초점, 노출 조정 |
? | 플래시 및 토치 지원 |
? | 미러링 지원 |
☀ | 저조도 부스트 |
? | 부드러운 자동 초점 |
⚙ | 구성 가능한 인코딩 및 압축 설정 |
? | 간단한 미디어 캡처 및 편집 API |
? | 이미지 처리 및 CV를 위한 확장 가능한 API |
? | 애니메이션 GIF 제작자 |
? | 얼굴인식; QR 및 바코드 인식 |
? | 스위프트 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 및 True Depth Camera 소프트웨어 기능은 각각 Swift 컴파일러 플래그 USE_ARKIT
및 USE_TRUE_DEPTH
를 포함하여 활성화됩니다.
Apple은 ARKit 또는 True Depth Camera API에 연결되는 앱을 거부하고 사용하지 않습니다.
Cocoapods를 사용하는 경우 다음 Podfile
추가 또는 Xcode 빌드 설정에 추가하여 -D USE_ARKIT
또는 -D USE_TRUE_DEPTH
포함할 수 있습니다.
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 {
//
}
} )
//..
}
Swift의 미디어 트랜스코딩 라이브러리인 NextLevelSessionExporter를 사용하여 비디오를 처리할 수도 있습니다.
'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의 기존 녹화 기능과 미디어 관리를 활용하면서 다양한 새로운 카메라 기능을 사용할 수 있습니다.
ARKit 녹화를 위해 SceneKit에서 프레임을 캡처하려는 경우 예제 프로젝트를 확인하세요.
여기에서 문서를 찾을 수 있습니다. 문서는 jazzy로 생성되고 GitHub-Pages에서 호스팅됩니다.
이 프로젝트가 도움이 되었다면 Next Level 스티커를 확인해 보세요.
NextLevel은 커뮤니티입니다. 기여와 토론을 환영합니다!
NextLevel은 MIT 라이선스에 따라 사용할 수 있습니다. 자세한 내용은 LICENSE 파일을 참조하세요.