Ruka hadi maudhui makuu

Sehemu

Teknolojia

Mtindo halisi wa Dueli katika tabaka mbili: maelezo ya lugha rahisi na mtazamo wa uhandisi.

Ukurasa huu unaeleza teknolojia Dueli zinatumia kwa kweli, katika tabaka mbili: mtazamo wa lugha rahisi kwa kila mtu na mtazamo wa uhandisi kwa wataalamu. Hakuna teknolojia inayorodheshwa mpaka msimbo wa sasa uitumie.

Kwa lugha rahisi

Dueli huendelea kwenye kivinjari kwenye mtandao wa kimataifa wa Cloudflare. Washindani wawili hukutana katika simu ya video ya moja kwa moja kati ya vifaa vyao (WebRTC peer-to-peer); mtandao ukizuia njia ya moja kwa moja, relay ya TURN husaidia muunganisho kukiwa na njia.

Wakati wa mashindano kivinjari huchanganya vipimo vya kamera zote mbili kuwa picha moja na kuirekodi kama vipande vifupi vya sekunde 5. Vipande vinapakiwa vinapotengenezwa, vinaweza kucheza kwa mpangilio, na vikusanywa kuwa uchezaji kamili baada ya mchezo kuisha.

Mashindano yaliyorekodiwa yanaweza kupakuliwa kama faili ya MP4. Rekodi inapohitaji kubadilishwa, ubadilishaji hufanyika ndani ya kivinjari cha mtumiaji kwa FFmpeg.wasm, hivyo faili haitumwi kwa huduma ya kubadilisha ya nje.

Data ya jukwaa huishi kwenye D1, kurasa na API zimetengenezwa kwa Hono na TypeScript kwenye Cloudflare, na kiolesura kinatumia Tailwind CSS. Sasisho hurudi kwa SSE na kumtaja kwa kila muda.

Kwa wahandisi

Uendeshaji: Cloudflare Pages/Workers na Hono 4 kwenye TypeScript. D1 (SQLite) ni hifadhidata. Vite hujenga bundili ya Worker, Tailwind CSS 4 hupaka kiolesura, na esbuild hujunga vituo vya kivinjari.

Midia ya moja kwa moja: RTCPeerConnection ya kivinjari hubeba WebRTC kati ya mwenyeji na mpingaji. Seva za ICE zinatolewa kwa kila kipindi kutoka GET /api/signaling/ice-servers; Cloudflare Calls TURN (TURN_TOKEN_ID na TURN_API_TOKEN) au coturn ya kujipangisha (TURN_URL na TURN_SECRET) zinaweza kutuma tena, na mbadala wa STUN pekee hilitolewa wakati hakuna yaliyopangwa.

Kurekodi: mchanganyiko wa canvas huchora vipimo vyote viwili, na MediaRecorder inatoa kipande kila sekunde 5. Mwenyeji huandikisha kila kipande kwa POST /api/chunks/register (ufunguo wa mara moja wa muda mfupi uliofungamana na mashindano, mpangilio na kikomo cha baiti), huupakia, huhakiki na GET /verify na arifa POST /receipt. Uchezaji husoma GET /api/chunks/playlist/:id, na hatua ya kumaliza iliyopo hutengeneza VOD.

Upakuaji: @ffmpeg/core 0.12.10 huendelea kwenye mfanyakazi wa kivinjari uliopangishwa na mwenyewe kwa kubadilisha MP4, na njia ya remux ya muundo kwa rekodi zinazotangamana na MP4 tayari. Maendeleo na vikomo vya kumbukumbu hushughulikiwa katika huduma ya mteja.

Wakati halisi: SSE kupitia GET /api/sse hubeba sasisho za moja kwa moja, na signaling hutumia kupoll kwa HTTP; njia ya uzalishaji haitumii WebSocket.

Ubora: Vitest hufunika mikataba ya vitengo na UI, na Playwright hufunika mifumo ya kivinjari ya mwanzo hadi mwisho. Nyaraka za Markdown zinatolewa kwa marked, na PostCSS na Autoprefixer hukamilisha mstari wa CSS.

Mtindo ulio kwenye hifadhi hii

  • Cloudflare Pages / Workers Upangishaji na uendeshaji wa seva
  • Cloudflare D1 (SQLite) Hifadhidata ya programu
  • Hono 4 Njia za HTTP, kurasa na API
  • TypeScript 5 Chanzo chenye aina kwa seva na mteja
  • Tailwind CSS 4 + PostCSS + Autoprefixer Upakuaji wa kiolesura na mstari wa CSS
  • Vite 7 + esbuild Bundili ya Worker na vituo vya kivinjari
  • WebRTC (RTCPeerConnection) + TURN/STUN Sauti na video ya moja kwa moja kati ya washiriki
  • Canvas compositor + MediaRecorder Vipande vya rekodi vya sekunde 5 ndani ya kivinjari
  • FFmpeg.wasm (@ffmpeg/core 0.12.10) Kubadilisha MP4 na kupakua ndani ya kivinjari
  • marked 17 Utoaji wa Markdown kwa nyaraka zilizodhibitiwa
  • Vitest 5 Mtihani wa vitengo na UI
  • Playwright Majaribio ya kivinjari ya mwanzo hadi mwisho
  • Wrangler 4 Zana za usanidi na kutuma Cloudflare
  • SSE + HTTP polling Sasisho huru ya njia ya midia

Orodha imepunguzwa kwa kilichomo kwenye package.json na hifadhi kwa kweli. Ni maelezo ya kiufundi, si dai la ushirikiano au ushawishi.

Rudi kituo cha mwongozo