NextLevel
est un système de caméra Swift conçu pour une intégration facile, une capture multimédia personnalisée et une diffusion d'images en continu dans iOS. L'intégration peut éventuellement exploiter AVFoundation
ou ARKit
.
Caractéristiques | |
---|---|
? | Enregistrement et montage de clips vidéo « Vine-like » |
? | capture de photos (image brute, jpeg et vidéo) |
? | interaction gestuelle et interface personnalisables |
? | Intégration ARKit (bêta) |
? | prise en charge double, grand angle, téléobjectif et véritable profondeur |
? | fréquence d'images réglable sur le matériel pris en charge (c'est-à-dire capture de mouvements rapides/lents) |
? | Prise en charge de la capture de données en profondeur et prise en charge du cache des effets de portrait |
? | zoom vidéo |
⚖ | réglage de la balance des blancs, de la mise au point et de l'exposition |
? | prise en charge du flash et de la torche |
? | prise en charge de la mise en miroir |
☀ | faible luminosité |
? | mise au point automatique fluide |
⚙ | paramètres d'encodage et de compression configurables |
? | API simple de capture et d'édition de médias |
? | API extensible pour le traitement d'images et de CV |
? | créateur de GIF animés |
? | reconnaissance faciale; reconnaissance de codes QR et de codes-barres |
? | Rapide 5 |
Besoin d’une version différente de Swift ?
5.0
- Ciblez votre Podfile sur la dernière version ou master4.2
- Ciblez votre Podfile sur la branche 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 )
]
)
Vous pouvez également déposer les fichiers source ou le fichier de projet NextLevel dans votre projet Xcode.
Les fonctionnalités du logiciel ARKit et True Depth Camera sont activées avec l'inclusion de l'indicateur du compilateur Swift USE_ARKIT
et USE_TRUE_DEPTH
respectivement.
Apple rejettera les applications liées à ARKit ou à l'API True Depth Camera et ne les utilisera pas.
Si vous utilisez Cocoapods, vous pouvez inclure -D USE_ARKIT
ou -D USE_TRUE_DEPTH
avec l'ajout Podfile
suivant ou en l'ajoutant à vos paramètres de construction 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
Avant de commencer, assurez-vous que les clés d'autorisation ont été ajoutées au Info.plist
de votre application.
< 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 >
Importez la bibliothèque.
import NextLevel
Configurez l'aperçu de la caméra.
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 )
}
Configurez la session de capture.
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
}
Démarrez/arrêtez la session le cas échéant. Ces méthodes créent une nouvelle instance de « session » pour « NextLevel.shared.session » lorsqu'elles sont appelées.
override func viewWillAppear ( _ animated : Bool ) {
super . viewWillAppear ( animated )
NextLevel . shared . start ( )
// …
}
override func viewWillDisappear ( _ animated : Bool ) {
super . viewWillDisappear ( animated )
NextLevel . shared . stop ( )
// …
}
Enregistrement/pause vidéo.
// record
NextLevel . shared . record ( )
// pause
NextLevel . shared . pause ( )
Montage et finalisation de la session enregistrée.
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 {
//
}
} )
//..
}
Les vidéos peuvent également être traitées à l'aide de NextLevelSessionExporter, une bibliothèque de transcodage multimédia dans Swift.
« NextLevel » a été conçu pour l'analyse de tampons d'échantillons et la modification personnalisée en temps réel, ainsi qu'un riche ensemble de fonctionnalités de caméra.
Juste à noter, les modifications effectuées sur un tampon et renvoyées à NextLevel peuvent potentiellement affecter la fréquence d'images.
Activez le rendu personnalisé.
NextLevel . shared . isVideoCustomContextRenderingEnabled = true
Hook facultatif qui permet de lire sampleBuffer
pour analyse.
extension CameraViewController : NextLevelVideoDelegate {
// ...
// video frame processing
public func nextLevel ( _ nextLevel : NextLevel , willProcessRawVideoSampleBuffer sampleBuffer : CMSampleBuffer ) {
// Use the sampleBuffer parameter in your system for continual analysis
}
Un autre hook facultatif pour lire les tampons de modification, imageBuffer
. C'est également l'endroit recommandé pour fournir le tampon à NextLevel pour l'enregistrement.
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 vérifiera cette propriété lors de l'écriture de tampons dans un fichier de destination. Cela fonctionne à la fois pour la vidéo et les photos avec capturePhotoFromVideo
.
nextLevel . videoCustomContextImageBuffer = modifiedFrame
NextLevel était à l'origine un projet de week-end qui est maintenant devenu une communauté ouverte d'enthousiastes des plateformes de caméras. Le logiciel fournit des composants fondamentaux pour la gestion de l'enregistrement multimédia, la personnalisation de l'interface de la caméra, la personnalisation des interactions gestuelles et la diffusion d'images en continu sur iOS. Les mêmes fonctionnalités peuvent également être trouvées dans des applications telles que Snapchat, Instagram et Vine.
L'objectif est de continuer à fournir une bonne base pour une intégration rapide (permettant de faire passer les projets au niveau supérieur) - permettant de se concentrer sur les fonctionnalités les plus importantes, qu'il s'agisse du traitement d'images en temps réel, des méthodes de vision par ordinateur, de la réalité augmentée ou de la photographie informatique. .
NextLevel fournit des composants pour capturer des vidéos et des photos ARKit. Cela permet une variété de nouvelles fonctionnalités de caméra tout en tirant parti des capacités d'enregistrement existantes et de la gestion des médias de NextLevel.
Si vous essayez de capturer des images de SceneKit pour l'enregistrement ARKit, consultez les exemples de projet.
Vous pouvez trouver les documents ici. La documentation est générée avec Jazzy et hébergée sur GitHub-Pages.
Si vous avez trouvé ce projet utile, consultez les autocollants Next Level.
NextLevel est une communauté – les contributions et les discussions sont les bienvenues !
NextLevel est disponible sous licence MIT, voir le fichier LICENSE pour plus d'informations.