Focus-friendly VMC shell for Tizen with live TV and playback against the master API. Co-authored-by: Cursor <cursoragent@cursor.com>
79 lines
4 KiB
Markdown
79 lines
4 KiB
Markdown
# 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
|