Asosiy kontentga oʻtish

Boʻlim

Texnologiya

Ikki qatlamdagi haqiqiy Dueli toʻplami: sodda tilda tushuntirish va muhandislik koʻrinishi.

Bu sahifa Dueli haqiqatan ishlatadigan texnologiyalarni ikki qatlamda tushuntiradi: hammaga qaratilgan sodda til koʻrinishi va mutaxassislarga qaratilgan muhandislik koʻrinishi. Joriy kod ishlatmaguncha hech qanday texnologiya keltirilmaydi.

Oddiy tilda

Dueli Cloudflare global tarmogʻidagi brauzerda ishlaydi. Ikki raqobatchi oʻz qurilmalari orasida jonli video qoʻngʻiroqda uchrashadi (WebRTC peer-to-peer); tarmoq toʻgʻridan-toʻgʻri yoʻlni bloklaganda TURN releyi ulanishga yordam beradi.

Musobaqa davomida brauzer ikkala kamera tasvirini bitta rasmga birlashtiradi va uni qisqa 5 soniyalik boʻlaklar bilan yozib oladi. Boʻlaklar yaratilgan sari yuklanadi, ketma-ket ijro etilishi va oʻyin tugagach toʻliq qayta koʻrish yozuviga yigʻilishi mumkin.

Yozib olingan musobaqalarni MP4 fayl sifatida yuklab olish mumkin. Yozuvni aylantirish talab etilsa, aylantirish mehmonning brauzerida FFmpeg.wasm yordamida ishlaydi, shuning uchun fayl tashqi aylantirish xizmatiga yuborilmaydi.

Platforma maʼlumotlari D1da saqlanadi, sahifalar va APIlar Cloudflareda Hono va TypeScript bilan qurilgan, interfeys esa Tailwind CSS dan foydalanadi. Jonli yangilanmalar SSE va polling orqali keladi.

Muhandislar uchun

Ishga tushirish: Cloudflare Pages/Workers, Hono 4 va TypeScript bilan. D1 (SQLite) maʼlumotlar bazasi hisoblanadi. Vite Worker toʻplamini quradi, Tailwind CSS 4 interfeysni bezaydi, esbuild esa brauzer kirish nuqtalarini bogʻlaydi.

Jonli media: brauzerdagi RTCPeerConnection boshlovchi va raqib oʻrtasida WebRTC ni tashiydi. ICE serverlar har sessiya uchun GET /api/signaling/ice-servers orqali beriladi; Cloudflare Calls TURN (TURN_TOKEN_ID va TURN_API_TOKEN) yoki oʻz-oʻzi joylashtirilgan coturn (TURN_URL va TURN_SECRET) reley boʻlishi mumkin, hech biri sozlanmagan boʻlsa faqat STUN ga zaxira yoʻlga oʻtiladi.

Yozuv: canvas kompozitor ikkala tasvirni chizadi va MediaRecorder har 5 soniyada bitta boʻlak chiqaradi. Boshlovchi har boʻlakni POST /api/chunks/register orqali roʻyxatdan oʻtkazadi (musobaqa, ketma-ketlik va bayt chegarasiga bogʻlangan qisqa umrli bir martalik kalit), yuklaydi, GET /verify bilan tekshiradi va POST /receipt orqali xabar beradi. Ijro GET /api/chunks/playlist/:id ni oʻqiydi, mavjud yakunlash qadami VOD ni hosil qiladi.

Yuklab olishlar: @ffmpeg/core 0.12.10 MP4 aylantirish uchun oʻz-oʻzi joylashtirilgan brauzer ishchi jarayonida ishlaydi, allaqachon MP4ga mos yozuvlar uchun tuzilma remux yoʻli mavjud. Jarayon va xotira chegaralari mijoz xizmatida boshqariladi.

Real vaqt: SSE GET /api/sse orqali jonli yangilanmalarni tashiydi va signallash HTTP polling ishlatadi; ishlab chiqarish yoʻlida WebSocket ishlatilmaydi.

Sifat: Vitest birlik va UI shartnomalarini qoplaydi, Playwright esa brauzer oqimlarini uchidan oxirigacha sinaydi. Markdown hujjatlar marked bilan render qilinadi, CSS yoʻnalishini PostCSS va Autoprefixer yakunlaydi.

Ushbu repozitoriydagi toʻplam

  • Cloudflare Pages / Workers Xosting va server ish muhiti
  • Cloudflare D1 (SQLite) Ilova maʼlumotlar bazasi
  • Hono 4 HTTP yoʻnalishlari, sahifalar va API
  • TypeScript 5 Server va mijoz uchun tiplangan manba kod
  • Tailwind CSS 4 + PostCSS + Autoprefixer Interfeys uslublari va CSS yoʻnalishi
  • Vite 7 + esbuild Worker toʻplami va brauzer kirish nuqtalari
  • WebRTC (RTCPeerConnection) + TURN/STUN Ishtirokchilar oʻrtasida jonli audio va video
  • Canvas kompozitor + MediaRecorder Brauzerda 5 soniyalik yozib olingan boʻlaklar
  • FFmpeg.wasm (@ffmpeg/core 0.12.10) Brauzer ichida MP4 aylantirish va yuklab olish
  • marked 17 Boshqariladigan hujjatlar uchun Markdown renderi
  • Vitest 5 Birlik va UI sinov toʻplami
  • Playwright Uchidan-oxirigacha brauzer sinovlari
  • Wrangler 4 Cloudflare ishlab chiqish va joylashtirish vositalari
  • SSE + HTTP polling Media yoʻlidan tashqari jonli yangilanmalar

Roʻyxat package.json va repozitoriyda haqiqatan mavjud narsalar bilan cheklangan. Bu texnik tavsif, hamkorlik yoki tavsiya daʼvosi emas.

Qoʻllanma markaziga qaytish