Ila għall-kontenut ewlieni

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.

Lura fiċ-ċentru tal-gwida