Одељак
Технологија
Прави стек Dueli у два слоја: објашњење обичним језиком и инжењерски приказ.
Ова страница објашњава технологије које Dueli заиста користи, у два слоја: приказ обичним језиком за све и инжењерски приказ за стручњаке. Ниједна технологија није наведена ако је тренутни код не користи.
Једноставно речено
Dueli ради у прегледачу на глобалној мрежи Cloudflare-а. Два такмичара састају се у видеопозиву уживо између својих уређаја (WebRTC peer-to-peer); када мрежа блокира директан пут, TURN релеј помаже да веза прође.
Током такмичења прегледач спаја оба видео извора у једну слику и снима је као кратке сегменте од 5 секунди. Сегменти се отпремају како се стварају, могу се репродуковати редом и састављају у потпуну репризу након краја меча.
Снимљена такмичења могу се преузети као MP4 датотека. Када снимак треба конвертовати, конверзија се одвија у прегледачу посетиоца помоћу FFmpeg.wasm, тако да се датотека не шаље спољној услузи за конверзију.
Подаци платформе живе у D1, странице и API-ји изграђени су с Hono и TypeScript на Cloudflare-у, а сучеље користи Tailwind CSS. Ажурирања уживо стижу преко SSE и полинга.
За инжењере
Извршно окружење: Cloudflare Pages/Workers с Hono 4 на TypeScript-у. D1 (SQLite) је база података. Vite гради Worker пакет, Tailwind CSS 4 стилизује сучеље, а esbuild пакује прегледачке улазне тачке.
Медији уживо: прегледачки RTCPeerConnection носи WebRTC између домаћина и противника. ICE сервери се издају по сесији са GET /api/signaling/ice-servers; Cloudflare Calls TURN (TURN_TOKEN_ID и TURN_API_TOKEN) или властити coturn (TURN_URL и TURN_SECRET) могу служити као релеј, с резервом само на STUN када ништа није подешено.
Снимање: canvas композитор црта оба извора, а MediaRecorder емитује сегмент сваких 5 секунди. Домаћин пријављује сваки сегмент на POST /api/chunks/register (краткотрајни једнократни кључ везан за такмичење, редослед и горњу границу бајтова), отпрема га, проверава са GET /verify и извештава на POST /receipt. Репродукција чита GET /api/chunks/playlist/:id, а постојећи корак финализације производи VOD.
Преузимања: @ffmpeg/core 0.12.10 ради у властитом прегледачком воркеру за MP4 конверзију, са структурним ремукс путем за снимке који су већ компатибилни с MP4. Напредак и границе меморије рукују се у клијентском сервису.
У реалном времену: SSE преко GET /api/sse носи ажурирања уживо, а сигнализација користи HTTP полинг; производни пут не користи WebSocket.
Квалитет: Vitest покрива јединичне и UI уговоре, а Playwright енд-ту-енд прегледачке токове. Markdown документи рендерују се са marked, а PostCSS с Autoprefixer-ом завршава CSS цевовод.
Стек у овом репозиторијуму
- Cloudflare Pages / Workers Хостинг и серверско извршно окружење
- Cloudflare D1 (SQLite) База података апликације
- Hono 4 HTTP руте, странице и API
- TypeScript 5 Откуцани изворни код за сервер и клијент
- Tailwind CSS 4 + PostCSS + Autoprefixer Стилизовање сучеља и CSS цевовод
- Vite 7 + esbuild Worker пакет и прегледачке улазне тачке
- WebRTC (RTCPeerConnection) + TURN/STUN Аудио и видео уживо између учесника
- Canvas композитор + MediaRecorder Снимљени сегменти од 5 секунди у прегледачу
- FFmpeg.wasm (@ffmpeg/core 0.12.10) MP4 конверзија и преузимање у прегледачу
- marked 17 Markdown рендеровање за управљане документе
- Vitest 5 Пакет тестова за јединичне и UI тестове
- Playwright Енд-ту-енд тестови прегледача
- Wrangler 4 Cloudflare алати за развој и објављивање
- SSE + HTTP полинг Ажурирања уживо изван медијског пута
Листа је ограничена на оно што package.json и репозиторијум заиста садрже. То је технички опис, а не тврдња о партнерству или препоруци.