Osio
Teknologia
Duelin todellinen teknologiapino kahdessa kerroksessa: selkokielinen selitys ja insinöörin näkemys.
Tämä sivu selittää teknologiat, joita Dueli todella käyttää, kahdessa kerroksessa: selkokielinen näkymä kaikille ja insinöörinäkymä asiantuntijoille. Mitään teknologiaa ei listata, ellei nykyinen koodi käytä sitä.
Selkokielellä
Dueli toimii selaimessa Cloudflaren maailmanlaajuisessa verkossa. Kaksi kilpailijaa tapaa toisensa live-videopuhelussa laitteidensa välillä (WebRTC vertaisverkossa); kun verkko estää suoran reitin, TURN-välitys auttaa yhteyden läpi.
Kilpailun aikana selain yhdistää molemmat kamerasyötteet yhdeksi kuvaksi ja tallentaa sen lyhyinä 5 sekunnin osina. Osat ladataan sitä mukaa, kun niitä syntyy, ne voidaan toistaa järjestyksessä, ja ne kootaan kokonaiseksi uusintatoistoksi kilpailun päätyttyä.
Tallennetut kilpailut voi ladata MP4-tiedostona. Kun tallenne tarvitsee muunnoksen, muunnos tapahtuu vierailijan selaimessa FFmpeg.wasmilla, joten tiedostoa ei lähetetä ulkoiselle muunnospalvelulle.
Alustan data sijaitsee D1:ssä, sivut ja API:t on rakennettu Honolla ja TypeScriptilla Cloudflarella, ja käyttöliittymä käyttää Tailwind CSS:iä. Live-päivitykset saapuvat SSE:n ja pollauksen kautta.
Insinööreille
Ajoympäristö: Cloudflare Pages/Workers Hono 4:llä TypeScriptilla. D1 (SQLite) on tietokanta. Vite rakentaa Worker-nipun, Tailwind CSS 4 tyylittää käyttöliittymän ja esbuild niputtaa selaimen aloituspisteet.
Live-media: selaimen RTCPeerConnection välittää WebRTC:n isännän ja vastustajan välillä. ICE-palvelimet myönnetään istuntokohtaisesti osoitteesta GET /api/signaling/ice-servers; Cloudflare Calls TURN (TURN_TOKEN_ID ja TURN_API_TOKEN) tai itse isännöity coturn (TURN_URL ja TURN_SECRET) voi välittää liikenteen, ja varalla on pelkkä STUN, kun kumpaakaan ei ole määritetty.
Tallennus: canvas-yhdistäjä piirtää molemmat syötteet, ja MediaRecorder tuottaa osan 5 sekunnin välein. Isäntä rekisteröi jokaisen osan osoitteeseen POST /api/chunks/register (lyhytikäinen kertakäyttöavain, joka sidotaan kilpailuun, järjestykseen ja tavurajaan), lataa sen, vahvistaa sen osoitteella GET /verify ja raportoi osoitteeseen POST /receipt. Toisto lukee osoitteen GET /api/chunks/playlist/:id, ja olemassa oleva viimeistelyvaihe tuottaa VOD:n.
Lataukset: @ffmpeg/core 0.12.10 toimii itse isännöidyssä selaintyöntekijässä MP4-muunnoksia varten, ja jo MP4-yhteensopiville tallenteille on rakenteellinen remux-reitti. Edistymistä ja muistirajoja hallitaan asiakaspuolen palvelussa.
Reaaliaikaisuus: SSE osoitteen GET /api/sse kautta välittää live-päivitykset, ja signaalointi käyttää HTTP-pollausta; tuotantoreitti ei käytä WebSocketia.
Laatu: Vitest kattaa yksikkö- ja käyttöliittymätestit, ja Playwright kattaa selaimen päästä päähän -virrat. Markdown-dokumentit renderöidään markedilla, ja PostCSS Autoprefixerineen täydentää CSS-putken.
Tämän repositorion teknologiapino
- Cloudflare Pages / Workers Isännöinti ja palvelinajoympäristö
- Cloudflare D1 (SQLite) Sovelluksen tietokanta
- Hono 4 HTTP-reitit, sivut ja API
- TypeScript 5 Tyypitetty lähdekoodi palvelimelle ja asiakkaalle
- Tailwind CSS 4 + PostCSS + Autoprefixer Käyttöliittymän tyylit ja CSS-putki
- Vite 7 + esbuild Worker-nippu ja selaimen aloituspisteet
- WebRTC (RTCPeerConnection) + TURN/STUN Live-ääni ja -video osallistujien välillä
- Canvas compositor + MediaRecorder 5 sekunnin tallenneosat selaimessa
- FFmpeg.wasm (@ffmpeg/core 0.12.10) MP4-muunnos ja lataus selaimessa
- marked 17 Markdown-renderöinti hallituille dokumenteille
- Vitest 5 Yksikkö- ja käyttöliittymätestit
- Playwright Päästä päähän -selaintestit
- Wrangler 4 Cloudflaren kehitys- ja julkaisutyökalut
- SSE + HTTP polling Live-päivitykset median polun ulkopuolella
Luettelo rajoittuu siihen, mitä package.json ja repositorio todella sisältävät. Kyseessä on tekninen kuvaus, ei kumppanuus- tai suositusväite.