Giới thiệu dự án

Sự bùng nổ của cuộc cách mạng công nghiệp 4.0 cùng tác động sâu sắc từ đại dịch COVID-19 đã tạo ra bước ngoặt mang tính chuyển đổi số toàn diện trong lĩnh vực giáo dục (EdTech). Theo các báo cáo thị trường giáo dục trực tuyến toàn cầu, quy mô thị trường E-Learning đạt mức tăng trưởng kép hàng năm (CAGR) trên 17.5% trong giai đoạn 2020–2025. Tuy nhiên, phương thức giáo dục truyền thống và các hệ thống dạy học trực tuyến sơ khai đang bộc lộ nhiều điểm nghẽn nghiêm trọng: chi phí vận hành cơ sở vật chất đắt đỏ, rào cản địa lý và hạn chế tiếp cận giảng viên chất lượng cao.

+-------------------------------------------------------------------------+
|                              PAIN POINTS                                |
|  - Video thu sẵn (Udemy, Coursera): Tương tác 1 chiều, thụ động         |
|  - Phần mềm bên thứ 3 (Zoom, Teams): Phụ thuộc app, chi phí license cao |
|  - Lớp học đông người: Kiến thức bị loãng, thiếu cá nhân hóa            |
+-------------------------------------------------------------------------+
                                    │
                                    ▼
+-------------------------------------------------------------------------+
|                           GIẢI PHÁP ĐỀ XUẤT                             |
|  Nền tảng E-Learning tích hợp WebRTC Web Conference 1-kèm-1 trực tiếp    |
|  trên trình duyệt, không cài đặt plugin, độ trễ thấp (< 150ms)          |
+-------------------------------------------------------------------------+

Đồ án khóa luận "Xây dựng hệ thống dạy và học trực tuyến sử dụng WebRTC" (Online Teaching and Learning System Using WebRTC) được thực hiện bởi nhóm tác giả Nguyễn Kim ThảoNguyễn Phi Yến dưới sự hướng dẫn của ThS. Mai Xuân Hùng tại Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM (UIT).

Mục tiêu dự án

  1. Nghiên cứu chuyên sâu giao thức WebRTC (Web Real-Time Communication): Phân tích kiến trúc P2P (Peer-to-Peer), cơ chế Signaling và đánh giá hiệu năng giữa hai mô hình Media Server phổ biến: MCU (Multipoint Controller Unit) và SFU (Selective Forwarding Unit).
  2. Thiết kế và phát triển nền tảng E-Learning toàn diện: Xây dựng kiến trúc Single Page Application (SPA) trên nền ReactJS kết hợp hệ thống Backend RESTful API bằng Java và cơ sở dữ liệu quan hệ MySQL.
  3. Tích hợp tính năng Web Conference trực tiếp trên nền Web: Cho phép tương tác âm thanh (Audio), hình ảnh (Video HD) và truyền dữ liệu thời gian thực không cần cài đặt phần mềm hay plugin bên thứ ba.
  4. Triển khai thực tế trên môi trường đám mây: Đóng gói và phát hành ứng dụng lên nền tảng Heroku PaaS, đáp ứng kiểm thử tải và bảo đảm tính sẵn sàng cao.

Phạm vi và giới hạn

  • Đối tượng phục vụ: Giảng viên/gia sư có nhu cầu mở lớp, chia sẻ chuyên môn và học viên cần tìm kiếm khóa học theo hình thức dạy – học tương tác 1-kèm-1 trực tuyến.
  • Phạm vi kỹ thuật: Hệ thống tập trung tối ưu hóa kết nối P2P thời gian thực giữa 1 người dạy và 1 người học, hỗ trợ đầy đủ các tính năng: gọi video, chia sẻ màn hình (Screen Sharing), quản lý lịch học, đăng ký lớp, đánh giá chất lượng và quản trị người dùng.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thị trường cho thấy các nền tảng E-Learning hiện nay tồn tại nhiều khoảng trống về tính tương tác và mức độ tích hợp:

