stremio/apps/tizen-tv/TIZEN-CONSTRAINTS.md
Jos Vooges | STH a0311c031e Add Samsung Tizen TV web client.
Focus-friendly VMC shell for Tizen with live TV and playback against the master API.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 19:16:30 +02:00

79 lines
4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Samsung Tizen — bouwconstraints (officiële docs)
Bronnen (raadpleeg bij elke grotere change):
- [Web Engine Specifications](https://developer.samsung.com/smarttv/develop/specifications/web-engine-specifications.html)
- [General Specifications](https://developer.samsung.com/smarttv/develop/specifications/general-specifications.html)
- [AVPlay playback](https://developer.samsung.com/smarttv/develop/guides/multimedia/media-playback/using-avplay.html)
- [W3C/HTML5 API References](https://developer.samsung.com/smarttv/develop/api-references/w3chtml5-api-references.html)
- [Web API References](https://developer.samsung.com/smarttv/develop/api-references/web-api-references.html)
- [TV Device setup / Developer Mode](https://developer.samsung.com/smarttv/develop/getting-started/using-sdk/tv-device.html)
## Doelplatform
We mikken op **Tizen 5.5+ (2020, Chromium ~M69)** als ondergrens, met voorkeurstest op nieuwere sets.
TV-webengine wordt **niet** geüpdatet na aankoopjaar — feature-matrix per jaargang geldt.
| Jaar | Tizen | Chromium (indicatief) |
|------|-------|------------------------|
| 2020 | 5.5 | M69 |
| 2021 | 6.0 | M76 |
| 2022 | 6.5 | M85 |
| 2023 | 7.0 | M94 |
| 2024 | 8.0 | M108 |
## CSS — vermijden tot bewezen op target
Volgens Samsung Web Engine Specs (check matrix vóór gebruik):
| Feature | Let op |
|---------|--------|
| `inset` | **Nee** op oudere engines (o.a. tot ~Tizen 6.x/7.x in matrix als No) → gebruik `top/right/bottom/left` |
| `gap` (flex) | Beperkt / pas later breed → liever margins |
| CSS Grid | Pas later volledig → liever absolute/float/inline-block/flex zonder gap |
| `aspect-ratio`, `dvh`, `:is()`, `:where()`, `:focus-visible` | Modern — niet aannemen |
| `object-fit` | Ja vanaf Tizen 3+ volgens matrix; poster-covers toch liever `background-size: cover` in vast kader + `overflow: hidden` |
Veilig: flexbox (zonder gap), transforms, transitions (basis), `border-radius`, `box-shadow`, absolute layouts, `background-size/position`.
## JavaScript
- ES5-stijl is het veiligst voor breed bereik; ES6 (Promise, arrow, let/const) checken in de Samsung ES6-tabel voor jouw minimumjaar.
- **Geen** aanname van Node/browser globals: altijd `window` of IIFE `(function (global) { ... })(window)`.
- `fetch`: polyfill/XHR achter de hand houden voor oudere engines.
- Geen emoji als enige UI-signaal (font/glyph-support wisselt).
## AVPlay (productie-playback)
Volgens Samsung AVPlay guide:
1. Privilege: `http://developer.samsung.com/privilege/avplay` in `config.xml`
2. Script: `$WEBAPIS/webapis/webapis.js` (lazy laden mag)
3. State machine: `open` → `setDisplayRect` / listener / DRM → `prepare`/`prepareAsync` → `play`
4. `prepare` niet op UI-thread blokkeren → **`prepareAsync`**
5. Object `type="application/avplayer"` alleen tonen tijdens playback (anders fullscreen zwart vlak)
6. Netwerk: `access origin` + internet privilege; HTTPS/certificaten/host bereikbaarheid checken bij `PLAYER_ERROR_CONNECT_FAILED`
7. HTML5 `<video>` als fallback voor progressive streams mag, AVPlay blijft primaire TV-path
## config.xml checklist
- `tizen:profile name="tv-samsung"`
- `required_version` realistisch (2.3/2.4 ok voor breed)
- Privileges: `internet`, `tv.inputdevice`, `avplay`, `network.public`
- `<access origin="*" subdomains="true"/>` of strakkere origins
- `.wgt` = zip met **forward-slash** paden, `config.xml` in root
## Werkwijze (verplicht bij Tizen-wijzigingen)
1. Feature opzoeken in **Web Engine Specifications** voor minimum Tizen-jaar.
2. Bij playback: AVPlay-guide + state table volgen.
3. Op echte TV (Apps2Samsung) valideren — emulator ≠ hardware.
4. Bij twijfel: polyfill of oudere syntax, geen “moderne default”.
## Bekende valkuilen (dit project)
- `inset: 0` → leeg/zwart scherm (containers 0×0)
- AVPlay `<object>` in DOM terwijl UI “hidden” → zwart overlay
- `global.McApp` zonder `global`-parameter → script stopt, `McApp=undefined`
- `PLAYER_ERROR_CONNECT_FAILED` → vaak node/HTTPS/netwerk, niet alleen player-API
- `Failed to register session on node` → master↔node websocket ACK, niet Tizen-UI