Chuyển đến nội dung

Widevine / EME (DRM)

Phát video được bảo vệ bằng DRM, và khớp với bề mặt EME của một Chrome thật, bằng Widevine CDM, được tải về lúc chạy đúng theo cách một Chrome gốc nhận nó. Từ SDK 0.48.0, tính năng này bật sẵn cho các lần khởi chạy có giấy phép.

Vì sao SDK tải nó về

Clearcote được build sẵn phần hạ tầng EME/Widevine (enable_widevine) nhưng không kèm CDM độc quyền của Google — thứ mà Clearcote không phân phối lại, và cũng không thể đưa vào bản build mã nguồn mở. Không có CDM, navigator.requestMediaKeySystemAccess('com.widevine.alpha') sẽ bị reject, vừa là lỗi DRM không chạy được vừa là một dấu hiệu lộ về tính nhất quán (Chrome thật sẽ resolve lời gọi này). Vì vậy SDK tải CDM về trên máy của bạn, từ component server của chính Google; Clearcote không bao giờ phân phối nó.

Bật sẵn cho các lần khởi chạy có giấy phép

Khi tìm thấy khóa giấy phép (tùy chọn license_key, CLEARCOTE_LICENSE_KEY hoặc ~/.clearcote/license.key) và trình duyệt là bản có giấy phép 154 r32 trở lên, mọi lần khởi chạy local đều bật Widevine: launch(), persistent context, serve(), API async của Python và các kiểu khởi chạy của .NET. Không cần truyền gì. Lần khởi chạy đầu tiên tải CDM về; các lần sau dùng ngay bản đã cache.

  • Tắt nó bằng widevine=False (Node { widevine: false }, .NET Widevine = false) hoặc CLEARCOTE_WIDEVINE=0.
  • Bật nó khi không có khóa (bản build mở) bằng widevine=True hoặc CLEARCOTE_WIDEVINE=1. Một lần khởi chạy không có khóa vẫn không có Widevine trừ khi bạn yêu cầu, như trước.
  • Không bao giờ chặn một lần khởi chạy. Mặc định chờ CDM tối đa 15 giây (CLEARCOTE_WIDEVINE_TIMEOUT_SECONDS); nếu không nạp được, trình duyệt khởi động mà không có nó và SDK cảnh báo một lần.
python
from clearcote import launch

browser = launch()                      # licence key found: Widevine is on
page = browser.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') resolves

plain = launch(widevine=False)          # or CLEARCOTE_WIDEVINE=0
javascript
import { launch, fetchWidevine } from "clearcote";

// optional: pre-fetch the CDM ahead of time (cached under ~/.clearcote/WidevineCdm)
await fetchWidevine();

const browser = await launch();                      // licence key found: Widevine is on
const plain = await launch({ widevine: false });     // or CLEARCOTE_WIDEVINE=0

Cách hoạt động & giới hạn

  • Tải một lần, có cache. CDM được tải từ component server của Google, kiểm tra SHA-256 (thiếu hash là bị từ chối: đây là một thư viện native), và được cache tại ~/.clearcote/WidevineCdm (đổi vị trí bằng CLEARCOTE_WIDEVINE_DIR). Các lần khởi chạy cùng lúc dùng chung một lần tải. Tải trước bằng fetch_widevine() / fetchWidevine().
  • Mỗi ngày một lần kiểm tra phiên bản. CDM đã cache và được kiểm tra trong 24 giờ qua sẽ được dùng mà không cần mạng; sau đó, một lần kiểm tra phiên bản được gửi tới update server của Google, trực tiếp từ máy này chứ không qua proxy của bạn. Khi offline, CDM đã cache sẽ được dùng.
  • Bản build có giấy phép 154 r32 trở lên: engine nhận --widevine-cdm-path, một thư mục CDM mà nó đăng ký khi khởi động trong mọi profile, kể cả incognito và các profile dùng một lần của Playwright. Từ SDK 0.41.0, một lần khởi chạy với widevine sẽ tự truyền switch này cho bạn, và từ 0.48.0 thì mọi lần khởi chạy có giấy phép đều làm vậy. Các bản build cũ hơn cần một profile: widevine=True với launch() bản sync hoặc một persistent context sẽ nạp CDM vào đó và để component updater đăng ký nó. Một --widevine-cdm-path=<dir> do bạn tự đặt trong args luôn được ưu tiên.
  • Python, Node và .NET (.NET từ 0.48.0: LaunchOptions.Widevine và class Widevine). Hoạt động trên Windows và Linux.
  • Docker: image chính thức bật sẵn tính năng này cho persona Windows (đặt CC_WIDEVINE=0 để tắt). Trình duyệt hosted có sẵn CDM của riêng chúng.
  • Phát lại ở mức bảo mật phần mềm (L3); bảo mật phần cứng (L1) nằm ngoài phạm vi hỗ trợ.
Hỗ trợ DRM là thêm một mảnh ghép của một danh tính nhất quán: Chrome thật trả lời truy vấn Widevine, nên một persona không trả lời được chính là một dấu hiệu lộ — và persona mặc định tự nhận là Google Chrome, bản vốn có sẵn CDM trên mọi nền tảng desktop. Xem Cơ chế phát hiện hoạt động ra sao.