Zum Hauptinhalt springen
geprüft

Dieser Artikel ist Teil der Friends4-Enzyklopädie und wird nach Wiki-Prinzipien gepflegt, geprüft und versioniert.

Friends4 Native Streaming - iOS Setup Guide

AppStoreUpload: fehlende LiveKitdSYMs Die Friends4App verwendet aktuell kein LiveKit (im SwiftCode gibt es weder import LiveKit noch import LiveKitWebRTC). Die beiden beim Upload genannten Frameworks LiveKitWebRTC.framework und RustLiveKitUniFFI.framework stammen daher von einer nicht mehr benoetigten SwiftPackageAbhaengigkeit. Ihre vorkompilierten Binaries werden ohne passende dSYMs ausgeliefert; Xcode kann diese dSYMs nicht nachtraeglich aus den Frameworks erzeugen. Die nachhaltige Loesung ist

Kategorie: Friends4 DokumentationAutor: Friends4 Wiki-RedaktionVersion: 1Letzte Änderung:

Friends4 Native Streaming - iOS Setup Guide

App-Store-Upload: fehlende LiveKit-dSYMs

Die Friends4-App verwendet aktuell kein LiveKit (im Swift-Code gibt es weder

`import LiveKit` noch `import LiveKitWebRTC`). Die beiden beim Upload genannten

Frameworks `LiveKitWebRTC.framework` und `RustLiveKitUniFFI.framework` stammen

daher von einer nicht mehr benoetigten Swift-Package-Abhaengigkeit. Ihre

vorkompilierten Binaries werden ohne passende dSYMs ausgeliefert; Xcode kann

diese dSYMs **nicht** nachtraeglich aus den Frameworks erzeugen.

Die nachhaltige Loesung ist, LiveKit aus dem lokal gepflegten Xcode-Projekt zu

entfernen:

1. Das App-Target **Friends4 -> General -> Frameworks, Libraries, and Embedded

Content** oeffnen und das Produkt `LiveKit` entfernen.

2. Unter **Project -> Package Dependencies** das Paket

`livekit/client-sdk-swift` entfernen. Falls weitere Targets existieren, dort

vorher ebenfalls die unbenutzte Produktverknuepfung entfernen.

3. **File -> Packages -> Reset Package Caches**, danach **Product -> Clean Build

Folder** ausfuehren und ein neues Archive erstellen. Ein bereits erzeugtes

Archive wird dadurch nicht repariert.

4. Vor dem Upload pruefen, dass das neue Archive keines der beiden Frameworks

mehr enthaelt:


   friends4-ios-app/scripts/verify_archive_dsyms.sh \
     /pfad/zu/Friends4.xcarchive

LiveKit nur zu aktualisieren oder `DEBUG_INFORMATION_FORMAT` am App-Target zu

aendern behebt die Warnung nicht: Diese Einstellung erzeugt lediglich dSYMs fuer

selbst kompilierten Code, nicht fuer bereits vorkompilierte Drittanbieter-

Frameworks. Sollte LiveKit spaeter tatsaechlich wieder verwendet werden, muss

der Anbieter XCFramework und dSYM mit identischen UUIDs bereitstellen (oder das

Framework muss reproduzierbar aus dem Quellcode gebaut werden).

LiveKit und Xcode 27

Xcode 27 markiert `RPBroadcastSampleHandler` als veraltet. LiveKit-Versionen vor

**2.15.2** verwenden den Typ in `LKObjCHelpers.h` ohne lokale

Diagnose-Unterdrueckung und erzeugen deshalb beim Bauen die Warnung

`'RPBroadcastSampleHandler' is deprecated`.

Das Xcode-Projekt wird lokal gepflegt und ist nicht Teil dieses Repositories.

Deshalb muss die Paketversion dort einmal aktualisiert werden:

1. Xcode -> **File -> Packages -> Update to Latest Package Versions**.

