Bölüm
Tehnologiýa
Hakyky Dueli ýygylymy iki gatda: ýönekeý dilde düşündiriş we inženerlik ýüzünden.
Bu sahypa Dueliniň ulanýan tehnologiýalarynyň iki ýüzüni düşündirýär: ähli üçin ýönekeý we tehniki üçin inženýrlýk. Häzirki kod ulanmaýan hiç hili tehnologiýa ýatlandylmaz.
Ýönekeý dilde
Dueli Cloudflare-ň global ulgamynyň tarapyndan brauzerde işleýär. Iki ýaryşyjy olaryň enjamlarynyň arasynda (WebRTC peer-to-peer) ýaşamagyň wideo çagyryşynda duşuşýar; ulgamyň ýol bermeýän ýagdaýynda, TURN ýardamçysy baglanyşygy ýoluna ýetirýär.
Bäsleşýän wagtyň brauzer iki kamera ýagdaýyny bir surata birleşdirýär we ony 5 sekuntlyk bölekler hökmende ýazýar. Bölekler döredilende ýüklenýär, tertiple oýnamak mümkin we bäsleşmek gutarandan soň doly ýady ýasalýar.
ýazylan bäsleşmeler MP4 faýly hökmende ýüklemek mümkin. Konwersiýa gerek bolsa, konwersiýa FFmpeg.wasm arkaly brauzerde ýerine ýetirilýär, şeýlelikde faýl daşky konwersiýa hyzmatyna ýollanmaýar.
Platforma maglumatlary D1-de ýaşaýar, sahypalar we API-lar Hono we TypeScript bilen Cloudflare-da döredilýär we interfeýs Tailwind CSS ulanýar. Ýaşamagyň täzelenmeleri SSE we polling arkaly gelýär.
Inženýrlar üçin
Wagt: Cloudflare Pages/Workers bilen Hono 4 TypeScript-de. D1 (SQLite) maglumatlar bazasy. Vite Worker paketini döredýär, Tailwind CSS 4 interfeýs stilini döredýär we esbuild brauzer giriş nokatlaryny döredýär.
Ýaşamagyň media: brauzer RTCPeerConnection ýolbaşçy we garşy tarap arasynda WebRTC ýerine ýetirýär. ICE serwerler her ýöritelikden GET /api/signaling/ice-servers; Cloudflare Calls TURN (TURN_TOKEN_ID we TURN_API_TOKEN) ýa-da öz öýünde ýerleşýän coturn (TURN_URL we TURN_SECRET) ýardamçy bolup biler, ýöne ýeke-täk STUN ýalňyş ýagdaýy ýok bolsa.
ýazmak: canvas kompozitor iki ýagdaýy çyzýar we MediaRecorder her 5 sekuntda bir bölek çykarýar. ýolbaşçy her bölegi POST /api/chunks/register-da (ýeke-tägine ýaraýan, bäsleşmä bagly, tertiplenýän we byte çäki bar) ýazýar, ýuklaýar, GET /verify bilen tassyklaýar we POST /receipt hasaba alýar. Oýnamak GET /api/chunks/playlist/:id oýnamak mümkin we bar bolan finalize ýoly VOD ýasýar.
ýuklemek: @ffmpeg/core 0.12.10 öz öýünde ýerleşýän brauzer işgärinde MP4 konwersiýasy üçin işleýär, MP4 ýaraýan ýazgylar üçin quram rem ýoly bilen. Progress we ýady çägi hyzmatdaşa ýerine ýetirilýär.
Ýaşamagyň: GET /api/sse arkaly SSE ýaşamagyň täzelenmelerini ýerine ýetirýär we signaling HTTP polling ulanýar; ýasamagyň ýoly WebSocket ulanmaýar.
Sapak: Vitest birlik we UI şertlerini ýapýar we Playwright bitaraplyk brauzer akymlaryny ýapýar. Markdown dokumentleri marked bilen ýazylýar we PostCSS bilen Autoprefixer CSS ýoluny ýapýar.
Bu repozitoriýdaky sapak
- Cloudflare Pages / Workers Hosaplama we serwer wagtyny ýerine ýetirmek
- Cloudflare D1 (SQLite) Programma maglumatlar bazasy
- Hono 4 HTTP ýollar, sahypalar we API
- TypeScript 5 Serwer we klient üçin ýazylan çeşma
- Tailwind CSS 4 + PostCSS + Autoprefixer Interfeýs stilini ýasamak we CSS ýoluny ýapmak
- Vite 7 + esbuild Worker paketi we web sargyt nokatlary
- WebRTC (RTCPeerConnection) + TURN/STUN Gatnaşyjylar arasynda ýaşamly ses we wideo
- Canvas kompozitory + MediaRecorder Brauzerde 5 sekuntlyk ýazylan bölümler
- FFmpeg.wasm (@ffmpeg/core 0.12.10) Brauzerde MP4 konwertiýasy ýüklemek
- marked 17 Makdown çykarşylygy ýonetilen dokumentler üçin
- Vitest 5 Birlik we UI test ýygyndysy
- Playwright Soňuna çenli brauzer testleri
- Wrangler 4 Cloudflare ösüşiniň ýerine ýetirilişi we ýerleşdirmesi
- SSE + HTTP soraýyş Media ýolynyň daşyndaky ýaşamly ýenilenişler
Sanaw package.json we depo şol ýerde bar zatlara çäklenendir. Bu tehnik beýan, hyzmatdaşlyk ýa-da goldaw talaby däl.