Chuyển đến nội dung
Media · EME · Widevine L3

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ói

Câ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

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ẻ.