1 điểm bởi previewapp 7 giờ trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Tôi tạo ra dịch vụ này với ý tưởng không phải gặp những video do thuật toán đề xuất, mà là gặp một video “do ai đó tự tay chọn rồi gửi đi”. Đây là concept thuyền buồm ngày trước.

Khi một người dùng ẩn danh thả một liên kết YouTube kèm một dòng thư bằng “thuyền buồm”, một người dùng ẩn danh khác có thể nhấp vào đó để mở phòng xem 1:1. Trình phát YouTube của hai người được đồng bộ về cùng một cảnh, rồi họ vừa xem cùng nhau vừa trò chuyện ẩn danh. Ngay khoảnh khắc một trong hai người rời đi, toàn bộ phòng và đoạn chat cũng biến mất.

Ban đầu, concept là sau khi video kết thúc thì phòng sẽ nổ tung sau 3 phút đếm ngược, nhưng khi dùng thử thực tế, nếu gặp đúng người hợp gu thì việc nói “xem thêm một video nữa” lại rất tự nhiên — nên tôi đổi sang hướng giữ nguyên phòng ngay cả khi video kết thúc, và để chủ phòng thay video rồi xem tiếp.

Những phần thú vị / vất vả khi làm:

  • Đồng bộ: server giữ mốc thời gian chuẩn (hiệu chỉnh RTT), bỏ qua drift trong phạm vi 0,5 giây, nếu lệch trong 2 giây thì dùng tốc độ phát 0.95~1.05x để bắt kịp mà người dùng không nhận ra, còn lớn hơn mức đó thì cưỡng chế hiệu chỉnh bằng seekTo. Khi đang phát quảng cáo thì dừng hiệu chỉnh.
  • Phần thật sự cực là live stream. Với live, seekTo chỉ hoạt động trong cửa sổ DVR, nhưng cửa sổ DVR của hai người xem lại khác nhau, nên phải “dịch” ý định “chủ phòng đang ở live edge” sang theo cửa sổ của người kia. Còn có cả vòng lặp echo vô hạn loading→play→loading nữa — nhìn lại commit log thì riêng phần fix đồng bộ live đã có 7 commit.
  • Race khi matching: tôi chặn việc nhiều người cùng lúc leo lên một chiếc thuyền buồm bằng khóa nguyên tử Redis Lua script (test 5 người cùng join thì xác nhận chỉ 1 người thắng).
  • Với video chặn embed (lỗi 153), IFrame API không bắn onError, nên màn hình chỉ đen sì; tôi dùng watchdog phát 8 giây để phát hiện và hiện thông báo “không thể phát”.
  • Vì là ẩn danh 1:1 nên tôi đặt khá nhiều lớp an toàn: sanitize toàn bộ chat ở phía server, tự động che thông tin liên lạc bên ngoài, AI moderation + chặn theo số lần bị báo cáo tích lũy, và nếu phát hiện từ khóa khủng hoảng thì hiển thị hướng dẫn gọi điện tư vấn.

Stack: Next.js 15 / Fastify 5 / Socket.io / Redis 7 / Postgres 16, trên di động là Expo(RN)

Có thể trải nghiệm ngay mà không cần đăng ký. Tuần này app iOS cũng đã lên App Store: https://apps.apple.com/kr/app/float/id6777661839
Mọi phản hồi đều được chào đón.

Chưa có bình luận nào.

Chưa có bình luận nào.