Tiêu chí so sánh Cambly Udemy / Coursera Google Classroom + Meet Hệ thống WebRTC E-Learning (UIT)
Hình thức truyền tải Video Call 1-1 Video thu sẵn (VOD) Gọi nhóm / Giao bài tập Video Call 1-1 P2P + Quản lý lớp
Mô hình học tập Giao tiếp ngôn ngữ Tự học thụ động Lớp học truyền thống Đa dạng chủ đề, 1-kèm-1 tương tác
Cài đặt môi trường Web / Mobile App Web / Mobile App Cần tài khoản Workspace Trực tiếp trên trình duyệt Web (No Plugin)
Chi phí triển khai Rất cao Phí theo khóa học Phí gói doanh nghiệp/trường học Tối ưu mã nguồn mở, chi phí hạ tầng thấp
Tùy biến lịch học & Gia sư Giới hạn giáo viên bản ngữ Không hỗ trợ Phụ thuộc trường học Tự do chọn gia sư, kiểm tra trùng lịch

Phân loại yêu cầu người dùng theo mô hình MoSCoW

┌────────────────────────────────────────────────────────────────────────┐
│                              MOSCOW MATRIX                             │
├───────────────────────────────────┬────────────────────────────────────┤
│ MUST HAVE (Bắt buộc)              │ SHOULD HAVE (Nên có)               │
│ - Gọi video HD & thoại 2 chiều    │ - Kiểm tra xung đột lịch tự động   │
│ - Chia sẻ màn hình (Screen Share) │ - Đánh giá xếp hạng sao gia sư     │
│ - Đăng ký, đăng nhập bảo mật      │ - Bộ lọc tìm kiếm khóa học nâng cao│
│ - Quản lý lớp học, lịch dạy/học   │                                    │
├───────────────────────────────────┼────────────────────────────────────┤
│ COULD HAVE (Có thể phát triển)    │ WON'T HAVE (Chưa hỗ trợ đợt này)   │
│ - Bảng vẽ tương tác (Whiteboard)  │ - Xử lý stream nhóm lớn (>50 peer) │
│ - Chatbox P2P qua DataChannel     │ - Tích hợp cổng thanh toán trực tiếp│
└───────────────────────────────────┴────────────────────────────────────┘

Thiết kế hệ thống

Kiến trúc hệ thống tuân theo mô hình 3 lớp phân tán kết hợp truyền thông P2P thời gian thực:

flowchart TB
    subgraph Client["Client Tier (Web Browser)"]
        A["ReactJS Frontend Client (User A)"]
        B["ReactJS Frontend Client (User B)"]
    end

    subgraph AppServer["Application & Signaling Tier"]
        C["Spring Boot Java Backend (RESTful APIs)"]
        D["Signaling Server (WebSockets / HTTP)"]
    end

    subgraph DataServer["Database Tier"]
        E[("MySQL 8.0 Database")]
    end

    A <-->|HTTP / REST API| C
    B <-->|HTTP / REST API| C
    C <-->|JPA / JDBC| E

    A <-->|SDP Offer / Answer & ICE Candidates| D
    B <-->|SDP Offer / Answer & ICE Candidates| D

    A <===>|WebRTC P2P Direct Stream: Audio, Video, Screen Share via SRTP/DTLS| B

Technology Stack và phiên bản cụ thể

  • Client-side: ReactJS v17.0.2 (Single Page Application, React Hooks, Axios, WebRTC W3C Standard APIs).
  • Server-side: Java Platform Standard Edition 8 (Java SE 8), framework Spring Boot v2.5.x phát triển RESTful APIs.
  • Database Management System: MySQL Community Server v8.0, thiết kế chuẩn hóa quan hệ (ERD).
  • Real-time Engine: WebRTC Native APIs (RTCPeerConnection, MediaStream, RTCDataChannel), WebSocket Signaling.
  • Infrastructure & Cloud: Heroku Cloud Application Platform, ClearDB MySQL Addon.

Thiết kế cơ sở dữ liệu quan hệ (ERD Schema)

-- Thiết kế lược đồ bảng chính trong hệ thống E-Learning
CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    avatar_url VARCHAR(500),
    role ENUM('STUDENT', 'TUTOR', 'ADMIN') DEFAULT 'STUDENT',
    bio TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE courses (
    course_id INT AUTO_INCREMENT PRIMARY KEY,
    tutor_id INT NOT NULL,
    topic_id INT NOT NULL,
    course_name VARCHAR(255) NOT NULL,
    description TEXT,
    FOREIGN KEY (tutor_id) REFERENCES users(user_id) ON DELETE CASCADE
);

