Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Erste Schritte mit dem IVS-Broadcast-SDK für iOS | Streaming mit niedriger Latenz

Fokusmodus
Erste Schritte mit dem IVS-Broadcast-SDK für iOS | Streaming mit niedriger Latenz - Amazon IVS

Dieses Dokument führt Sie durch die Schritte zum Einstieg in das iOS-Broadcast-SDK für Amazon-IVS-Streaming mit niedriger Latenz.

Bibliothek installieren

Wir empfehlen Ihnen, das Broadcast-SDK über CocoaPods zu integrieren. (Alternativ können Sie die Framework manuell zu Ihrem Projekt hinzufügen.)

Empfohlen: Integrieren Sie das Broadcast-SDK (CocoaPods)

Veröffentlichungen erfolgen über CocoaPods unter dem Namen AmazonIVSBroadcast. Fügen Sie diese Abhängigkeit zu Ihrem Podfile hinzu:

pod 'AmazonIVSBroadcast'

Führen Sie pod install aus und das SDK wird in Ihrem .xcworkspace verfügbar sein.

Manuelles Installieren der Framework

  1. Laden Sie die neueste Version von https://broadcast.live-video.net/1.28.1/AmazonIVSBroadcast.xcframework.zip herunter.

  2. Extrahieren Sie den Inhalt des Archivs. AmazonIVSBroadcast.xcframework enthält das SDK für Gerät und Simulator.

  3. Betten Sie AmazonIVSBroadcast.xcframework ein, indem Sie es in den Abschnitt Frameworks, Bibliotheken und eingebettete Inhalte auf der Registerkarte Allgemein für Ihr Anwendungsziel ziehen.

    Der Abschnitt Rahmenbedingungen, Bibliotheken und eingebettete Inhalte auf der Registerkarte Allgemein für Ihr Anwendungsziel.

Implementieren von IVSBroadcastSession.Delegate

Implementieren von IVSBroadcastSession.Delegate, mit dem Sie Statusaktualisierungen und Geräteänderungsbenachrichtigungen erhalten können:

extension ViewController : IVSBroadcastSession.Delegate { func broadcastSession(_ session: IVSBroadcastSession, didChange state: IVSBroadcastSession.State) { print("IVSBroadcastSession did change state \(state)") } func broadcastSession(_ session: IVSBroadcastSession, didEmitError error: Error) { print("IVSBroadcastSession did emit error \(error)") } }

Berechtigungen anfordern

Ihre App muss die Berechtigung für den Zugriff auf die Kamera und das Mikrofon des Benutzers anfordern. (Dies ist nicht spezifisch für Amazon IVS; es ist für jede Anwendung erforderlich, die Zugriff auf Kameras und Mikrofone benötigt.)

Hier prüfen wir, ob der Benutzer bereits Berechtigungen erteilt hat und wenn nicht, fragen wir nach ihnen:

switch AVCaptureDevice.authorizationStatus(for: .video) { case .authorized: // permission already granted. case .notDetermined: AVCaptureDevice.requestAccess(for: .video) { granted in // permission granted based on granted bool. } case .denied, .restricted: // permission denied. @unknown default: // permissions unknown. }

Sie müssen dies sowohl für .video- als auch für .audio-Medientypen tun, wenn Sie auf Kameras bzw. Mikrofone zugreifen möchten.

Sie müssen außerdem Einträge für NSCameraUsageDescription und NSMicrophoneUsageDescription zu Ihrem Info.plist hinzufügen. Andernfalls stürzt Ihre App ab, wenn Sie versuchen, Berechtigungen anzufordern.

Deaktivieren des Idle-Timers der Anwendung

Dies ist zwar optional, wird aber empfohlen. Es verhindert, dass Ihr Gerät in den Ruhezustand versetzt, während Sie das Broadcast-SDK verwenden, was die Übertragung unterbrechen würde.

override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIApplication.shared.isIdleTimerDisabled = true } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) UIApplication.shared.isIdleTimerDisabled = false }

(Optional) Einrichten von AVAudioSession

Standardmäßig richtet das Broadcast-SDK die AVAudioSession Ihrer Anwendung ein. Wenn Sie dies selbst verwalten möchten, setzen Sie IVSBroadcastSession.applicationAudioSessionStrategy auf noAction. Ohne Kontrolle über das AVAudioSession kann das Broadcast-SDK Mikrofone nicht intern verwalten. Zur Verwendung von Mikrofonen mit der Option noAction können Sie eine IVSCustomAudioSource erstellen und Ihre eigenen Proben über ein AVCaptureSession, AVAudioEngine oder ein anderes Tool einspielen, das PCM-Hörbeispiele bereitstellt.

Wenn Sie Ihre AVAudioSession manuell einrichten, müssen Sie mindestens die Kategorie als .record oder .playbackAndRecord und auf active festlegen. Wenn Sie Audio von Bluetooth-Geräten aufzeichnen möchten, müssen Sie die .allowBluetooth-Option auch angeben:

do { try AVAudioSession.sharedInstance().setCategory(.record, options: .allowBluetooth) try AVAudioSession.sharedInstance().setActive(true) } catch { print("Error configuring AVAudioSession") }

Wir empfehlen, dass Sie das SDK dies für Sie handhaben lassen. Wenn Sie andernfalls zwischen verschiedenen Audiogeräten wählen möchten, müssen Sie die Ports manuell verwalten.

Broadcast-Sitzung erstellen

Die Broadcast-Schnittstelle ist IVSBroadcastSession. Initialisieren Sie es wie unten gezeigt:

