Үндсэн агууллаг руу шилжих

Хэсэг

Технологи

Үнэнч Dueli-н давхаргууд хоёр хэлбэрээр: энгийн хэлний тайлбар болон инженерийн харагдац.

Энэ хуудас Dueli бодит хэрэглэж байгаа технологиудыг хоёр давхаргаар тайлбарладаг: бүх хүнд ойлгомжтой хэлбэрээр ба мэргэжилтний техник хэлбэрээр. Одоогийн код хэрэглэдэг технологи зөвхөн жагсаагдана.

Ойлгомжтой хэлбэрээр

Dueli нь хэрэглэгчийн браузер дээр Cloudflare-ийн дэлхийн сүлжээ дээр ажилладаг. Хоёр өрсөлдөгч тэдний төхөөрөмжүүд доторх шууд видео дуулгаар уулзана (WebRTC peer-to-peer); сүлжээ шууд замыг хаасан тохиолдолд TURN релей холболтыг туулахад тусална.

Өрсөлдөөний үед браузер хоёр камерийн урсгалыг нэг зураг болгон нэгтгэж, түүнийг 5 секундын богино хэсэг болгон бичнэ. Хэсгүүд үүсгэгдэхээр upload хийгдэнэ, дарааллаар тогтоож болно, мөн тэмцээн дууссаны дараа бүрэн тайзны тоглолт болон нэгтгэгдэнэ.

Бичсэн өрсөлдөөнүүдийг MP4 файлын хэлбэртэйгээр татаж авч болно. Хэрэв бичлэгийг хөрвүүлэх хэрэгтэй бол хөрвүүлэлт нь зочин браузер дотор FFmpeg.wasm-аар явагддаг, тиймээс файл гадаад хөрвүүлэх үйлчилгээд илгээгдэхгүй.

Платформын өгөгдөл D1 дээр байна, хуудас ба API-үүд нь Cloudflare дээр Hono ба TypeScript-ээр бүтээгдсэн, интерфейс нь Tailwind CSS-г ашигладаг. Шууд шинэчлэлтүүд SSE ба polling-аар ирнэ.

Мэргэжилтнүүдэд

Ажиллах цаг: Cloudflare Pages/Workers with Hono 4 on TypeScript. D1 (SQLite) нь өгөгдлийн сан. Vite нь Worker bundle-ийг бүтээдэг, 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-д бүртгэнэ (өрсөлдөөний дагуу, дараалал байгаа ба байтын хязгаартай), түүнийг upload хийдэг, GET /verify-д баталгаажуулж ба POST /receipt-д мэдэгдэнэ. Тоглох нь GET /api/chunks/playlist/:id-с уншина, одоогийн дуусгах алхам нь VOD-г үүсгэнэ.

Татаж авалт: @ffmpeg/core 0.12.10 нь өөрийн дээр ажиллуулах браузерийн ажилтандаа MP4 хөрвүүлэлтийг ажиллуулдаг, MP4-тай нийцтэй байгаа бичлэгүүдийн хувьд бүтэцлэлтэй remux замтай. Хөгжил ба санах ойн хязгаарууд нь клиентийн үйлчилгээнд хянагдана.

Бодит цагийн: GET /api/sse-с дамжуулагдсан SSE ба HTTP polling-ээр дамжуулсан мэдээлэл ирнэ; үйлдвэрлэлийн замд WebSocket хэрэглэгдэхгүй.

Чанар: Vitest нь unit ба UI гэрээг хамарч, Playwright нь end-to-end browser урсгалуудыг хамардаг. Markdown баримтуудыг marked-тай render хийдэг, PostCSS нь Autoprefixer-тай нэгдэн CSS pipeline-г дуусгана.

Энх сангийн stack

  • Cloudflare Pages / Workers Хостинг ба серверийн ажиллах цаг
  • Cloudflare D1 (SQLite) Аппликейшн өгөгдлийн сан
  • Hono 4 HTTP замууд, хуудас ба API
  • TypeScript 5 Сервер ба клиентийн төрөлтэй эх код
  • Tailwind CSS 4 + PostCSS + Autoprefixer Интерфейсын загварчлал ба CSS pipeline
  • Vite 7 + esbuild Worker bundle болон browser entry point
  • 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 хөгжүүлэлт болон тараалт
  • SSE + HTTP polling Медиа замаас гаднах амд шинэчлэл

Жагсаалт package.json болон репозиторид байгаагаар хязгаарлагдсан. Энэ нь техникийн тайлбар бөгөөд хамтарсан эсвэл дэмжлэгийн нэгэн хэлбэр биш юм.

Гарын авлагын төвд буцах