CREATE TABLE classes (
    class_id INT AUTO_INCREMENT PRIMARY KEY,
    course_id INT NOT NULL,
    class_name VARCHAR(255) NOT NULL,
    start_time DATETIME NOT NULL,
    end_time DATETIME NOT NULL,
    max_capacity INT DEFAULT 1,
    status ENUM('PENDING', 'OPEN', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED') DEFAULT 'OPEN',
    FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
);

CREATE TABLE enrollments (
    enrollment_id INT AUTO_INCREMENT PRIMARY KEY,
    class_id INT NOT NULL,
    student_id INT NOT NULL,
    enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status ENUM('REGISTERED', 'CANCELLED') DEFAULT 'REGISTERED',
    FOREIGN KEY (class_id) REFERENCES classes(class_id),
    FOREIGN KEY (student_id) REFERENCES users(user_id)
);

Đặc tả API Endpoints chuẩn RESTful

Phương thức Endpoint Mô tả chức năng Quyền hạn
POST /api/v1/auth/register Đăng ký tài khoản mới (Mã hóa mật khẩu) Public
POST /api/v1/auth/login Xác thực đăng nhập, cấp phiên làm việc Public
GET /api/v1/classes/search Tìm kiếm lớp học theo từ khóa, chủ đề, gia sư User
POST /api/v1/classes/{id}/enroll Đăng ký tham gia lớp học (Validate trùng lịch) Student
POST /api/v1/classes Tạo mới lớp dạy học Tutor
POST /api/v1/reviews Đánh giá sao và gửi nhận xét lớp học Student

Methodology

Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile Scrum) với chu kỳ Sprint 2 tuần/lần, kéo dài trong 16 tuần:

[Tuần 1 - 3]: Khảo sát, thu thập yêu cầu & Thiết kế ERD / Use Case
      │
      ▼
[Tuần 4 - 7]: Phát triển Core Backend (Java RESTful API) & Authentication
      │
      ▼
[Tuần 8 - 11]: Xây dựng WebRTC Video Engine & Giao diện ReactJS SPA
      │
      ▼
[Tuần 12 - 14]: Tích hợp hệ thống, Kiểm thử tải & Đánh giá hiệu năng P2P
      │
      ▼
[Tuần 15 - 16]: Triển khai Heroku Cloud, Tối ưu hóa & Nghiệm thu đồ án

Implementation và kết quả

Development Process

1. Xử lý khởi tạo luồng truyền thông WebRTC phía Client (ReactJS)

Hệ thống tận dụng trực tiếp API navigator.mediaDevices.getUserMedia để trích xuất tín hiệu Video/Audio từ phần cứng và thiết lập kết nối mã hóa qua RTCPeerConnection:

// Khởi tạo WebRTC Peer Connection và quản lý Local/Remote Stream
import React, { useEffect, useRef, useState } from 'react';

