Streaming Video Mã Hoá trên AVCaption
Mỗi video upload lên AVCaption đều được mã hoá trước khi tới edge CDN. Việc giải mã khi phát diễn ra ở phía client trong trình duyệt qua Web Crypto API, và khoá được gửi qua signed URL ngắn hạn ràng buộc với domain của bạn.
Trang này đi qua từng bước thực sự đang xảy ra.
Pipeline mã hoá
Khi bạn upload một video lên AVCaption:
- Mã hoá GPU — file nguồn được mã hoá thành các biến thể HLS adaptive bitrate (360p, 540p, 720p, 1080p, 4K) bằng NVIDIA NVENC.
- Cắt segment — mỗi biến thể được cắt thành segment HLS, thường mỗi cái 6 giây.
- Mã hoá theo lô — segment được nhóm thành lô 10 cái (60 giây phát). Mỗi lô nhận một khoá AES-128 mới được sinh.
- Upload CDN — segment đã mã hoá được upload lên Cloudflare R2 và phục vụ qua CF CDN toàn cầu với cache mạnh.
- Key vault — khoá mã hoá được lưu riêng, không bao giờ ở CDN, không bao giờ chung với segment.
Khi người xem nhấn play:
- Yêu cầu token — player yêu cầu playback token từ
/api/stream/{embed_token}/token. Server xác thực embed token, domain yêu cầu (đối chiếu whitelist), và rate limit. - Master playlist — player tải HLS master
.m3u8và chọn biến thể theo băng thông. - Lấy khoá theo lô — với mỗi lô segment cần thiết, player yêu cầu khoá tương ứng từ
/api/stream/{embed_token}/key/{batch}. Mỗi URL khoá được ký bằng playback token và chỉ có hiệu lực trong phiên đó. - Giải mã phía client — Web Crypto API của trình duyệt giải mã segment trong bộ nhớ và đưa vào element video. Khoá không lưu xuống đĩa.
Vì sao đa khoá quan trọng
Mã hoá đơn khoá (mô hình đơn giản nhiều nền tảng dùng) nghĩa là: một video, một khoá, một URL. Nếu URL đó rò rỉ, toàn bộ video giải mã được mãi mãi.
Mã hoá đa khoá theo lô nghĩa là: một video, nhiều khoá, nhiều URL ngắn hạn. Nếu một URL rò rỉ, chỉ lô đó (khoảng 60 giây phim) bị lộ. Lô tiếp theo cần một yêu cầu khoá mới, mà người làm rò rỉ không thể tạo nếu không có playback token mới.
Việc này nâng cao chi phí vi phạm đáng kể. Công cụ rip tự động chạy được với nền tảng đơn khoá (biến thể yt-dlp, downloader extension trình duyệt) phải được dựng lại cho từng mục tiêu đa khoá — và phần lớn không bận tâm.
Signed playback token
Mỗi embed token có metadata:
- Origin được phép (whitelist domain của bạn)
- Định danh người xem tuỳ chọn (dùng cho watermark động ở Enterprise)
- Cửa sổ hết hạn (mặc định 24 giờ)
- Gợi ý rate limit
Khoá ký nằm hoàn toàn ở server. Token giả không qua được xác thực lúc gửi yêu cầu.
Nếu bạn phục vụ nội dung gated (chỉ thành viên, truy cập khoá học), ứng dụng của bạn sinh embed token mới cho mỗi phiên đã xác thực, để token hết hạn khi phiên hết hạn. REST API của AVCaption mở chức năng sinh embed token cho khách Enterprise.
Whitelist domain
Mặc định, mọi iframe nhúng đều chỉ chấp nhận hotlink — trình duyệt gửi header Referer với origin đang nhúng, và stream API của AVCaption xác thực origin đó với whitelist trước khi phát hành master playlist.
Với gói Premium và Enterprise bạn có thể chỉ định chính xác domain nào được phép. Bất kỳ ai nhúng iframe trên domain ngoài whitelist nhận 403 ngay lập tức.
Đây là lớp chặn được phần lớn vi phạm: scraper lấy URL iframe và nhúng lên trang khác chỉ nhận 403 và player không bao giờ tải.
So với các nền tảng khác
| Cách tiếp cận | Ví dụ | Độ mạnh | Khi nào hợp |
|---|---|---|---|
| Chỉ signed URL | Wistia, đường CF Stream cơ bản | Yếu nhất — bắt được URL là giải mã được toàn bộ video | Video marketing, ít rủi ro piracy |
| AES-128 đơn khoá | Bunny Stream, đường CF Stream có mã hoá | Mạnh trước hotlink ngẫu nhiên; bắt được một cặp khoá + token là giải toàn bộ video | Content gated casual |
| AES-128 đa khoá | AVCaption | Xoay khoá theo lô — bắt được một khoá chỉ phơi ~60 giây | Content trả phí tự sản xuất |
| Widevine / PlayReady DRM | VdoCipher, JW Player Enterprise | Mạnh nhất — license server gắn phần cứng; bắt buộc cho content cấp phép studio | DRM bắt buộc theo hợp đồng |
Với khoá học, hướng dẫn gated, nội dung membership trả phí, đào tạo B2B, và video nội bộ — AES-128 đa khoá là đánh đổi đúng. DRM thừa, đơn khoá quá mỏng. Phân tích đầy đủ DRM vs mã hoá đã có sẵn.
Bắt đầu
Muốn xem segment mã hoá hoạt động? Upload một video test — 60 giây đầu là đủ. Mở DevTools, xem các request .m3u8 và .m4s bay, và thử yt-dlp chạm vào URL embed: segment tải về dạng đã mã hoá và không phát được nếu không có khoá xoay theo lô. Gói free ship đủ stack đa khoá trên mọi video; mã hoá bật mặc định, không cần toggle.