59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
# VMC iOS (SwiftUI + VLCKit 4)
|
|
|
|
Native iPhone/iPad app voor Vonas Media Cluster.
|
|
|
|
## Op de Mac
|
|
|
|
```bash
|
|
cd ~/Code/mediacluster/apps/ios
|
|
open VMC.xcodeproj
|
|
```
|
|
|
|
Eerste keer (of na schone sync) **VLCKit 4** zetten (PiP):
|
|
|
|
```bash
|
|
bash scripts/fetch-vlckit.sh # download ~500MB VLCKit 4.0.0a19
|
|
bash scripts/link-vlckit.sh # → Vendor/VLCKit.xcframework
|
|
```
|
|
|
|
> **Let op:** MobileVLCKit 3.x heeft **geen** Apple Picture in Picture. VMC iOS 0.5.3+ vereist VLCKit 4.
|
|
|
|
In Xcode:
|
|
1. **Signing & Capabilities** → Team + Background Modes → *Audio, AirPlay, and Picture in Picture*
|
|
2. iPhone selecteren → ▶ Run
|
|
|
|
## Picture in Picture
|
|
|
|
- Systeem-PiP via VLCKit (`VLCPictureInPictureDrawable`)
|
|
- PiP-knop in de speler + automatisch bij app naar achtergrond tijdens afspelen
|
|
- Encrypted DASH via lokale stream-proxy → VLC
|
|
|
|
---
|
|
|
|
## Apple TV (tvOS)
|
|
|
|
Apart project (zelfde API, TV-UI met focus/remote):
|
|
|
|
```bash
|
|
cd ~/Code/mediacluster/apps/ios
|
|
bash scripts/fetch-tvvlckit.sh
|
|
bash scripts/link-tvvlckit.sh
|
|
open VMCTV.xcodeproj
|
|
```
|
|
|
|
- Bundle ID: `nl.vonas.mediacluster.tvos`
|
|
- Team: `X25NYX3K49`
|
|
- Playback: **TVVLCKit** (VLC 3.x engine) — PiP is iPhone/iPad-only
|
|
- Details: `VMCTV/README.md`
|
|
|
|
## Let op
|
|
|
|
`Vendor/VLCKit.xcframework` en `Vendor/TVVLCKit.xcframework` staan niet in git (te groot). Altijd op de Mac via de scripts installeren.
|
|
|
|
## Live TV / Events / streams (0.5.2+)
|
|
|
|
- `streamId` is een **String** (`"123"` of `"custom:uuid"`); path-segmenten worden URL-geëncodeerd (inclusief `:`).
|
|
- Play-response parseert `format`, optionele `drm`-payload en `watchSessionId` voor live-lijsten én events.
|
|
- Heartbeat: `POST /api/v1/client/watching/heartbeat` ~elke 25s bij custom live + events.
|
|
- Encrypted DASH: lokale in-app proxy voor ondersteunde providers; Xtream HLS/TS speelt direct.
|
|
- Events-tab verschijnt als `/me` → `events.enabled` true is.
|