const VideoClassRoom = ({ roomId, signalingSocket, isInitiator }) => {
  const localVideoRef = useRef(null);
  const remoteVideoRef = useRef(null);
  const peerConnectionRef = useRef(null);
  const [isScreenSharing, setIsScreenSharing] = useState(false);

  const rtcConfiguration = {
    iceServers: [
      { urls: 'stun:stun.l.google.com:19302' }, // STUN server giải quyết NAT Traversal
    ]
  };

  useEffect(() => {
    const initCall = async () => {
      // 1. Thu thập Media Stream từ Camera và Microphone
      const localStream = await navigator.mediaDevices.getUserMedia({
        video: { width: 1280, height: 720, frameRate: 30 },
        audio: { echoCancellation: true, noiseSuppression: true }
      });
      if (localVideoRef.current) localVideoRef.current.srcObject = localStream;

      // 2. Khởi tạo đối tượng RTCPeerConnection
      const pc = new RTCPeerConnection(rtcConfiguration);
      peerConnectionRef.current = pc;

      // Gắn các track media vào kết nối P2P
      localStream.getTracks().forEach(track => pc.addTrack(track, localStream));

      // Xử lý sự kiện nhận Remote Stream từ phía đối tác
      pc.ontrack = (event) => {
        if (remoteVideoRef.current && event.streams[0]) {
          remoteVideoRef.current.srcObject = event.streams[0];
        }
      };

      // Xử lý gửi ICE Candidate qua Signaling Server
      pc.onicecandidate = (event) => {
        if (event.candidate) {
          signalingSocket.send(JSON.stringify({
            type: 'candidate',
            candidate: event.candidate,
            roomId: roomId
          }));
        }
      };

      // 3. Nếu là bên khởi tạo cuộc gọi, tạo SDP Offer
      if (isInitiator) {
        const offer = await pc.createOffer();
        await pc.setLocalDescription(offer);
        signalingSocket.send(JSON.stringify({
          type: 'offer',
          sdp: offer,
          roomId: roomId
        }));
      }
    };

    initCall();
    return () => {
      if (peerConnectionRef.current) peerConnectionRef.current.close();
    };
  }, [roomId]);

  // Tính năng chia sẻ màn hình (Screen Sharing API)
  const handleToggleScreenShare = async () => {
    try {
      if (!isScreenSharing) {
        const screenStream = await navigator.mediaDevices.getDisplayMedia({ video: true });
        const screenTrack = screenStream.getVideoTracks()[0];
        
        const sender = peerConnectionRef.current
          .getSenders()
          .find(s => s.track.kind === 'video');
        
        if (sender) sender.replaceTrack(screenTrack);
        
        screenTrack.onended = () => {
          // Khôi phục lại Camera Track khi dừng chia sẻ
          const camTrack = localVideoRef.current.srcObject.getVideoTracks()[0];
          if (sender) sender.replaceTrack(camTrack);
          setIsScreenSharing(false);
        };
        setIsScreenSharing(true);
      }
    } catch (err) {
      console.error("Lỗi kích hoạt Screen Share:", err);
    }
  };

  return (
    <div className="webrtc-classroom-container">
      <video ref={localVideoRef} autoPlay playsInline muted className="local-video" />
      <video ref={remoteVideoRef} autoPlay playsInline className="remote-video" />
      <div className="control-bar">
        <button onClick={handleToggleScreenShare}>
          {isScreenSharing ? "Dừng chia sẻ" : "Chia sẻ màn hình"}
        </button>
      </div>
    </div>
  );
};

export default VideoClassRoom;

2. Xây dựng Controller xử lý logic đăng ký lớp phía Backend Java

package vn.edu.uit.elearning.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import vn.edu.uit.elearning.service.ClassService;
import vn.edu.uit.elearning.dto.EnrollmentRequest;
import vn.edu.uit.elearning.dto.ApiResponse;

@RestController
@RequestMapping("/api/v1/classes")
@CrossOrigin(origins = "*")
public class ClassEnrollmentController {

    @Autowired
    private ClassService classService;

    @PostMapping("/{classId}/enroll")
    public ResponseEntity<ApiResponse> enrollClass(
            @PathVariable("classId") Long classId,
            @RequestBody EnrollmentRequest request) {
        
        // Kiểm tra tính hợp lệ và xung đột lịch dạy/học
        boolean isConflict = classService.checkScheduleConflict(request.getStudentId(), classId);
        if (isConflict) {
            return ResponseEntity.badRequest().body(
                new ApiResponse(false, "Lỗi: Trùng lịch với buổi học hoặc buổi dạy khác của bạn!")
            );
        }

        boolean success = classService.registerStudentToClass(request.getStudentId(), classId);
        if (success) {
            return ResponseEntity.ok(new ApiResponse(true, "Đăng ký tham gia lớp học thành công."));
        } else {
            return ResponseEntity.status(500).body(new ApiResponse(false, "Không thể hoàn tất đăng ký."));
        }
    }
}

Testing và validation

Quá trình kiểm thử bao gồm kiểm thử tự động đơn vị (Unit Test), kiểm thử tích hợp (Integration Test) và kiểm tra hiệu năng băng thông thực tế:

Hạng mục kiểm thử Kịch bản thực hiện Số lượng test cases Tỷ lệ Passed (%)
Authentication & Profile Đăng ký, Hash Password, Login JWT, Cập nhật Avatar 18 100%
Class & Schedule Management Tạo khóa học, Thêm lớp, Thuật toán check trùng lịch 24 100%
WebRTC Signaling & P2P SDP Exchange, ICE Candidate, Reconnection khi ngắt mạng 15 93.3%
Media Stream & Screen Share Bật/tắt Mic/Cam, Chuyển luồng Desktop Stream 12 100%
Performance Benchmark Kiểm thử băng thông WebRTC trên kết nối ADSL 3Mbps 8 100%

Kết quả đo đạc thông số kỹ thuật thời gian thực

