Бахш
Технология
Стаки воқии Dueli дар ду қабат: шарҳи сода ва назарияи муҳандисӣ.
Ин саҳифа технологияҳое, ки Dueli воқеан истифода мебарад, дар ду қабат тавзеҳ медиҳад: назари сода барои ҳама ва назари муҳандисӣ барои мутахассисон. Ягон технология дар ин ҷо фақат он гоҳе номбар мешавад, ки коди мавҷуд онро истифода мебарад.
Ба забони сода
Dueli дар браузер дар шабакаи глобалии Cloudflare кор мекунад. Ду мухобиз дар ҳамоиши видеоии зинда дар байни дастгоҳҳояшон (WebRTC peer-to-peer) вохӯранд; вақте шабака роҳи мустақимро бастааст, як релеи TURN кӯмак мекунад, ки пайвастӣ тавассути он барои гузаштан мавҷуд бошад.
Давоми мусобиқа браузер ду суроғаи камераро ба тасвири якҷам мекунад ва онро ба суроғаҳои 5-сонияи кӯтоҳ сабт мекунад. Ин суроғаҳо дар вақти эҷод шудан боргузорӣ мешаванд, метавонанд бозгаштӣ шаванд ва пас аз анҷоми мубориза ба навбат ба як навор пурра ҷамъоварӣ мешаванд.
Мусобиқаҳои сабтшуда метавонанд ба сурати файли MP4 боргузорӣ шаванд. Вақте барои табдили сабтт муддате лозим бошад, табдилот дар браузери меҳмон иҷро мешавад бо истифода аз FFmpeg.wasm, пас файл ба хидматҳои берунии табдил фиристода намешавад.
Додаҳои платформа дар D1 зиндагӣ мекунанд, саҳифаҳо ва API бо Hono ва TypeScript дар Cloudflare сохта шудаанд, ва интерфейс аз Tailwind CSS истифода мебарад. Навидҳои зинда аз тариқи SSE ва polling мерасанд.
Барои муҳандисон
Вақти корӣ: 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/:худо хонда мешавад, ва қадами мавҷуди тамомкунӣ навори VOD-ро ба вуҷуд меорад.
Боргузориҳо: @ffmpeg/core 0.12.10 дар як браузер худхост дар коргар кор мекунад барои табдили MP4, бо роҳи remuxи сохтӣ барои сабтҳое, ки аллакай бо стандарти MP4 мувофиқат мекунанд. Пешрафту сарҳадҳои хотира дар хидмати мизбон идора мешаванд.
Воқеъӣ: SSE тавассути GET /api/sse навидҳои зиндаро мунтақил мекунад, ва иродатҳо аз тариқи pollingи 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 Ҷамъоварии коргар ва нуқтаҳои вурудии браузер
- WebRTC (RTCPeerConnection) + TURN/STUN Аудио ва видеои зинда байни ширкаткунандагон
- Canvas compositor + MediaRecorder Қисматҳои сабтшудаи 5-сония дар браузер
- FFmpeg.wasm (@ffmpeg/core 0.12.10) Тағйироти MP4 дар браузер ва боргузарӣ
- marked 17 Намоишдиҳии Markdown барои ҳуҷҷатҳои идорашаванда
- Vitest 5 Сатри санҷишҳои воҳидӣ ва UI
- Playwright Санҷишҳои поёнии браузер
- Wrangler 4 Абзорҳои тавлиду ба коргирии Cloudflare
- SSE + HTTP polling Навсозии зинда дар роҳи медиа
Феҳرст маҳдуд ба он чист, ки дар package.json ва анбор мавҷуд аст. Ин тавзеҳи техникӣ аст, на эътибори ҳамкорӣ ё тасдиқи ҳамкорӣ.