කොටස
තාක්ෂණය
තත්ය Dueli තාක්ෂණ ගොන්න ස්ථර දෙකකින්: සරල භාෂාවෙන් පැහැදිලි කිරීමක් සහ ඉංජිනේරු දෘෂ්ටිය.
මේ පිටුවේ පැහැදිලි කරන්නේ Dueli ඇත්තටම භාවිත කරන තාක්ෂණ, ස්ථර දෙකකින්: සැමට වැටහෙන සරල භාෂා දෘෂ්ටියක් සහ විශේෂඥයන්ට ඉංජිනේරු දෘෂ්ටියක්. දැනට කේතය භාවිත නොකරන කිසිම තාක්ෂණයක් ලැයිස්තුගත නැහැ.
සරල භාෂාවෙන්
Dueli ක්රියාත්මක වන්නේ Cloudflare ගෝලීය ජාලය මත, බ්රව්සරය තුළයි. තරඟකරුවන් දෙදෙනෙක් හමු වන්නේ ඔවුන්ගේ උපාංග අතර සජීවී වීඩියෝ ඇමතුමකින් (WebRTC peer-to-peer); ජාලයක් කෙලින්ම මාර්ගය අවහිර කළොත් TURN relay එක සම්බන්ධතාව ඉදිරියට යන්න උදව් වේ.
තරඟයක් අතරතුර බ්රව්සරය කැමරා දෙකේ ප්රවාහ එක රූපයකට ඒකාබද්ධ කර, එය තත්පර 5 ක කුඩා කොටස් ලෙස පටිගත කරයි. හැදෙන විගසම ඒ කොටස් උඩුගත වේ, අනුපිළිවෙලට නැවත ධාවනය කරන්න පුළුවන්, තරඟය අවසන් වූ පස්සේ සම්පූර්ණ replay එකට එකතු වේ.
පටිගත කළ තරඟ MP4 ගොනුවක් ලෙස බාගත කරන්න පුළුවන්. පටිගත කිරීමකට පරිවර්තනය අවශ්ය නම්, ඒ පරිවර්තනය ක්රියාත්මක වන්නේ නරඹන්නාගේ බ්රව්සරය තුළ FFmpeg.wasm වලින් නිසා ගොනුව බාහිර පරිවර්තන සේවාවකට යවන්නේ නැහැ.
වේදිකා දත්ත තියෙන්නේ D1 තුළ; පිටු සහ API Cloudflare මත Hono සහ TypeScript වලින් හදලා තියෙන අතර අතුරුමුහුණත භාවිත කරන්නේ Tailwind CSS. සජීවී යාවත්කාලීන SSE සහ polling හරහා එනවා.
ඉංජිනේරුවන්ට
Runtime: TypeScript මත Hono 4 සමඟ Cloudflare Pages/Workers. D1 (SQLite) දත්ත සමුදාය. Worker bundle එක හදන්නේ Vite, අතුරුමුහුණත සැරසිලි කරන්නේ Tailwind CSS 4, බ්රව්සර ප්රවේශ ස්ථාන bundle කරන්නේ esbuild.
සජීවී මාධ්ය: browser RTCPeerConnection එකක් සත්කාරකයා සහ ප්රතිවාදියා අතර WebRTC ප්රවාහනය කරයි. ICE servers නිකුත් වන්නේ සැසියකට එකක් ලෙස GET /api/signaling/ice-servers වෙතින්; Cloudflare Calls TURN (TURN_TOKEN_ID සහ TURN_API_TOKEN) හෝ self-hosted coturn (TURN_URL සහ TURN_SECRET) relay ලෙස ක්රියා කරන අතර දෙකම වින්යාස නොකර ඇත්නම් STUN පමණක් යොදන සහාර ක්රමයක් තියෙනවා.
පටිගත කිරීම: canvas compositor එක ප්රවාහ දෙකම අඳින අතර MediaRecorder තත්පර 5 කට වරක් කොටසක් නිකුත් කරයි. සත්කාරකයා එක් එක් කොටස POST /api/chunks/register වෙත ලියාපදිංචි කරයි (තරඟය, අනුපිළිවෙල සහ byte සීමාවට බැඳුණු, එක් වරක් භාවිත කළ හැකි කෙටිකාලීන යතුරක්), එය උඩුගත කර, GET /verify වලින් සත්යාපනය කර, POST /receipt වාර්තා කරයි. වාදනය කියවන්නේ GET /api/chunks/playlist/:id වන අතර දැනට ඇති සම්පූර්ණ කිරීමේ පියවර VOD එක හදයි.
බාගැනීම්: MP4 පරිවර්තනය සඳහා @ffmpeg/core 0.12.10 self-hosted browser worker එකක ක්රියාත්මක වේ, දැනටමත් MP4 අනුකූල පටිගත කිරීම් සඳහා ව්යුහාත්මක remux මාර්ගයක්ද තියෙනවා. ප්රගතිය සහ මතක සීමා client සේවාවේ හැසිරවේ.
තත්යකාලීන: GET /api/sse හරහා SSE සජීවී යාවත්කාලීන රැගෙන එන අතර සම්බන්ධීකරණය HTTP polling භාවිත කරයි; නිෂ්පාදන මාර්ගය WebSocket භාවිත නොකරයි.
ගුණාත්මකභාවය: Vitest unit සහ UI ගිවිසුම් ආවරණය කරන අතර Playwright end-to-end බ්රව්සර ප්රවාහ ආවරණය කරයි. Markdown ලේඛන විදහනය වන්නේ marked වලින් වන අතර PostCSS සහ Autoprefixer CSS ක්රියාවලිය සම්පූර්ණ කරයි.
මේ කේත ගබඩාවේ තියෙන තාක්ෂණ ගොන්න
- Cloudflare Pages / Workers සත්කාරණය සහ සර්වර runtime
- Cloudflare D1 (SQLite) යෙදුමේ දත්ත සමුදාය
- Hono 4 HTTP මාර්ග, පිටු සහ API
- TypeScript 5 සර්වරයට සහ client වලට ටයිප් කළ මූලාශ්රය
- Tailwind CSS 4 + PostCSS + Autoprefixer අතුරුමුහුණත සැරසිලි සහ CSS ක්රියාවලිය
- Vite 7 + esbuild Worker bundle සහ බ්රව්සර ප්රවේශ ස්ථාන
- WebRTC (RTCPeerConnection) + TURN/STUN සහභාගිවන්නන් අතර සජීවී ශ්රව්ය සහ දෘශ්ය
- Canvas compositor + MediaRecorder බ්රව්සරය තුළ තත්පර 5 ක පටිගත කොටස්
- FFmpeg.wasm (@ffmpeg/core 0.12.10) බ්රව්සරය තුළ MP4 පරිවර්තනය සහ බාගැනීම
- marked 17 කළමනාකරණය කළ ලේඛන සඳහා Markdown විදහීම
- Vitest 5 unit සහ UI පරීක්ෂණ එකතුව
- Playwright end-to-end බ්රව්සර පරීක්ෂණ
- Wrangler 4 Cloudflare සංවර්ධන සහ deployment මෙවලම්
- SSE + HTTP polling මාධ්ය මාර්ගයෙන් පිට සජීවී යාවත්කාලීන
ලැයිස්තුව සීමා වන්නේ package.json සහ කේත ගබඩාව ඇත්තටම අඩංගු දේට පමණයි. එය තාක්ෂණික විස්තරයක් මිසක් තාත්විකත්වයක් හෝ අනුමැතියක් නෙවෙයි.