Thông số đo đạc qua WebRTC Internals (Chrome 90+, Độ phân giải HD 720p @ 30fps):
- Độ trễ truyền tải trung bình (RTT Latency): 85ms - 130ms (Mạng nội địa VN).
- Băng thông tiêu thụ trung bình mỗi Peer: ~520 Kbps (Video + Audio Opus).
- Tiêu tốn CPU máy trạm (Client CPU Overhead): 8% - 14% (Core i5 Gen 8).
- Tải CPU phía Backend Server: < 2% (Do dữ liệu Media đi trực tiếp P2P, không qua Server).

Đổi mới và đóng góp

  1. Ứng dụng giải pháp P2P không phụ thuộc Media Server tốn kém: Khác với các hệ thống truyền thống sử dụng Media Server tập trung (MCU giải mã và trộn luồng gây tốn tài nguyên máy chủ khủng khiếp), đồ án đã áp dụng tối đa cơ chế P2P trực tiếp giữa 2 trình duyệt cho mô hình 1-kèm-1.

$$\text{Tổng luồng trên Server (MCU)} = 2n \quad \text{vs} \quad \text{Tổng luồng trên Server (P2P Mesh)} = 0 \text{ (Chỉ tốn băng thông Signaling)}$$

  1. Giảm thiểu độ trễ và bảo toàn chất lượng gốc của Video: Do loại bỏ công đoạn mã hóa/giải mã trung gian (Transcoding), độ trễ âm thanh và hình ảnh giảm hơn 65% so với giao thức RTMP/HLS truyền thống, đạt chuẩn phản hồi tức thời dưới 150ms.
  2. Mô hình tích hợp khép kín từ Quản lý đến Giảng dạy: Hệ thống không chỉ dừng lại ở chức năng gọi video đơn thuần mà tích hợp hoàn chỉnh 9 phân hệ chức năng: quản lý khóa học, kiểm soát lịch dạy/học chống trùng giờ, tìm kiếm gia sư, đánh giá minh bạch sau buổi học.

Ứng dụng thực tế và triển khai

Hướng dẫn triển khai hệ thống (Deployment Guide)

# 1. Triển khai Cơ sở dữ liệu MySQL trên Cloud
# Khởi tạo Schema và phân quyền người dùng
mysql -u admin -p -h <cloud_db_host> elearning_db < schema.sql

# 2. Build & Deploy Backend (Spring Boot Java) lên Heroku
git clone https://github.com/uit-elearning/backend-java.git
cd backend-java
heroku create uit-elearning-api
heroku config:set SPRING_DATASOURCE_URL=jdbc:mysql://<cloud_db_host>/elearning_db
git push heroku main

# 3. Build & Deploy Frontend (ReactJS SPA)
cd ../frontend-react
npm install
npm run build
# Deploy thư mục build lên nền tảng tĩnh (Netlify/Vercel hoặc Heroku Static)
+-------------------------------------------------------------------------+
|                        PHÂN TÍCH HIỆU QUẢ KINH TẾ (ROI)                 |
|  - Chi phí Server Video Server (MCU/Kurento): ~150 - 300 USD/tháng      |
|  - Chi phí hệ thống WebRTC P2P (Signaling nhẹ): ~7 - 15 USD/tháng       |
|  => Tiết kiệm hơn 90% chi phí hạ tầng máy chủ trong giai đoạn khởi tạo  |
+-------------------------------------------------------------------------+

Hạn chế và hướng phát triển

graph LR
    subgraph Current["Hiện trạng đồ án"]
        A["Mô hình WebRTC P2P 1-1"] --> B["Băng thông nhẹ, tối ưu gia sư 1-kèm-1"]
    end
    subgraph Limitation["Hạn chế"]
        B -.-> C["Không mở rộng được lớp học nhóm > 5 người (Nghẽn mạng máy trạm)"]
    end
    subgraph Future["Hướng phát triển tiếp theo"]
        C ==> D["Tích hợp SFU (Selective Forwarding Unit) như Mediasoup / Janus"]
        D ==> E["Ứng dụng AI / Computer Vision điểm danh & đánh giá độ tập trung"]
        D ==> F["Phát triển Native Mobile App (React Native / WebRTC Mobile SDK)"]
    end

