Überblick

Aktualisierte

Das Camo SDK von Reincubate bietet die Möglichkeit, audiovisuelle Echtzeitdaten von Ihrer Anwendung an Camo Studio unter macOS und Windows zu senden. Es funktioniert über USB und ist für niedrige Latenz und Leistung optimiert; Verbrauchen Sie so wenig Ressourcen wie möglich in Ihrer App.

Derzeit unterstützt das SDK nur iOS-Anwendungen, die auf einem physischen iOS- oder iPadOS-Gerät (mit Ausnahme von Simulatoren und Mac Catalyst) auf iOS 12 oder höher ausgeführt werden. Das Camo SDK ist standardmäßig nicht mit Objective-C kompatibel. Wenn Ihre App also hauptsächlich Objective-C ist, müssen Sie möglicherweise einen Wrapper erstellen.


API-Referenz

Wenn Sie direkt einsteigen möchten, können Sie die vollständige API-Referenz anzeigen, die jedes Symbol dokumentiert, das vom Camo SDK bereitgestellt wird. Andernfalls führt Sie dieses Dokument durch eine Beispielintegration mit dem SDK.


Installieren des Camo-SDK

When you receive the Camo SDK, you will have received a file called CamoProducerKit.xcframework. This self-contained framework has everything you need with no external dependencies, so installation is easy.

  1. Wählen Sie im Projektnavigator das Projekt Ihrer Anwendung aus.
  2. Wählen Sie das Ziel Ihrer Anwendung aus der Ziel-Seitenleiste des Projekts aus. Wenn keine Seitenleiste angezeigt wird, befindet sie sich möglicherweise in einem Dropdown-Menü oben auf der Seite.
  3. Stellen Sie sicher, dass Sie sich auf der Registerkarte "Allgemein" befinden, und scrollen Sie nach unten zur Überschrift "Frameworks, Bibliotheken und eingebettete Inhalte".
  4. Ziehen Sie die CamoProducerKit.xcframework und legen Sie sie in der Dateiliste unter diesem Header ab.
  5. Stellen Sie sicher, dass das SDK auf "Einbetten & Signieren" eingestellt ist.

Wenn Sie fertig sind, sollten Sie den Rahmen wie abgebildet sehen:

Integration in Ihre App

Steuern des Camo-Dienstes

Das Herzstück von CamoProducerKit ist der CamoController , der Ihrer App eine zentrale Schnittstelle zur Steuerung des Camo SDK zur Verfügung stellt.

In Ihrer App sollten Sie eine Instanz des CamoController initialisieren. Sie können dies beim Start der App tun oder für später speichern. Bis zum expliziten Start mit start() verbraucht der Camo-Controller nur sehr wenige Ressourcen. Es bereitet sich jedoch bei der Initialisierung auf die Audio- und Videocodierung vor.

import CamoProducerKit

class MyVideoManager {
    let controller = CamoController()

    // ...
}

Wenn Sie die Camo-Integration in Ihrer App aktivieren und den Camo-Dienst starten möchten, um Verbindungen zu erleichtern, können Sie start() aufrufen. Sobald Sie damit fertig sind, können Sie es stoppen, indem Sie stop() aufrufen.

controller.start()
// ...
controller.stop()

Dieser Code ist ein Anfang, aber er kann immer noch keine neuen Verbindungen von Camo Studio akzeptieren.

Auf neue Verbindungen reagieren

Bevor Ihre App neue Verbindungen von Camo Studio annehmen kann, müssen Sie CamoControllerDelegate implementieren. Durch Implementieren dieser beiden Delegatmethoden können Sie über Änderungen des Verbindungsstatus benachrichtigt werden und entscheiden, ob Sie eine Verbindung annehmen oder ablehnen.

extension MyVideoManager: CamoControllerDelegate {
    // Upon receiving a connection request, you can decide whether or not to accept it.
    func camoControllerShouldAcceptIncomingConnection(_ controller: CamoController) -> Bool {
        // You could return false if you aren't ready to accept connections, such as during onboarding.
        return true
    }

    // Called whenever the connection state changes, such as if the Camo service starts or stops, or if a new connection is made.
    func camoController(_ controller: CamoController, stateDidChangeTo state: CamoControllerState?) {
        // From here, you can update your UI and other state
        print("New state:", state)
    }
}

Danach sollten Sie in der Lage sein, Ihre App zu öffnen, eine Verbindung zu USB herzustellen und Ihr Gerät in Camo Studio anzuzeigen.

Verbindungsstatus ermitteln