let broadcastSession = try IVSBroadcastSession( configuration: IVSPresets.configurations().standardLandscape(), descriptors: IVSPresets.devices().frontCamera(), delegate: self)

Lesen Sie auch den Abschnitt Erstellen der Broadcast-Sitzung (Advanced-Version)

Legen Sie die IVSImagePreviewView für die Vorschau fest

Wenn Sie eine Vorschau für ein aktives Kameragerät anzeigen möchten, fügen Sie die Vorschau IVSImagePreviewView für das Gerät zu Ihrer View-Hierarchie hinzu:

// If the session was just created, execute the following // code in the callback of IVSBroadcastSession.awaitDeviceChanges // to ensure all devices have been attached. if let devicePreview = try broadcastSession.listAttachedDevices() .compactMap({ $0 as? IVSImageDevice }) .first? .previewView() { previewView.addSubview(devicePreview) }

Starten eines Broadcastings

Dem Hostnamen, den Sie im Antwortfeld ingestEndpoint des Vorgangs GetChannel erhalten, muss rtmps:// vorangestellt und /app angehängt werden. Die vollständige URL sollte sich in folgendem Format sein: rtmps://{{ ingestEndpoint }}/app

try broadcastSession.start(with: IVS_RTMPS_URL, streamKey: IVS_STREAMKEY)

Das iOS-Broadcast-SDK unterstützt nur RTMPS-Ingest (kein unsicheres RTMP-Ingest).

Anhalten eines Broadcastings

broadcastSession.stop()

Lebenszyklus-Ereignisse verwalten

Audiounterbrechungen

Es gibt mehrere Szenarien, in denen das Broadcast-SDK keinen exklusiven Zugriff auf Audio-Eingabehardware hat. Einige Beispielszenarien, die Sie verarbeiten müssen, sind:

  • Benutzer erhält einen Anruf oder FaceTime-Anruf

  • Benutzer aktiviert Siri

Apple macht es einfach, auf diese Ereignisse zu reagieren, indem es AVAudioSession.interruptionNotification abonniert:

NotificationCenter.default.addObserver( self, selector: #selector(audioSessionInterrupted(_:)), name: AVAudioSession.interruptionNotification, object: nil)

Dann können Sie das Ereignis mit etwas wie diesem behandeln:

// This assumes you have a variable `isRunning` which tracks if the broadcast is currently live, and another variable `wasRunningBeforeInterruption` which tracks whether the broadcast was active before this interruption to determine if it should resume after the interruption has ended. @objc private func audioSessionInterrupted(_ notification: Notification) { guard let userInfo = notification.userInfo, let typeValue = userInfo[AVAudioSessionInterruptionTypeKey] as? UInt, let type = AVAudioSession.InterruptionType(rawValue: typeValue) else { return } switch type { case .began: wasRunningBeforeInterruption = isRunning if isRunning { broadcastSession.stop() } case .ended: defer { wasRunningBeforeInterruption = false } guard let optionsValue = userInfo[AVAudioSessionInterruptionOptionKey] as? UInt else { return } let options = AVAudioSession.InterruptionOptions(rawValue: optionsValue) if options.contains(.shouldResume) && wasRunningBeforeInterruption { try broadcastSession.start( with: IVS_RTMPS_URL, streamKey: IVS_STREAMKEY) } @unknown default: break } }

App geht in den Hintergrund

Standardanwendungen auf iOS dürfen keine Kameras im Hintergrund verwenden. Es gibt auch Einschränkungen bei der Videocodierung im Hintergrund: Da Hardware-Encoder begrenzt sind, haben nur Vordergrundanwendungen Zugriff. Aus diesem Grund beendet das Broadcast-SDK automatisch seine Sitzung und setzt seine isReady-Eigenschaft auf false. Wenn Ihre Anwendung erneut in den Vordergrund tritt, fügt das Broadcast-SDK alle Geräte wieder an ihre ursprünglichen IVSMixerSlotConfiguration-Einträge hinzu.

Das Broadcast-SDK tut dies, indem es auf UIApplication.didEnterBackgroundNotification und UIApplication.willEnterForegroundNotification antwortet.

Wenn Sie benutzerdefinierte Image-Quellen bereitstellen, sollten Sie bereit sein, diese Benachrichtigungen zu behandeln. Möglicherweise müssen Sie zusätzliche Schritte unternehmen, um sie zu schliessen, bevor der Stream beendet wird.

Für eine Problemumgehung, die Streaming ermöglicht, während sich Ihre Anwendung im Hintergrund befindet, siehe Hintergrundvideo verwenden.

Medienservices verloren

In sehr seltenen Fällen stürzt das gesamte Medien-Subsystem auf einem iOS-Gerät ab. In diesem Szenario können wir nicht mehr broadcasten. Es liegt an Ihrer Anwendung, auf diese Benachrichtigungen angemessen zu reagieren. Abonnieren Sie mindestens diese Benachrichtigungen:

  • MediaServiceWerelostNotification – Reagieren Sie, indem Sie Ihr Broadcasting stoppen und Ihre IVSBroadcastSession vollständig freigeben. Alle internen Komponenten, die von der Broadcast-Sitzung verwendet werden, werden ungültig.

  • MediaServiceServiceServiceSetNotification – Reagieren Sie, indem Sie Ihre Benutzer darüber informieren, dass sie erneut übertragen können. Abhängig vom Anwendungsfall können Sie möglicherweise an dieser Stelle automatisch wieder senden.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.