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

4 KiB
Raw Permalink Blame History

Samsung Tizen — bouwconstraints (officiële docs)

Bronnen (raadpleeg bij elke grotere change):

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