NextLevel
ist ein Swift-Kamerasystem, das für eine einfache Integration, individuelle Medienerfassung und Bild-Streaming in iOS entwickelt wurde. Die Integration kann optional AVFoundation
oder ARKit
nutzen.
Merkmale | |
---|---|
? | Aufnahme und Bearbeitung von Videoclips im „Vine-Stil“. |
? | Fotoaufnahme (Roh-, JPEG- und Videobild) |
? | anpassbare gestische Interaktion und Benutzeroberfläche |
? | ARKit-Integration (Beta) |
? | Dual-, Weitwinkel-, Tele- und True-Depth-Unterstützung |
? | Einstellbare Bildrate auf unterstützter Hardware (z. B. schnelle/Zeitlupenaufnahme) |
? | Unterstützung für Tiefendatenerfassung und Unterstützung für Porträteffekte |
? | Videozoom |
⚖ | Weißabgleich, Fokus und Belichtungseinstellung |
? | Blitz- und Taschenlampenunterstützung |
? | Spiegelungsunterstützung |
☀ | Low-Light-Boost |
? | sanfter Autofokus |
⚙ | konfigurierbare Kodierungs- und Komprimierungseinstellungen |
? | Einfache API zur Medienerfassung und -bearbeitung |
? | erweiterbare API für Bildverarbeitung und Lebenslauf |
? | animierter GIF-Ersteller |
? | Gesichtserkennung; QR- und Barcode-Erkennung |
? | Swift 5 |
Benötigen Sie eine andere Version von Swift?
5.0
– Richten Sie Ihr Podfile auf die neueste Version oder den neuesten Master aus4.2
– Richten Sie Ihr Podfile auf den Zweig swift4.2
aus # 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 )
]
)
Alternativ können Sie die NextLevel-Quelldateien oder die Projektdatei in Ihrem Xcode-Projekt ablegen.
ARKit und die Softwarefunktionen der True Depth Camera werden durch die Einbeziehung der Swift-Compiler-Flags USE_ARKIT
bzw. USE_TRUE_DEPTH
aktiviert.
Apple wird Apps, die auf ARKit oder die True Depth Camera API verweisen, ablehnen und diese nicht verwenden.
Wenn Sie Cocoapods verwenden, können Sie -D USE_ARKIT
oder -D USE_TRUE_DEPTH
mit dem folgenden Podfile
Zusatz einschließen oder ihn zu Ihren Xcode-Build-Einstellungen hinzufügen.
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
Stellen Sie vor dem Start sicher, dass Info.plist
Ihrer App Berechtigungsschlüssel hinzugefügt wurden.
< 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 >
Importieren Sie die Bibliothek.
import NextLevel
Richten Sie die Kameravorschau ein.
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 )
}
Konfigurieren Sie die Erfassungssitzung.
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
}
Starten/stoppen Sie die Sitzung bei Bedarf. Diese Methoden erstellen beim Aufruf eine neue „Sitzungs“-Instanz für „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 ( )
// …
}
Videoaufnahme/Pause.
// record
NextLevel . shared . record ( )
// pause
NextLevel . shared . pause ( )
Bearbeiten und Finalisieren der aufgezeichneten Sitzung.
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 {
//
}
} )
//..
}
Videos können auch mit dem NextLevelSessionExporter verarbeitet werden, einer Medientranskodierungsbibliothek in Swift.
„NextLevel“ wurde für die Probenpufferanalyse und benutzerdefinierte Änderung in Echtzeit sowie für eine Vielzahl von Kamerafunktionen entwickelt.
Bitte beachten Sie, dass Änderungen, die an einem Puffer vorgenommen und an NextLevel zurückgegeben werden, möglicherweise Auswirkungen auf die Bildrate haben können.
Aktivieren Sie benutzerdefiniertes Rendering.
NextLevel . shared . isVideoCustomContextRenderingEnabled = true
Optionaler Hook, der das Lesen sampleBuffer
zur Analyse ermöglicht.
extension CameraViewController : NextLevelVideoDelegate {
// ...
// video frame processing
public func nextLevel ( _ nextLevel : NextLevel , willProcessRawVideoSampleBuffer sampleBuffer : CMSampleBuffer ) {
// Use the sampleBuffer parameter in your system for continual analysis
}
Ein weiterer optionaler Hook zum Lesen von Puffern zur Änderung, imageBuffer
. Dies ist auch der empfohlene Ort, um den Puffer für die Aufzeichnung an NextLevel zurückzugeben.
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 überprüft diese Eigenschaft, wenn Puffer in eine Zieldatei geschrieben werden. Dies funktioniert sowohl für Videos als auch für Fotos mit capturePhotoFromVideo
.
nextLevel . videoCustomContextImageBuffer = modifiedFrame
NextLevel war ursprünglich ein Wochenendprojekt, das sich mittlerweile zu einer offenen Community von Kameraplattform-Enthusiasten entwickelt hat. Die Software bietet grundlegende Komponenten für die Verwaltung der Medienaufzeichnung, die Anpassung der Kameraschnittstelle, die Anpassung der Gesteninteraktion und das Bildstreaming unter iOS. Die gleichen Funktionen finden sich auch in Apps wie Snapchat, Instagram und Vine.
Ziel ist es, weiterhin eine gute Grundlage für eine schnelle Integration zu schaffen (um Projekte auf die nächste Ebene zu bringen) – so dass der Fokus auf die Funktionalität gelegt werden kann, die am wichtigsten ist, sei es Echtzeit-Bildverarbeitung, Computer-Vision-Methoden, Augmented Reality oder Computerfotografie .
NextLevel bietet Komponenten zum Aufnehmen von ARKit-Videos und -Fotos. Dies ermöglicht eine Vielzahl neuer Kamerafunktionen und nutzt gleichzeitig die vorhandenen Aufnahmefunktionen und Medienverwaltung von NextLevel.
Wenn Sie versuchen, Frames aus SceneKit für die ARKit-Aufzeichnung zu erfassen, sehen Sie sich das Beispielprojekt an.
Die Dokumente finden Sie hier. Die Dokumentation wird mit jazzy erstellt und auf GitHub-Seiten gehostet.
Wenn Sie dieses Projekt hilfreich fanden, schauen Sie sich die Next Level-Aufkleber an.
NextLevel ist eine Community – Beiträge und Diskussionen sind willkommen!
NextLevel ist unter der MIT-Lizenz verfügbar. Weitere Informationen finden Sie in der LIZENZ-Datei.