Focus-friendly VMC shell for Tizen with live TV and playback against the master API. Co-authored-by: Cursor <cursoragent@cursor.com>
4 KiB
4 KiB
Samsung Tizen — bouwconstraints (officiële docs)
Bronnen (raadpleeg bij elke grotere change):
- Web Engine Specifications
- General Specifications
- AVPlay playback
- W3C/HTML5 API References
- Web API References
- TV Device setup / Developer Mode
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
windowof 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:
- Privilege:
http://developer.samsung.com/privilege/avplayinconfig.xml - Script:
$WEBAPIS/webapis/webapis.js(lazy laden mag) - State machine:
open→setDisplayRect/ listener / DRM →prepare/prepareAsync→play prepareniet op UI-thread blokkeren →prepareAsync- Object
type="application/avplayer"alleen tonen tijdens playback (anders fullscreen zwart vlak) - Netwerk:
access origin+ internet privilege; HTTPS/certificaten/host bereikbaarheid checken bijPLAYER_ERROR_CONNECT_FAILED - HTML5
<video>als fallback voor progressive streams mag, AVPlay blijft primaire TV-path
config.xml checklist
tizen:profile name="tv-samsung"required_versionrealistisch (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.xmlin root
Werkwijze (verplicht bij Tizen-wijzigingen)
- Feature opzoeken in Web Engine Specifications voor minimum Tizen-jaar.
- Bij playback: AVPlay-guide + state table volgen.
- Op echte TV (Apps2Samsung) valideren — emulator ≠ hardware.
- 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.McAppzonderglobal-parameter → script stopt,McApp=undefinedPLAYER_ERROR_CONNECT_FAILED→ vaak node/HTTPS/netwerk, niet alleen player-APIFailed to register session on node→ master↔node websocket ACK, niet Tizen-UI