2. Unter **Package Dependencies -> LiveKit** als Mindestversion `2.15.2`

einstellen (beispielsweise **Up to Next Major Version** ab `2.15.2`).

3. **File -> Packages -> Reset Package Caches** ausfuehren und anschliessend

**Product -> Clean Build Folder**.

4. Die lokal erzeugte `Package.resolved` pruefen:


   friends4-ios-app/scripts/verify_livekit_version.sh \
     /pfad/zum/Friends4.xcworkspace/xcshareddata/swiftpm/Package.resolved

LiveKit 2.15.2 kapselt die betroffene Objective-C-Deklaration mit

`-Wdeprecated-declarations`. Die Warnung verschwindet damit, ohne Warnungen fuer

den Friends4-eigenen Code global abzuschalten. Das ReplayKit-basierte

Bildschirmteilen bleibt fuer unterstuetzte iOS-Versionen weiterhin verfuegbar.

RTMP Live Broadcasting (HaishinKit) — aktiv ab Friends4Studio

Friends4Studio (`VideoworldView.swift`) sendet jetzt echtes Live-Video per RTMP

an den Media-Server `live.friends4.de`. Der Sende-Code ist mit

`#if canImport(HaishinKit)` gekapselt: **Ohne das HaishinKit-Paket bleibt der

Build grün** und das Studio zeigt nur die lokale Vorschau. Sobald das Paket

hinzugefügt ist, sendet es automatisch.

Einmalige Einrichtung in Xcode

1. **HaishinKit als Swift Package hinzufügen** (Version **2.x**, getestet mit 2.2.5)

- Xcode → *File → Add Package Dependencies…*

- URL: `https://github.com/shogo4405/HaishinKit.swift`

- **Dependency Rule:** *Up to Next Major* ab `2.0.0`.

- **Wichtig:** Beim Hinzufügen **zwei** Library-Produkte zum Target

**Friends4** linken:

- `HaishinKit`

- `RTMPHaishinKit` ← enthält `RTMPConnection` / `RTMPStream`

Der Sende-Code ist mit `#if canImport(RTMPHaishinKit)` gekapselt und

nutzt die 2.x-API (async `connect`/`publish`/`close`, `RTMPStream.append(_:)`).

Wird nur `HaishinKit` (ohne `RTMPHaishinKit`) gelinkt, bleibt das Senden

deaktiviert und nur die lokale Vorschau läuft.

2. **Info.plist prüfen** (für das Senden zwingend nötig):

- `NSCameraUsageDescription` — Begründung für Kamerazugriff

- `NSMicrophoneUsageDescription` — Begründung für Mikrofonzugriff

(Beide existieren bereits, da die Kameravorschau funktioniert — nur

sicherstellen, dass sie gesetzt sind.)

3. **App Transport Security:** Ingest läuft über `rtmps://` und HLS über

`https://` — keine ATS-Ausnahme nötig. Nur falls der Server auf

unverschlüsseltes `rtmp://` umgestellt wird, wäre eine ATS-Ausnahme

für `live.friends4.de` erforderlich.

Voraussetzung serverseitig

MediaMTX muss unter `live.friends4.de` laufen und

  • RTMP(S)-Ingest auf der `/live`-App akzeptieren,
  • HLS unter `https://live.friends4.de/live/<streamKey>/index.m3u8` ausliefern.

Die Wiedergabe-URL für Zuschauer wird im Backend

(`src/models/videoworldModel.js`) gebildet; die Defaults zeigen jetzt auf

`live.friends4.de` (per `VIDEOWORLD_RTMPS_INGEST_BASE` /

`VIDEOWORLD_HLS_PLAYBACK_BASE` überschreibbar).

Test

1. Auf physischem iPhone (Simulator hat keine Kamera) live gehen.

2. Im Live-Header erscheint „Live – Video wird gesendet", sobald RTMP steht.

3. `curl https://live.friends4.de/live/<streamKey>/index.m3u8` → enthält

