NextLevel
— это система камер Swift, предназначенная для простой интеграции, индивидуального захвата мультимедиа и потоковой передачи изображений в iOS. При интеграции можно дополнительно использовать AVFoundation
или ARKit
.
Функции | |
---|---|
? | Запись и монтаж видеоклипа «Вайн-подобный» |
? | захват фотографий (raw, jpeg и видеокадр) |
? | настраиваемое жестовое взаимодействие и интерфейс |
? | Интеграция с ARKit (бета) |
? | поддержка двойного, широкоугольного, телеобъектива и истинной глубины |
? | регулируемая частота кадров на поддерживаемом оборудовании (т. е. захват быстрого/замедленного движения) |
? | Поддержка захвата данных о глубине и поддержка портретных эффектов |
? | видео зум |
⚖ | регулировка баланса белого, фокусировки и экспозиции |
? | поддержка вспышки и фонарика |
? | поддержка зеркалирования |
☀ | усиление при слабом освещении |
? | плавный автофокус |
⚙ | настраиваемые параметры кодирования и сжатия |
? | простой API захвата и редактирования мультимедиа |
? | расширяемый API для обработки изображений и резюме |
? | создатель анимированных GIF-файлов |
? | распознавание лиц; распознавание qr- и штрих-кодов |
? | Свифт 5 |
Нужна другая версия Swift?
5.0
. Настройте свой подфайл на последнюю версию или мастер-версию.4.2
. Направьте свой подфайл на ветку 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 или API камеры True Depth, и не использовать их.
Если вы используете Cocoapods, вы можете включить -D USE_ARKIT
или -D USE_TRUE_DEPTH
со следующим дополнением Podfile
или добавив его в настройки сборки 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; дополнительную информацию см. в файле LICENSE.