NextLevel
es un sistema de cámara Swift diseñado para una fácil integración, captura de medios personalizada y transmisión de imágenes en iOS. La integración puede aprovechar opcionalmente AVFoundation
o ARKit
.
Características | |
---|---|
? | Grabación y edición de videoclips “tipo Vine” |
? | captura de fotografías (raw, jpeg y fotogramas de vídeo) |
? | Interacción e interfaz gestual personalizable. |
? | Integración de ARKit (beta) |
? | Soporte dual, gran angular, teleobjetivo y profundidad real |
? | velocidad de fotogramas ajustable en hardware compatible (es decir, captura en cámara rápida/lenta) |
? | soporte de captura de datos de profundidad y soporte mate de efectos de retrato |
? | zoom de vídeo |
⚖ | balance de blancos, enfoque y ajuste de exposición |
? | soporte para flash y antorcha |
? | soporte de duplicación |
☀ | aumento de luz baja |
? | enfoque automático suave |
⚙ | ajustes configurables de codificación y compresión |
? | API simple de captura y edición de medios |
? | API extensible para procesamiento de imágenes y CV |
? | creador de GIF animados |
? | reconocimiento facial; reconocimiento de códigos qr y de barras |
? | veloz 5 |
¿Necesita una versión diferente de Swift?
5.0
: oriente su Podfile a la última versión o versión maestra4.2
- Dirige tu Podfile a la rama 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 )
]
)
Alternativamente, suelte los archivos fuente de NextLevel o el archivo de proyecto en su proyecto Xcode.
ARKit y las funciones del software True Depth Camera están habilitadas con la inclusión del indicador del compilador Swift USE_ARKIT
y USE_TRUE_DEPTH
respectivamente.
Apple rechazará las aplicaciones que se vinculen con ARKit o la API de True Depth Camera y no las utilizará.
Si usa Cocoapods, puede incluir -D USE_ARKIT
o -D USE_TRUE_DEPTH
con la siguiente adición Podfile
o agregándolo a la configuración de compilación de 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
Antes de comenzar, asegúrese de que se hayan agregado las claves de permiso al Info.plist
de su aplicación.
< 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 >
Importa la biblioteca.
import NextLevel
Configure la vista previa de la cámara.
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 )
}
Configurar la sesión de captura.
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
}
Iniciar/detener la sesión cuando corresponda. Estos métodos crean una nueva instancia de "sesión" para 'NextLevel.shared.session' cuando se les llama.
override func viewWillAppear ( _ animated : Bool ) {
super . viewWillAppear ( animated )
NextLevel . shared . start ( )
// …
}
override func viewWillDisappear ( _ animated : Bool ) {
super . viewWillDisappear ( animated )
NextLevel . shared . stop ( )
// …
}
Grabación/pausa de vídeo.
// record
NextLevel . shared . record ( )
// pause
NextLevel . shared . pause ( )
Edición y finalización de la sesión grabada.
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 {
//
}
} )
//..
}
Los vídeos también se pueden procesar utilizando NextLevelSessionExporter, una biblioteca de transcodificación de medios en Swift.
'NextLevel' fue diseñado para el análisis del búfer de muestras y la modificación personalizada en tiempo real junto con un amplio conjunto de funciones de la cámara.
Solo para tener en cuenta, las modificaciones realizadas en un búfer y devueltas a NextLevel pueden afectar potencialmente la velocidad de fotogramas.
Habilite la representación personalizada.
NextLevel . shared . isVideoCustomContextRenderingEnabled = true
Gancho opcional que permite leer sampleBuffer
para su análisis.
extension CameraViewController : NextLevelVideoDelegate {
// ...
// video frame processing
public func nextLevel ( _ nextLevel : NextLevel , willProcessRawVideoSampleBuffer sampleBuffer : CMSampleBuffer ) {
// Use the sampleBuffer parameter in your system for continual analysis
}
Otro gancho opcional para leer buffers para modificación, imageBuffer
. Este también es el lugar recomendado para devolver el búfer a NextLevel para la grabación.
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 comprobará esta propiedad al escribir buffers en un archivo de destino. Esto funciona tanto para videos como para fotos con capturePhotoFromVideo
.
nextLevel . videoCustomContextImageBuffer = modifiedFrame
NextLevel fue inicialmente un proyecto de fin de semana que ahora se ha convertido en una comunidad abierta de entusiastas de las plataformas de cámaras. El software proporciona componentes fundamentales para gestionar la grabación de medios, la personalización de la interfaz de la cámara, la personalización de la interacción gestual y la transmisión de imágenes en iOS. Las mismas capacidades también se pueden encontrar en aplicaciones como Snapchat, Instagram y Vine.
El objetivo es continuar proporcionando una buena base para una integración rápida (lo que permitirá llevar los proyectos al siguiente nivel), permitiendo centrarse en la funcionalidad más importante, ya sea procesamiento de imágenes en tiempo real, métodos de visión por computadora, realidad aumentada o fotografía computacional. .
NextLevel proporciona componentes para capturar videos y fotografías ARKit. Esto permite una variedad de nuevas funciones de la cámara al tiempo que aprovecha las capacidades de grabación existentes y la administración de medios de NextLevel.
Si está intentando capturar fotogramas de SceneKit para la grabación ARKit, consulte el proyecto de ejemplos.
Puede encontrar los documentos aquí. La documentación se genera con jazzy y se aloja en GitHub-Pages.
Si este proyecto le resultó útil, consulte las pegatinas del siguiente nivel.
NextLevel es una comunidad: ¡las contribuciones y los debates son bienvenidos!
NextLevel está disponible bajo la licencia MIT; consulte el archivo LICENCIA para obtener más información.