Widevine DRM cho Chromium chạy automation
Các bản build Chromium mã nguồn mở được phát hành mà không có Widevine CDM, nên video DRM không phát được và requestMediaKeySystemAccess('com.widevine.alpha') bị reject, trong khi Chrome desktop thông thường sẽ resolve. Truyền widevine khi khởi chạy, SDK sẽ tải CDM từ component server của Google, kiểm tra và bật nó lên.
Có ở mọi gói, bật khi cần.
Một tùy chọn khởi chạy
from clearcote import launch_persistent_context
ctx = launch_persistent_context("./profile-drm", widevine=True) # fetch, verify, enable
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') now resolvesĐiểm nổi bật
Tải về theo đúng cách Chrome nhận
CDM đến từ chính component server của Google, giống cách Chrome gốc nhận nó, và mỗi phiên bản chỉ tải về một lần. Clearcote không bao giờ phân phối nó.
Xác minh trước khi dùng
File tải về được kiểm tra SHA-256, và nếu thiếu hash thì bị từ chối ngay, vì CDM là một thư viện native.
Cache và dùng lại
Được lưu trong ~/.clearcote/WidevineCdm, nên mỗi phiên bản chỉ tải một lần. Tải trước bằng fetchWidevine() để lần khởi chạy đầu tiên không phải chờ tải; mỗi lần khởi chạy vẫn gửi một lượt kiểm tra phiên bản nhanh tới Google, trực tiếp từ máy này.
Câu trả lời EME nhất quán
Chrome thật trả lời được truy vấn key system Widevine. Khi đã có CDM, Clearcote cũng vậy.
Lỗi không làm hỏng lần chạy
Nếu không tải được CDM, việc khởi chạy vẫn tiếp tục mà không có DRM thay vì thất bại.
Phát lại L3
Phát lại với mức bảo mật phần mềm (L3). L1 bảo mật bằng phần cứng nằm ngoài phạm vi.
Vì sao chỉ bật khi cần
CDM của Google là binary mã nguồn đóng. Nó không thể nằm trong bản build mở, vốn là mã nguồn mở, và Clearcote cũng không phân phối lại nó cùng bản build có giấy phép. Vì vậy trình duyệt được phát hành với phần hạ tầng EME đã biên dịch sẵn, nhưng không kèm CDM, và bạn tự kích hoạt việc tải về.
CDM nằm trong profile. Trong Python, nó hoạt động với launch_persistent_context và với launch(), vốn chạy trên profile dùng một lần (API đồng bộ; launch() bất đồng bộ là incognito, nên ở đó hãy dùng launch_persistent_context); trong Node hãy dùng launchPersistentContext. Kiểu khởi chạy incognito (ephemeral_profile=False) không nhận được CDM. SDK bật lại component updater và, trên Windows, buộc chạy một lượt quét cập nhật nhanh, để engine đăng ký CDM.
Nó còn quan trọng ngoài chuyện video. Việc key system Widevine có phản hồi hay không là thêm một điều mà trang có thể đọc được, và một Chrome không trả lời được thì trông không giống Chrome.
Mọi người dùng nó để làm gì
QA streaming
Test việc phát lại, quyền truy cập nội dung và giao diện player trên kho nội dung có DRM của chính bạn.
Giám sát media
Kiểm tra tự động trên những trang phát video được bảo vệ.
Một persona Chrome hoàn chỉnh
Giữ câu trả lời EME nhất quán với Chrome thật, kể cả khi bạn không bao giờ phát video nào.
Clearcote được xây dựng cho quyền riêng tư, kiểm thử, nghiên cứu và tự động hóa hợp pháp. Bạn chịu trách nhiệm về cách mình sử dụng nó và về việc tuân thủ điều khoản của các trang web bạn truy cập.
Gói nào có tính năng này
Có ở mọi gói, bật khi cần, phát lại với mức bảo mật phần mềm (L3).
So sánh các góiCâu hỏi thường gặp
Làm sao bật Widevine trong Playwright?
Khởi chạy bằng Clearcote SDK và truyền widevine=True (Python: launch() đồng bộ hoặc một persistent context) hoặc widevine: true (Node, launchPersistentContext). SDK tải CDM về một lần, xác minh, đưa nó vào profile rồi bật lên. .NET SDK hiện chưa có tùy chọn Widevine.
Vì sao Chromium mã nguồn mở không phát được video DRM?
Widevine CDM là phần mềm độc quyền và không thể đóng gói trong một bản build mã nguồn mở, nên khi thiếu nó, cả việc phát nội dung DRM lẫn truy vấn key system EME đều thất bại.
Clearcote có kèm CDM không?
Không. CDM được tải từ component server của Google khi bạn bật tùy chọn, giống cách Chrome gốc nhận nó. Clearcote không bao giờ phân phối CDM.
Hỗ trợ mức bảo mật nào?
L3, bảo mật bằng phần mềm. L1 bảo mật bằng phần cứng, mà một số dịch vụ yêu cầu cho độ phân giải cao, nằm ngoài phạm vi hỗ trợ.
Có cần persistent profile không?
Cần một profile, nhưng không nhất thiết phải là profile được giữ lại. CDM được cài vào profile, nên trong Python, profile dùng một lần phía sau launch() đồng bộ dùng được, launch_persistent_context cũng vậy (launch() bất đồng bộ là incognito); trong Node hãy dùng launchPersistentContext. Chỉ có kiểu khởi chạy incognito (ephemeral_profile=False) là không nhận được CDM.
Tìm hiểu sâu hơn trong tài liệu
Tính năng liên quan
Nạp extension Manifest V2 và V3 đã giải nén khi khởi chạy, headed hay headless, trên Windows và Linux.
Chromium thay thế trực tiếp cho Playwright và Puppeteer: chỉ đổi một dòng import trong Python, Node hay .NET, trình duyệt được tự động tải về và xác minh SHA-256 cho bạn.
Canvas, WebGL, WebGPU, audio, font, màn hình và phần cứng được suy ra trong engine C++ từ một seed, với locale và múi giờ được đặt cho khớp, để mọi bề mặt đều nhất quán với nhau.
Mỗi tài khoản một seed: cùng một thiết bị ở mọi phiên, một thiết bị khác cho tài khoản tiếp theo, với cookie và storage được giữ lại giữa các lần chạy.
Bài đọc liên quan
Dùng thử Clearcote
Thay thế drop-in cho Playwright & Puppeteer, nhất quán đến tận TLS handshake, với một bản build mã nguồn mở để bắt đầu.
Miễn phí cho một trình duyệt với GitHub. Không cần thẻ.