Szekció
Technológia
A valódi Dueli verem két rétegben: közérthető magyarázat és mérnöki nézet.
Ez az oldal bemutatja azokat a technológiákat, amelyeket a Dueli ténylegesen használ, két rétegben: közérthető nézet mindenkinek és mérnöki nézet a szakembereknek. Technológia csak akkor szerepel, ha a jelenlegi kód használja.
Közérthetően
A Dueli a böngészőben fut a Cloudflare globális hálózatán. Két versenyző élő videóhívásban találkozik eszközeik között (WebRTC peer-to-peer); ha egy hálózat blokkolja a közvetlen utat, egy TURN-közvetítő segíti át a kapcsolatot.
Verseny közben a böngésző mindkét kamerajelet egyetlen képpé fésüli össze, és rövid, 5 másodperces szegmensekként rögzíti. A szegmensek előállításukkor feltöltődnek, sorrendben visszajátszhatók, és a meccs végeztével teljes visszajátszássá állnak össze.
A rögzített versenyek MP4 fájlként letölthetők. Ha egy felvétel konvertálást igényel, a konvertálás a látogató böngészőjében fut FFmpeg.wasm-mal, így a fájl nem kerül külső konvertáló szolgáltatáshoz.
A platform adatai a D1-ben élnek, az oldalak és API-k Hono és TypeScript használatával készülnek a Cloudflare-en, a felület pedig Tailwind CSS-t használ. Az élő frissítések SSE-n és lekérdezésen keresztül érkeznek.
Mérnököknek
Futtatókörnyezet: Cloudflare Pages/Workers Hono 4-gyel TypeScripten. A D1 (SQLite) az adatbázis. A Vite építi a Worker csomagot, a Tailwind CSS 4 stílusozza a felületet, az esbuild pedig csomagolja a böngésző belépési pontjait.
Élő média: egy böngésző RTCPeerConnection viszi a WebRTC-t a házigazda és az ellenfél között. Az ICE szerverek munkamenetenként a GET /api/signaling/ice-servers útról adódnak ki; a Cloudflare Calls TURN (TURN_TOKEN_ID és TURN_API_TOKEN) vagy az önállóan üzemeltetett coturn (TURN_URL és TURN_SECRET) közvetíthet, egyik sem beállítása esetén csak STUN tartalékkal.
Felvétel: egy canvas kompozitor rajzolja mindkét jelet, a MediaRecorder pedig 5 másodpercenként ad ki egy szegmenst. A házigazda minden szegmenst regisztrál a POST /api/chunks/register úton (a versenyhez, a sorrendhez és a bájthatárhoz kötött rövid életű egyszeri kulcs), feltölti, a GET /verify-vel ellenőrzi, és a POST /receipt-tel jelent. A lejátszás a GET /api/chunks/playlist/:id útját olvassa, a meglévő lezáró lépés állítja elő a VOD-ot.
Letöltések: az @ffmpeg/core 0.12.10 önállóan üzemeltetett böngésző workerben fut az MP4 konvertáláshoz, strukturális remux útvonallal a már MP4-kompatibilis felvételekhez. A folyamat és a memóriakorlátok kezelése a kliens szolgáltatásban történik.
Valós idejű: az SSE a GET /api/sse úton viszi az élő frissítéseket, a jelzés HTTP lekérdezést használ; a produkciós út nem használ WebSocketet.
Minőség: a Vitest az egység- és UI-szerződéseket, a Playwright a böngésző végponttól végpontig folyamatokat fedi le. A Markdown dokumentumok markeddel renderelődnek, a PostCSS az Autoprefixerrel fejezi be a CSS folyamatot.
A technológiai verem ebben a tárolóban
- Cloudflare Pages / Workers Tárhely és szerverfuttatókörnyezet
- Cloudflare D1 (SQLite) Alkalmazás-adatbázis
- Hono 4 HTTP útvonalak, oldalak és API
- TypeScript 5 Típusozott forrás szerverhez és klienshez
- Tailwind CSS 4 + PostCSS + Autoprefixer Felületstílusozás és CSS folyamat
- Vite 7 + esbuild Worker csomag és böngésző belépési pontok
- WebRTC (RTCPeerConnection) + TURN/STUN Élő hang és videó a résztvevők között
- Canvas kompozitor + MediaRecorder 5 másodperces rögzített szegmensek a böngészőben
- FFmpeg.wasm (@ffmpeg/core 0.12.10) Böngészőn belüli MP4 konvertálás és letöltés
- marked 17 Markdown renderelés a kezelt dokumentumokhoz
- Vitest 5 Egység- és UI-tesztkészlet
- Playwright Végponttól végpontig böngészőtesztek
- Wrangler 4 Cloudflare fejlesztési és telepítési eszközök
- SSE + HTTP lekérdezés Élő frissítések a médiaútvonalon kívül
A lista arra korlátozódik, amit a package.json és a tároló ténylegesen tartalmaz. Technikai leírás, nem partnerségi vagy ajánlási állítás.