`#EXTM3U` + Segmente.

4. Auf einem zweiten Gerät den Stream als Zuschauer öffnen — das Video sollte

automatisch starten (Probe-Mechanismus aus dem Viewer).

---

Prerequisites (Legacy / veraltet — nicht mehr verwendet)

1. CocoaPods Dependencies

Add to your `Podfile`:


pod 'Socket.IO-Client-Swift', '~> 16.0'

Then run:


pod install
pod update

2. Framework Requirements

Ensure these are linked in Build Phases:

  • AVFoundation
  • AVKit
  • Combine
  • UIKit

3. Build Settings

Set `Minimum Deployments Target` to **iOS 14.0 or higher**

Components Overview

StreamSocketClient.swift

  • Real-time Socket.io communication
  • Requires: Socket.IO-Client-Swift pod
  • Handles: Video chunks, chat, gifts, battles, moderation

StreamVideoBufferManager.swift

  • Buffers video chunks
  • Generates HLS playlist locally
  • Uses AVPlayer for playback
  • No external dependencies

StreamBroadcaster.swift

  • Camera capture with AVCaptureSession
  • Hardware H.264 encoding with VideoToolbox
  • Real-time bitrate control
  • CPU monitoring

UI Components

VideoworldLiveViewerView.swift

  • Video player with HLS support
  • Real-time chat
  • Gift picker
  • Moderation tools

VideoworldLiveCreatorView.swift

  • Pre-broadcast setup
  • Camera preview
  • Live stats display
  • Settings panel

Integration Steps

1. **Install Pods**


   cd friends4-ios-app
   pod install

2. **Update Podfile Location**

- Make sure Podfile is in: `friends4-ios-app/Podfile`

3. **Add Components to Xcode**

- File → Add Files to "Friends4"

- Select the `.swift` files from streaming folder

- Target: Friends4 app

4. **Update VideoworldView**

- Add "Go Live" button to main view

- Present `VideoworldLiveCreatorView` when tapped

- Present `VideoworldLiveViewerView` when user taps stream

5. **Compile & Test**


   pod install
   xcodebuild -workspace Friends4.xcworkspace -scheme Friends4 -configuration Debug

Testing

Simulator Testing

  • Use iPhone 14 Pro simulator (minimum iOS 14.0)
  • Test camera preview (may not show video in simulator)
  • Test Socket.io connection (requires local backend running)

Device Testing

  • Test on physical iPhone with iOS 14+
  • Requires camera permissions (Info.plist)
  • Test with actual backend server

Known Limitations

  • HLS playlist server runs on localhost:8889
  • Camera preview may not work in simulator
  • WebSocket requires HTTPS in production (update Socket.io config)

Troubleshooting

"Cannot find module 'Socket.IO-Client-Swift'"

→ Run `pod install` and rebuild

"Cannot find type 'AVCaptureSession'"

→ Add AVFoundation to Build Phases

"Unrecognized selector"

→ Ensure iOS deployment target is 14.0+

Next Steps

  • [ ] Install CocoaPods
  • [ ] Add Socket.IO-Client-Swift pod
  • [ ] Integrate components into VideoworldView
  • [ ] Test camera capture on device
  • [ ] Test Socket.io with backend
  • [ ] Polish UI & animations

Hinweise

Nutze diesen Artikel als Orientierung. Bei Regeln gilt die aktuell freigegebene Version und bei Unsicherheit die Moderation.

Warnungen

Melde veraltete, missverständliche oder sicherheitsrelevante Informationen direkt über das Formular.

Diskussion

Die Diskussionsseite ist für konkrete Verbesserungsvorschläge gedacht: fehlende Abschnitte, unklare Formulierungen, Quellenhinweise oder Korrekturen. Sie ist keine Chatfunktion.

Bilder und Downloads

Optionale Medien, Grafiken oder Downloads können über strukturierte Daten und zukünftige Dateifreigaben ergänzt werden.