Der CamoController stellt eine CamoControllerState- Eigenschaft bereit, die auch in der Delegate-Methode für Statusänderungen enthalten ist, wie oben gezeigt. Diese Aufzählung enthält nützliche Informationen für Ihre App, z. B. den Namen des verbundenen Computers zur Anzeige in der Benutzeroberfläche.

Hier ist ein Beispiel dafür, wie Sie Ihre Benutzeroberfläche aktualisieren können, um den Verbindungsstatus widerzuspiegeln:

func camoController(_ controller: CamoController, stateDidChangeTo state: CamoControllerState?) {
    let statusText = { () -> String in
        guard case let .running(serviceState) = state else {
            return "Camo service not running"
        }
        switch serviceState {
        case .active(let connection): return "Connected to \(connection.name)"
        case .paused(let connection): return "Paused, but connected to \(connection.name)"
        case .notConnected: return "Camo service running, but no connection"
        }
    }()

    DispatchQueue.main.async {
        self.statusTextLabel.text = statusText
    }
}

Versand audiovisueller Daten

Um den Kunden so viel Flexibilität wie möglich zu ermöglichen, bietet oder steuert das Camo SDK keine Erfassung. Stattdessen sind Sie dafür verantwortlich, den CamoController mit Audio- und Videodaten zu versorgen. Dies kann mit zwei einfachen API-Aufrufen erfolgen:

// upon receiving video from the camera or elsewhere
camoController.enqueueVideo(sampleBuffer: sampleBuffer)

// upon receiving audio from the microphone or elsewhere
camoController.enqueuePCMAudio(data: chunk)

Video senden

Wenn Sie Zugriff auf einen CMSampleBuffer in Ihrer Videopipeline haben, ist es trivial, diese Daten an das Camo SDK zu übergeben.

Aus diesem Grund ist die Einrichtung mit einer einfachen Video-AVCaptureSession extrem einfach. Hier ist ein Beispiel dafür in Aktion.

class CaptureController: AVCaptureVideoDataOutputSampleBufferDelegate {
    // ...

    func startSession() throws {
        guard let camera = AVCaptureDevice.default(for: .video) else { fatalError("No camera found") }

        let input = try AVCaptureDeviceInput(device: camera)
        captureSession.addInput(input)

        let output = AVCaptureVideoDataOutput()
        output.alwaysDiscardsLateVideoFrames = true
        output.setSampleBufferDelegate(self, queue: videoDataOutputQueue)
        captureSession.addOutput(output)

        captureSession.startRunning()
    }

    // ...

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        camoController.enqueueVideo(sampleBuffer: sampleBuffer)
    }
}

Stellen Sie beim Senden von Videoframes Folgendes sicher:

  • Die Framedauer beträgt 30 FPS.
  • Das Pixelformat ist kCVPixelFormatType_32BGRA .

Weitere Details finden Sie in der API-Referenz .

Audio senden

Das Senden von Audio ähnelt dem von Video, erfordert jedoch möglicherweise einige weitere Schritte, je nachdem, wie Ihre Anwendung es empfängt. Eine Beispielimplementierung finden Sie in der Demo-App, die im Camo SDK enthalten ist.

Stellen Sie beim Senden von Audiodaten sicher, dass:

  • Ihre Abtastrate beträgt 48 kHz.
  • Der Audiocodec ist LPCM.
  • Die Anzahl der Kanäle beträgt 2.
  • Die Bittiefe beträgt 32.
  • Die Anzahl der Samples pro Audiopaket hängt von Studio (macOS oder Windows) ab. Sie können sie von CamoController.audioSamplesRequired abrufen .

Weitere Details finden Sie in der API-Referenz .

Wie können wir helfen?

Unser Support-Team hilft Ihnen gerne weiter!

Unsere Bürozeiten sind Montag bis Freitag von 9 bis 17 Uhr GMT. Die Zeit ist aktuell 4:08 vorm. GMT.

Wir bemühen uns, auf alle Mitteilungen innerhalb eines Arbeitstages zu antworten.

Unser großartiges Supportteam

Trete der Community bei

Treten Sie einer Community bei, in der es darum geht, unsere Benutzer zu verbinden! Die Camo-Community wird Foren für Diskussionen und Unterstützung, Videostreams, Spiele, Werbegeschenke und mehr anbieten, während wir wachsen.

Melden Sie sich hier an, um die neuesten Informationen zu unseren nächsten Veranstaltungen zu erhalten.

© 2008 - 2021 Reincubate Ltd. Alle Rechte vorbehalten. Registriert in England und Wales #5189175, VAT GB151788978. Reincubate® und Camo® sind eingetragene Marken. Datenschutz-Bestimmungen & Begriffe. Mit Liebe in London gebaut.