Đối tượng hưởng lợi

  • Học viên (Students): Tiếp cận môi trường học tập 1-kèm-1 chất lượng cao, linh hoạt thời gian, tương tác trực tiếp với gia sư mà không lo độ trễ hay tốn kém chi phí di chuyển.
  • Giảng viên / Gia sư (Tutors): Dễ dàng xây dựng thương hiệu cá nhân, mở lớp học trực tuyến riêng biệt mà không phải chia sẻ phần trăm phí nền tảng cao cho các dịch vụ trung gian.
  • Lập trình viên & Kỹ sư phần mềm (Developers): Tài liệu mẫu chi tiết về cách thức triển khai WebRTC APIs, cơ chế bắt tay Signaling, và phương pháp kết hợp ReactJS với Spring Boot Java.
  • Cộng đồng nghiên cứu (Researchers): Cung cấp nguồn tham khảo thực nghiệm chuẩn mực về so sánh kiến trúc P2P, MCU và SFU trong bài toán truyền thông thời gian thực trên Web.

Câu hỏi thường gặp

1. Yêu cầu cấu hình kỹ thuật tối thiểu để triển khai và sử dụng hệ thống là gì?

Phía máy chủ chỉ yêu cầu cấu hình cơ bản (1 vCPU, 1GB RAM) do chỉ đảm nhận xử lý RESTful API và Signaling WebSocket. Phía người dùng chỉ cần thiết bị có Camera, Microphone và trình duyệt hiện đại hỗ trợ HTML5/WebRTC (Google Chrome 29+, Mozilla Firefox 22+, Opera 18+, Edge) với đường truyền mạng tối thiểu 500 Kbps.

2. Giới hạn khả năng mở rộng (Scalability) của kết nối P2P và giải pháp khắc phục?

Mô hình P2P thuần túy chỉ tối ưu cho các lớp học 1-1 hoặc nhóm tối đa 3–4 người. Khi số lượng học viên ($n$) tăng lên, số luồng tải mạng tại mỗi máy trạm tăng theo cấp số nhân $n(n-1)$, gây quá tải đường truyền gia đình. Để mở rộng lên lớp học hàng chục người, hệ thống cần tích hợp thêm Media Server theo mô hình SFU (Selective Forwarding Unit).

3. Hệ thống xử lý thế nào khi người dùng bị chặn bởi tường lửa hoặc mạng NAT đối xứng (Symmetric NAT)?

Hệ thống hiện tại tích hợp Google Public STUN Server để định danh địa chỉ IP Public. Trong môi trường doanh nghiệp có Firewall/NAT phức tạp, giải pháp chuẩn hóa tiếp theo là bổ sung TURN Server (Traversal Using Relays around NAT) đóng vai trò trung chuyển gói tin khi không thể kết nối P2P trực tiếp.

4. Dữ liệu hình ảnh và âm thanh trong phòng học có được bảo mật không?

Có. Toàn bộ luồng dữ liệu truyền thông qua WebRTC bắt buộc phải được mã hóa theo các tiêu chuẩn bảo mật cấp cao: DTLS (Datagram Transport Layer Security) cho quá trình trao đổi khóa và SRTP (Secure Real-time Transport Protocol) cho toàn bộ luồng Audio/Video, chống triệt để tấn công nghe lén (Man-in-the-middle).

5. Chi phí ước tính và thời gian hoàn vốn khi đưa đồ án vào thương mại hóa?

Nhờ tận dụng cơ chế P2P giảm tải máy chủ, chi phí hạ tầng Cloud trong năm đầu tiên cho 1,000 người dùng thường xuyên ước tính chỉ dao động từ 15–30 USD/tháng (chủ yếu là Database và Web Server). Điểm hòa vốn (ROI) có thể đạt được trong vòng 3–6 tháng khi áp dụng mức phí hoa hồng nhỏ trên mỗi buổi học thành công.


Kết luận

Đồ án "Xây dựng hệ thống dạy và học trực tuyến sử dụng WebRTC" của sinh viên Nguyễn Kim Thảo và Nguyễn Phi Yến (Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM) đã giải quyết thành công bài toán đào tạo tương tác trực tuyến 1-kèm-1. Bằng cách làm chủ công nghệ WebRTC kết hợp ngăn xếp công nghệ vững chắc ReactJS, Java và MySQL, nhóm nghiên cứu đã xây dựng một nền tảng E-Learning hoạt động ổn định, loại bỏ hoàn toàn nhu cầu cài đặt phần mềm bên ngoài, mang lại trải nghiệm học tập mượt mà và tối ưu hóa chi phí vận hành. Đây là tiền đề kỹ thuật vững chắc để tiếp tục mở rộng thêm các tính năng SFU Server và tích hợp trí tuệ nhân tạo trong tương lai.