Controleer zelf hoe Jet-Stream scoort op AVG en soevereiniteit
Laatst bijgewerkt: 12 september 2026
Als een partij beweert AVG-compliant te zijn en op vrijwel alle soevereiniteitsdoelen SEAL-niveau 4 te halen, wilt u daar waarschijnlijk bewijs van zien. Zo kunt u de soevereiniteit van Jet-Stream zelf controleren.
Deze test-URL laadt de Jet-Stream Privacy Player, maakt verbinding met onze load balancers en haalt de stream, de posterafbeelding en de ondertitels op bij onze eigen diensten. De stream wordt vervolgens geleverd via de directe playout van Jet-Stream, zonder verbinding met welke externe dienst dan ook. Op basis van ingebouwde automatische mechanismen voor geografie, populariteit, kosten en prestaties kunnen de load balancers besluiten verzoeken door te sturen naar een soevereine Europese CDN-partner. Geen cookies. Geen trackers. Geen Europese persoonsgegevens die buiten ons platform of buiten Europa terechtkomen. Een kijker in de VS kan worden bediend vanaf een regionale edge in de VS die eigendom is van hetzelfde Europese CDN; die gegevens komen de EU nooit binnen, dus er is ook geen sprake van doorgifte naar buiten de EU.
We hebben acht checks uitgevoerd op de Jet-Stream Privacy Player, onze backend en onze playout. U vindt hieronder de ruwe output, inclusief de punten waarop we nog niet zijn waar we willen zijn. Elk commando hieronder kunt u zelf in een terminal uitvoeren om de test te herhalen en de resultaten met eigen ogen te zien. U heeft daarvoor niet meer nodig dan dig, whois, curl en de ontwikkelaarstools van een browser.
Wat we hebben gecontroleerd en wat eruit kwam

Wat we hebben getest, laag voor laag
De acht checks zijn uitgevoerd op elke laag waar het verzoek van een kijker doorheen gaat, dus niet alleen op de player. Per laag was de vraag steeds dezelfde: welke rechtspersoon is dit, onder welk recht valt die, en wat verstuurt en bewaart deze laag?

