Sezzjoni
Teknoloġija
Il-vera stack ta' Dueli f'żewġ livelli: spjegazzjoni f'lingwa sempliċi u l-prospettiva ta' l-inġinerija.
Din il-paġna spjega t-teknoloġiji li Dueli tuża faktament, f'żewġ livelli: veduta bl-ilsien sempliĆ għal kulħadd u veduta inġineristika għall-speċjalisti. L-ebda teknoloġija ma tniżżel iżda l-kodiċi attiv jtużaha.
Bil-lingwa sempliċi
Dueli taħdem fil-browser fuq in-network globali ta' Cloudflare. Żewġ kompetituri jiltaqgħu f'kallja video dirett bejn il-apparat tagħhom (WebRTC peer-to-peer); meta netwerk jiblokkja l-perjott dirett, relay TURN jgħin il-konnessjoni.
Matul kompetizzjoni, il-browser jingħaqad iż-żew feeds tal-kamera f'waħda u jirreġistrah bħal biċċiet qosra ta' 5 sekondi. Il-biċċiet jiġu mgħobbija meta jiffurmaw, jistgħu jidhru lura fl-ordni, u jiġu magħquqa f'replay sħiħ wara li t-tlielaq jispiċċa.
Kompetizzjonijiet irrreġistrati jistgħu jiġu niżżlu bħala fajl MP4. Meta r-rekord jeħtieġ konverżjoni, il-konverżjoni taħdem fi ħdan il-browser tal-viżitatur b'FFmpeg.wasm, hekk il-fajx ma jmurx lejn servizz ta' konverżjoni estern.
Id-dejta tal-platform tgħix f'D1, il-paġni u l-APIs huma bnew b'Hono u TypeScript fuq Cloudflare, u l-interfaċa tuża Tailwind CSS. Aġġornamenti diretti jasu permezz ta' SSE u polling.
Għall-inġineri
Runtime: Cloudflare Pages/Workers b'Hono 4 fuq TypeScript. D1 (SQLite) hija l-bażi tad-dejta. Vite jibni l-bundle tal-Worker, Tailwind CSS 4 tistilja l-interfaċa, u esbuild jibni l-punti ta' daħħal tal-browser.
Media diretti: RTCPeerConnection fil-browser jwassal WebRTC bejn l-ospit u l-oppożizzjoni. Is-servers ICE jippermettu kull sessjoni minn GET /api/signaling/ice-servers; Cloudflare Calls TURN (TURN_TOKEN_ID u TURN_API_TOKEN) jew coturn awtoservit (TURN_URL u TURN_SECRET) jistgħu jirrelayjaw, b'fallback biss STUN meta tnejn ma humx konfigurati.
Irreġistrazzjoni: kompożitur tal-canvas jippreżenta ż-żew feeds, u MediaRecorder jibgħat biċċa kull 5 sekondi. L-ospit jirreġistra kull biċċa f'POST /api/chunks/register (klienti ta' ħin qasir magħquqa mal-kompetizzjoni, serje u limitu ta' bytes), jibgħatha, jverifikaha b'GET /verify u jirraporta POST /receipt. Ir-riproduzzjoni tirraċċola GET /api/chunks/playlist/:id, u l-passaġġ finali esistenti joħloq il-VOD.
Niżliel: @ffmpeg/core 0.12.10 taħdem f'worker tal-browser awtoservit għal konverżjoni MP4, b'perkorju ta' remux strutturali għal rekords li diġà humi MP4-kompatibbli. Progress u limiti ta' memorja jiġu trattati fil-klijent servizz.
Realtime: SSE permezz ta' GET /api/sse jwassal aġġornamenti diretti, u l-signaling tuża polling HTTP; il-perkorju ta' produzzjoni ma jtużax WebSocket.
Kwalità: Vitest jkopri unità u kontratti UI, u Playwright jkopri flussi tal-browser end-to-end. Dokumenti Markdown huma rrenderati b'marked, u PostCSS b'Autoprefixer isir il-pipeline CSS.
Is-stack f'dan ir-repository
- Cloudflare Pages / Workers Hosting u runtime tas-server
- Cloudflare D1 (SQLite) Bażi tad-dejta tal-applikazzjoni
- Hono 4 Roti HTTP, paġni u API
- TypeScript 5 Sors tipat għas-server u l-klijent
- Tailwind CSS 4 + PostCSS + Autoprefixer Stiljar tal-interfaċa u pipeline CSS
- Vite 7 + esbuild Bundle tal-worker u punti ta' daħla għall-browser
- WebRTC (RTCPeerConnection) + TURN/STUN Awda u vidjo diretti bejn il-parteċipanti
- Canvas compositor + MediaRecorder Frammi irreġistrati ta' 5 sekondi fil-browser
- FFmpeg.wasm (@ffmpeg/core 0.12.10) Konverżjoni MP4 u dawl fil-browser
- marked 17 Rindjar tal-Markdown għal dokumenti immaniġġjati
- Vitest 5 Suwi ta' testijiet unità u UI
- Playwright Testijiet end-to-end tal-browser
- Wrangler 4 Għodda ta' żvilupp u deplojment ta' Cloudflare
- SSE + polling HTTP Aġġornamenti diretti barra minn paħla tal-media
Il-lista hija limitata għal dak li package.json u r-repository fihom effettivament. Huwa deskrizzjoni tekniċi, mhall klijent ta' partenjat jew approvazzjoni.