NextLevel
é um sistema de câmera Swift projetado para fácil integração, captura de mídia personalizada e streaming de imagens no iOS. A integração pode opcionalmente aproveitar AVFoundation
ou ARKit
.
Características | |
---|---|
? | Gravação e edição de videoclipe “semelhante ao Vine” |
? | captura de fotos (raw, jpeg e quadro de vídeo) |
? | interação gestual e interface personalizáveis |
? | Integração ARKit (beta) |
? | suporte duplo, grande angular, telefoto e profundidade real |
? | taxa de quadros ajustável em hardware compatível (ou seja, captura em câmera rápida/lenta) |
? | suporte para captura de dados em profundidade e suporte fosco para efeitos de retrato |
? | zoom de vídeo |
⚖ | equilíbrio de branco, foco e ajuste de exposição |
? | suporte para flash e tocha |
? | suporte de espelhamento |
☀ | aumento de pouca luz |
? | foco automático suave |
⚙ | configurações configuráveis de codificação e compactação |
? | API simples de captura e edição de mídia |
? | API extensível para processamento de imagens e CV |
? | criador de GIF animado |
? | reconhecimento facial; reconhecimento de códigos QR e de barras |
? | Rápido 5 |
Precisa de uma versão diferente do Swift?
5.0
- Direcione seu Podfile para a versão ou master mais recente4.2
- Direcione seu Podfile para o branch 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 )
]
)
Como alternativa, solte os arquivos de origem NextLevel ou o arquivo de projeto em seu projeto Xcode.
Os recursos do software ARKit e True Depth Camera são habilitados com a inclusão do sinalizador do compilador Swift USE_ARKIT
e USE_TRUE_DEPTH
respectivamente.
A Apple rejeitará aplicativos vinculados ao ARKit ou à API True Depth Camera e não os usará.
Se você usa Cocoapods, você pode incluir -D USE_ARKIT
ou -D USE_TRUE_DEPTH
com a seguinte adição Podfile
ou adicionando-o às configurações de compilação do 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 começar, certifique-se de que as chaves de permissão foram adicionadas ao Info.plist
do seu aplicativo.
< 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 >
Importe a biblioteca.
import NextLevel
Configure a visualização da câmera.
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 )
}
Configure a sessão 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/interromper a sessão quando apropriado. Esses métodos criam uma nova instância de "sessão" para 'NextLevel.shared.session' quando chamados.
override func viewWillAppear ( _ animated : Bool ) {
super . viewWillAppear ( animated )
NextLevel . shared . start ( )
// …
}
override func viewWillDisappear ( _ animated : Bool ) {
super . viewWillDisappear ( animated )
NextLevel . shared . stop ( )
// …
}
Gravação/pausa de vídeo.
// record
NextLevel . shared . record ( )
// pause
NextLevel . shared . pause ( )
Editando e finalizando a sessão gravada.
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 {
//
}
} )
//..
}
Os vídeos também podem ser processados usando NextLevelSessionExporter, uma biblioteca de transcodificação de mídia em Swift.
'NextLevel' foi projetado para análise de buffer de amostra e modificação personalizada em tempo real, juntamente com um rico conjunto de recursos de câmera.
Apenas para observar, as modificações realizadas em um buffer e fornecidas de volta ao NextLevel podem afetar potencialmente a taxa de quadros.
Ative a renderização personalizada.
NextLevel . shared . isVideoCustomContextRenderingEnabled = true
Gancho opcional que permite a leitura de sampleBuffer
para análise.
extension CameraViewController : NextLevelVideoDelegate {
// ...
// video frame processing
public func nextLevel ( _ nextLevel : NextLevel , willProcessRawVideoSampleBuffer sampleBuffer : CMSampleBuffer ) {
// Use the sampleBuffer parameter in your system for continual analysis
}
Outro gancho opcional para leitura de buffers para modificação, imageBuffer
. Este também é o local recomendado para fornecer o buffer de volta ao NextLevel para gravação.
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 verificará esta propriedade ao gravar buffers em um arquivo de destino. Isso funciona tanto para vídeos quanto para fotos com capturePhotoFromVideo
.
nextLevel . videoCustomContextImageBuffer = modifiedFrame
NextLevel foi inicialmente um projeto de fim de semana que agora se tornou uma comunidade aberta de entusiastas de plataformas de câmeras. O software fornece componentes básicos para gerenciamento de gravação de mídia, personalização da interface da câmera, personalização da interação gestual e streaming de imagens no iOS. Os mesmos recursos também podem ser encontrados em aplicativos como Snapchat, Instagram e Vine.
O objetivo é continuar a fornecer uma boa base para uma integração rápida (permitindo que os projetos sejam levados para o próximo nível) – permitindo que o foco seja colocado na funcionalidade que mais importa, seja processamento de imagens em tempo real, métodos de visão computacional, realidade aumentada ou fotografia computacional. .
NextLevel fornece componentes para captura de vídeo e foto ARKit. Isso permite uma variedade de novos recursos de câmera, ao mesmo tempo em que aproveita os recursos de gravação e gerenciamento de mídia existentes do NextLevel.
Se você estiver tentando capturar quadros do SceneKit para gravação ARKit, verifique o projeto de exemplos.
Você pode encontrar os documentos aqui. A documentação é gerada com jazz e hospedada nas páginas do GitHub.
Se você achou este projeto útil, dê uma olhada nos adesivos Next Level.
NextLevel é uma comunidade – contribuições e discussões são bem-vindas!
NextLevel está disponível sob a licença MIT, consulte o arquivo LICENSE para obter mais informações.