Негізгі мазмұнға өту

Бөлім

Технология

Dueli-дің нақты технологиялар жиынтығы екі қабатта: қарапайым тілмен түсіндірме және инженерлік көрініс.

Бұл бет Dueli шынымен қолданатын технологияларды екі қабаттап түсіндіреді: барлығы үшін қарапайым тілде және мамандар үшін инженерлік тұрғыда. Ағымдағы код қолданбаса, ешбір технология тізімге енбейді.

Қарапайым тілде

Dueli браузерде Cloudflare-дің ғаламдық желісінде жұмыс істейді. Екі қатысушы құрылғыларының арасындағы тікелей видеошақыруда кездеседі (WebRTC peer-to-peer); желі тікелей жолды тосып қалса, TURN делдалы байланысты өткізеді.

Жарыс кезінде браузер екі камера көрінісін бір суретке біріктіріп, оны қысқа 5 секундтық бөліктермен жазады. Бөліктер жасалған сайын жүктеледі, ретімен ойнатыла алады және жарыс аяқталған соң толық қайта ойнатуға құрастырылады.

Жазылған жарыстарды MP4 файл ретінде жүктеп алуға болады. Жазбаны түрлендіру керек болса, түрлендіру келушінің браузерінде FFmpeg.wasm арқылы жүреді, сондықтан файл сыртқы түрлендіру қызметіне жіберілмейді.

Платформа деректері D1-де тұрады, беттер мен API-лер Cloudflare үстінде Hono мен TypeScript арқылы жасалған, интерфейс Tailwind CSS қолданады. Тікелей жаңартулар SSE мен сұрау салу арқылы келеді.

Инженерлер үшін

Орындау ортасы: Cloudflare Pages/Workers, TypeScript үстіндегі Hono 4. Дерекқор — 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/:id оқиды, ал бар түпкілендіру қадамы VOD жасайды.

Жүктеп алу: @ffmpeg/core 0.12.10 өздігінен орнатылған браузер жұмысшысында MP4 түрлендіру үшін жұмыс істейді, MP4-үйлесімді жазбалар үшін құрылымдық remux жолы бар. Барыс пен жад шектері клиент қызметінде басқарылады.

Нақты уақыт: GET /api/sse арқылы SSE тікелей жаңартуларды тасымалдайды, сигнал алмасу 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 Worker бумасы және браузердің кіру нүктелері
  • 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 мен репозиторийде шынымен бар нәрсемен шектеледі. Бұл техникалық сипаттама, әріптестік немесе қолдау білдіру мәлімдемесі емес.

Нұсқаулық орталығына оралу