Het enige voorbehoud zit buiten deze lagen, namelijk in de standaard embed: twee Google-SDK's voor Chromecast en advertenties, die worden geladen tenzij een klant ze uitschakelt. Daar komen we hieronder op terug.
De player
Laad de Privacy Player, open het tabblad Netwerk en speel een video helemaal af. Met externe diensten uitgeschakeld (no-ext=all) bevat de trace 48 verzoeken naar zes hostnamen, allemaal onder jetstre.am: de player zelf, de load balancer, de origin en het CDN. Geen Google, geen analyticsleverancier, geen lettertypes van een Amerikaans CDN, geen pixel.
● Open daarna het tabblad Opslag. Cookies: geen. Local storage: geen. Session storage: geen. Er wordt niets op het apparaat opgeslagen, en omdat er geen analyticsscript is, wordt er ook niets van uitgelezen.
Dat zegt meer dan het woord ‘cookieloos’: de ePrivacy-regel gaat namelijk over het opslaan van gegevens op het apparaat of het uitlezen ervan. Een player die uw schermresolutie uitleest en naar een statistiekendpoint stuurt, is dus niet toestemmingsvrij alleen omdat hij geen cookie plaatst. Onze player leest niets uit en verstuurt niets.
De parameter events=1, die u in onze embedcodes kunt tegenkomen, verandert daar niets aan. Daarmee kan de player afspeelgebeurtenissen doorgeven aan de pagina waarin hij is ingebed, zodat een klant bijvoorbeeld dia's kan synchroniseren met een presentatie, een transcript kan laten meelopen of de player lokaal in de browser kan aansturen. Die gebeurtenissen gaan naar de pagina, niet naar ons.
De backend
Wie antwoordt er als uw browser onze hostnamen opzoekt?
$ dig player.jetstre.am
player.jetstre.am. 300 IN A 82.150.152.XXX
$ whois 82.150.152.XXX
inetnum: 82.150.152.XXX – 82.150.152.XXX
netname: JETSTREAM-NL
org-name: Jet-Stream BV
address: Groningen, The Netherlands
created: 2004-04-07
● De player en de origin antwoorden vanuit adresruimte die sinds 2004 op naam van Jet-Stream staat. Die wordt gerouteerd via LeaseWeb Netherlands B.V., een Nederlands bedrijf in Amsterdam, en uit diens eigen registratie blijkt waar verzoeken van politie en overheid terechtkomen: op een Nederlands adres, onder Nederlands recht. Jet-Stream plaatst zijn eigen hardware in racks van LeaseWeb, waardoor LeaseWeb geen toegang heeft tot de gegevens. Onze load balancer, takeoff.jetstre.am, antwoordt vanaf meerdere adressen in twee zones, zodat hij geen single point of failure is.
Bekijkt u de response headers van de origin, dan vindt u geen via, geen x-amz-*, geen x-cache en geen enkele andere CDN-vingerafdruk. U vindt er ook geen Server-header.
Elke afspeelsessie krijgt een door de server uitgegeven sessie in het URL-pad. Zo meten wij: aan de hand van de leveringslogs op onze eigen servers, waar een kijker niet onzichtbaar kan worden gemaakt door een contentblocker en niet kan worden verzonnen door een script. Kijkstatistieken worden server-side samengesteld in onze beveiligde, in de EU gehoste dienst en worden niet gedeeld met derden.
De playout: eerst de eigen origin, een Europees CDN wanneer dat nodig is
Standaard wordt een video van begin tot eind vanaf ons eigen platform geleverd. Wordt een video populair, dan verplaatst onze load balancer de playout naar een CDN. De drempelwaarden, de bedrijfsregels en de keuze van het CDN zijn per klant instelbaar. Het CDN dat we standaard gebruiken is Bunny, een Sloveens bedrijf.
Achter een hostnaam van ons voor een CDN kan van alles schuilgaan, en dat is precies wat een casestudy bij een andere leverancier aan het licht bracht: een ‘Europees CDN’ dat zijn video ophaalde bij Amazon CloudFront, dat hem op zijn beurt uit Amazon S3 las. Hier dus dezelfde check op ons:
$ dig bn-global.airflow.jetstre.am
bn-global.airflow.jetstre.am. 300 IN CNAME bn-global-airflow.b-cdn.net.
$ curl -sI https://bn-global.airflow.jetstre.am/…/playlist.m3u8
server: BunnyCDN-FR1-1221
cdn-requestcountrycode: NL
cdn-requestpullcode: 200
En nog een keer, via een VPN in de Verenigde Staten:
server: BunnyCDN-IL1-1234
cdn-requestcountrycode: US
cdn-requestpullcode: 200
● Een Amerikaanse kijker krijgt de video van een Bunny-edge in Illinois, en daar wilt u hem voor de prestaties ook vandaan laten komen. We claimen geen ‘uitsluitend Europese edges’, want die claim gaat over geografie, terwijl de vraag die er echt toe doet over jurisdictie gaat. Gegevens van een Amerikaanse kijker die vanaf een Amerikaanse edge wordt bediend, komen de EU nooit binnen; waar het om gaat, is wie eigenaar is van de edge en waar die zijn content vandaan haalt. In beide gevallen is het antwoord hetzelfde: cdn-requestpullcode: 200 vanaf onze eigen, in de EU gehoste origindiensten, zonder via: cloudfront en zonder x-amz-headers in de respons. De keten is Jet-Stream-origin, Jet-Stream Edge, kijker, of Jet-Stream-origin, Bunny-edge, kijker. Twee rechtspersonen, allebei Europees, en de tweede alleen wanneer een video zo populair is dat dat nodig is.
In onze pool zitten ook andere CDN's, bijvoorbeeld Fastly en Akamai, Amerikaanse bedrijven. Die zijn opt-in per klant en staan uit, tenzij een klant er uitdrukkelijk om vraagt. We vermelden dat hier, omdat een dig op fl-global.airflow.jetstre.am u dat record laat zien, en u verdient het te weten wat het is voordat u het tegenkomt.
Wat de checks ons over onszelf leerden
We voerden deze checks uit om een vraag te beantwoorden, en ze beantwoordden een vraag die we niet hadden gesteld. Daarvoor doet u ze ook.
● Klanten die extra privacy willen, kunnen de parameter no-ext=all aan hun URL toevoegen. Zonder no-ext=all laadt de Privacy Player de Chromecast sender SDK van www.gstatic.com en de IMA-advertentie-SDK van imasdk.googleapis.com, nog voordat een kijker iets cast of een advertentie ziet. Het IP-adres van elke kijker komt dan bij Google terecht. De parameter die dit voorkomt is openbaar gedocumenteerd en werkt, maar het is een opt-in, en wij vinden dat privacy geen opt-in hoort te zijn.
Daarom draaien we dit in de volgende release om. We ontwikkelen een nieuwe versie van onze player, die de Chromecast-SDK pas laadt wanneer een kijker op het cast-icoon klikt. De advertentie-SDK wordt alleen geladen als er voor een playout daadwerkelijk een ad tag is ingesteld. Kijkers die nooit casten en klanten die nooit adverteren, maken dan nooit contact met Google, en niemand levert een functie in. De no-ext=xx-opties blijven bestaan als harde garantie voor klanten met een strikt beleid, en een Content-Security-Policy op de player maakt van ‘geen externe aanroepen’ een regel die de browser afdwingt in plaats van een belofte die onze code nakomt.
● Misschien is het u ook opgevallen dat wowza als variabele in de URL staat. Dat is software in Amerikaanse handen die momenteel nog wordt gebruikt als verouderde JIT-packager. Hij is self-hosted en geïsoleerd, waardoor Wowza nergens toegang toe heeft en niets kan aansturen. Hij fungeert niet als origin richting eindklanten of CDN's, maar is afgeschermd door open source caches. Klanten kunnen ook voor andere packagers kiezen, zoals de Nederlandse (in Australische handen) Unified-packager. De Wowza-packager wordt uitgefaseerd en vervangen door onze eigen, modernere en geavanceerdere JIT-packagers.
We publiceren dit niet omdat het spectaculair is, maar omdat het alternatief is wat we in deze markt te vaak zien: een eindtoestand claimen die niet bestaat. Een leverancier die zegt dat er niets meer te verbeteren valt, kijkt niet goed of vertelt het u niet.
Open architectuur
Het platform van Jet-Stream is overigens open. U kunt uw eigen player gebruiken, want analytics en toegangscontrole zijn op geen enkele manier afhankelijk van de player. U kunt per titel en in realtime geografisch het CDN kiezen. U kunt uw eigen origins gebruiken, met uw eigen transcoders en packagers. U kunt elk CMS en elk backendsysteem koppelen, net als uw eigen monitoring- en analysetools. Dat open karakter is een bewuste ontwerpkeuze en tilt soevereiniteit naar een hoger niveau, want soevereiniteit gaat verder dan hosting en eigendom in Europa: het gaat om controle, onafhankelijkheid en vrijheid. Bevallen de diensten en pipelines van Jet-Stream u: mooi. Wilt u een dienst door een andere vervangen: ook prima.
Doe het zelf
U hoeft ons hierin niet op ons woord te geloven, en dat zou u bij niemand moeten doen. Voor elk videoplatform, ook het onze:
- Open de player in een browser, open het tabblad Netwerk en speel een video helemaal af. Noteer elk domein dat niet van de leverancier is. Vraag waar elk domein voor dient.
- Open het tabblad Opslag. Noteer elke cookie, elke local storage-sleutel en elke session storage-sleutel. Vraag waarom elk ervan er staat.
- Voer dig uit op elke hostnaam in de trace. Volg elke CNAME tot het einde. Voer whois uit op het adres waar u uitkomt.
- Voer curl -sI uit op een media-URL uit de trace. Lees de server-, via- en x-amz-headers. Doe het nog een keer via een VPN buiten Europa.
- Vraag de leverancier waar de kijkstatistieken vandaan komen: uit leveringslogs of uit een script in de browser.
Vijf checks, een half uur, geen specialist nodig. Voer ze uit op ons. Vindt u iets wat wij over het hoofd hebben gezien, laat het ons weten, dan passen we deze pagina aan.
Hieronder volgen de volledige testresultaten. De twee geanonimiseerde casestudy's, ‘Sovereignty washing in de praktijk’ en ‘Privacy washing in de praktijk’, zijn op verzoek beschikbaar.
Testresultaten
Getest op 12 september 2026 vanuit Nederland en via een VPN in de Verenigde Staten, in Safari met de ontwikkelaarstools, aangevuld met dig, whois en curl. Van IP-adressen is het laatste octet gemaskeerd; sessietokens, tokens van ondertekende links, CDN-pull-zones en request-ID's zijn eveneens gemaskeerd. Al het overige is weergegeven zoals het is teruggegeven.
1. Netwerktrace, no-ext=all
Volledig afgespeeld. 46 verzoeken, 5 hostnamen, 0 extern.
| Hostnaam | Rol | Verzoeken |
| ● player.jetstre.am | Playerpagina, scripts, stijlen, iconen | document, js, css, svg, png, manifest |
| ● takeoff.jetstre.am | Load balancer, CDN-keuze per sessie | 2 fetches (1,5 KB, 0,7 KB) |
| ● w1.cdn.jetstre.am | Jet-Stream-origin (eerste sessies) | playlist.m3u8, chunklists, .ts-segmenten |
| ● bn-global.airflow.jetstre.am | Bunny CDN (na populariteitsdrempel) | playlist.m3u8, chunklists, .ts-segmenten |
| Ondertitels, ondertekende links met vervaldatum |
Standaard embed (zonder no-ext=all), aanvullend waargenomen hostnamen: www.gstatic.com (cast_sender.js, Chromecast-SDK) en imasdk.googleapis.com (ima3.js, advertentie-SDK). Beide van Google. Posterafbeeldingen kunnen daarnaast worden geleverd via fl-global.airflow.jetstre.am (Fastly) bij accounts die voor dat CDN hebben gekozen.
2. DNS
$ dig player.jetstre.am
player.jetstre.am. 300 IN A 82.150.152.XXX
$ dig takeoff.jetstre.am
takeoff.jetstre.am. 300 IN A 178.162.182.XXX
takeoff.jetstre.am. 300 IN A 82.150.152.XXX
$ dig w1.cdn.jetstre.am
w1.cdn.jetstre.am. 149 IN A 82.150.152.XXX
$ dig bn-global.airflow.jetstre.am
bn-global.airflow.jetstre.am. 300 IN CNAME bn-global-airflow.b-cdn.net.
bn-global-airflow.b-cdn.net. 35 IN A 143.244.56.XXX
$ dig fl-global.airflow.jetstre.am (opt-in-CDN, standaard uit)
fl-global.airflow.jetstre.am. 300 IN CNAME n.sni.global.fastly.net.
n.sni.global.fastly.net. 29 IN A 140.248.137.XXX
3. Registratie
$ whois 82.150.152.XXX
inetnum: 82.150.152.XXX – 82.150.152.XXX
netname: JETSTREAM-NL
descr: Jetstream BV
country: NL
org-name: Jet-Stream BV
address: Groningen, The Netherlands
created: 2004-04-07
route: 82.150.152.0/24 descr: Jet-Stream routed via LEASEWEB origin: AS60781
$ whois 178.162.182.XXX
netname: NL-LEASEWEB-20100205
org-name: LeaseWeb Netherlands B.V.
reg-nr: 30141839
address: Amsterdam, NETHERLANDS
4. Headers, Bunny CDN, vanuit Nederland
$ curl -sI https://bn-global.airflow.jetstre.am/…/ReadySetRocknRoll.smil/media_b4033536_2.ts
HTTP/2 200
content-type: video/MP2T
server: BunnyCDN-FR1-1315 <- Bunny-edge, Frankrijk
cdn-pullzone: XXXXXXX
cdn-requestcountrycode: NL
cdn-requestpullsuccess: True
cdn-requestpullcode: 200 <- opgehaald bij Jet-Stream-origin
strict-transport-security: max-age=15724800; includeSubDomains
(geen via-header, geen x-amz-*-headers, geen x-cache)
$ curl -sI https://bn-global.airflow.jetstre.am/…/readysetrocknroll.jpg
HTTP/2 200
content-type: image/jpeg
server: BunnyCDN-FR1-1217
cdn-requestcountrycode: NL
cdn-requestpullcode: 206
(geen via-header, geen x-amz-*-headers)
5. Headers, Bunny CDN, via een VPN in de Verenigde Staten
$ curl -sI https://bn-global.airflow.jetstre.am/…/ReadySetRocknRoll.smil/playlist.m3u8
HTTP/2 200
content-type: application/vnd.apple.mpegurl
server: BunnyCDN-IL1-1234 <- Bunny-edge, Illinois
cdn-requestcountrycode: US
cdn-requestpullsuccess: True
cdn-requestpullcode: 200 <- nog steeds opgehaald bij Jet-Stream-origin, niet bij een Amerikaanse cloud
(geen via-header, geen x-amz-*-headers)
6. Headers, eigen origin
$ curl -sI https://w1.cdn.jetstre.am/…/ReadySetRocknRoll.smil/playlist.m3u8
HTTP/2 302
location: /session/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/… <- door de server uitgegeven sessie
strict-transport-security: max-age=15724800; includeSubDomains
(geen server-header, geen enkele CDN-header)
7. Headers, de twee Google-SDK's in de standaard embed
$ curl -sI “https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1”
HTTP/2 200
server: sffe
report-to: {“group”:”cloudview”, … “url”:”https://csp.withgoogle.com/csp/report-to/cloudview”}
$ curl -sI https://imasdk.googleapis.com/js/sdkloader/ima3.js
HTTP/2 200
p3p: policyref=”https://www.googleadservices.com/pagead/p3p.xml”, …
server: cafe
content-length: 499908
8. Browseropslag na het afspelen
Safari Web Inspector, tabblad Opslag, origin player.jetstre.am, na volledig afspelen met ondertitels:
Cookies: (leeg)
Local storage: (leeg)
Session storage: (leeg)