Widevine là công nghệ DRM do Google phát triển để bảo vệ nội dung video khỏi sao chép trái phép trên thiết bị di động, Smart TV và nền tảng web. Việc mã hóa nội dung được thực hiện thông qua mô-đun CDM, được hỗ trợ trên 4 tỷ thiết bị trên toàn thế giới. Công nghệ Widevine đảm bảo tương thích với Android, iOS, Chrome và Smart TV, cho phép các dịch vụ phát trực tuyến bảo vệ nội dung cao cấp trên mọi nền tảng.
Những điểm chính
Widevine là công nghệ DRM độc quyền được Google mua lại vào năm 2010 và đã trở thành tiêu chuẩn thực tế để bảo vệ nội dung video trong hệ sinh thái Android. Nó được sử dụng bởi các dịch vụ phát trực tuyến lớn, bao gồm Netflix, Amazon Prime Video, Disney+ và Hulu, để ngăn chặn sao chép và phân phối trái phép nội dung.
Widevine hỗ trợ mã hóa AES-128 CBC sử dụng khóa nội dung chỉ được truyền đến các thiết bị được ủy quyền thông qua kênh cấp phép an toàn. Hệ thống cung cấp bảo vệ đầu cuối từ mã hóa trên máy chủ đến giải mã trên thiết bị của người dùng.
Widevine Technologies được thành lập năm 1999 và ban đầu phát triển các giải pháp bảo vệ nội dung trên nền tảng truyền hình cáp. Sau khi được Google mua lại vào năm 2010, công nghệ này đã được điều chỉnh cho nền tảng di động và tích hợp vào hệ điều hành Android từ phiên bản 4.4 KitKat. Từ năm 2015, Widevine đã trở thành thành phần bắt buộc của chứng nhận Google Mobile Services.
Năm 2018, Google giới thiệu Widevine Modular DRM, cho phép các nhà sản xuất thiết bị triển khai các cấp độ bảo vệ khác nhau bằng phần cứng mà không cần sửa đổi mã hệ điều hành. Ngày nay, Widevine Modular được hỗ trợ trên hơn 4 tỷ thiết bị và là cơ chế DRM chính trên Android.
Kiến trúc Widevine bao gồm ba thành phần chính: Content Decryption Module (CDM), máy chủ cấp phép và công cụ mã hóa nội dung. CDM thực hiện giải mã phía máy khách và tương tác với Trusted Execution Environment (TEE) phần cứng để lưu trữ khóa an toàn.
Máy chủ cấp phép của Google quản lý việc phát hành khóa dựa trên chính sách của nhà cung cấp nội dung, xác định các giới hạn về thời gian, số lượng thiết bị và chất lượng phát lại. Công cụ mã hóa chuẩn bị nội dung phía nhà cung cấp, đóng gói nó ở định dạng MPEG-DASH hoặc HLS với mã hóa CENC.
Quy trình bảo vệ bắt đầu ở giai đoạn đóng gói nội dung, khi tệp phương tiện được mã hóa bằng khóa nội dung trên máy chủ của nhà cung cấp. Luồng mã hóa được truyền đến thiết bị của người dùng qua CDN, nơi CDM yêu cầu giấy phép từ máy chủ cấp phép.
Máy chủ cấp phép xác minh tính xác thực của thiết bị và quyền truy cập nội dung. Nếu xác minh thành công, máy chủ phát hành giấy phép kèm khóa mà CDM sử dụng để giải mã. Giấy phép có thể chứa các hạn chế về thời gian xem và độ phân giải.
Trao đổi giấy phép trong Widevine được triển khai thông qua giao thức EME (Encrypted Media Extensions) trong trình duyệt hoặc qua SDK trên nền tảng di động. Yêu cầu giấy phép được tạo bởi CDM và gửi đến máy chủ cấp phép qua HTTPS, đảm bảo bảo vệ khỏi việc đánh cắp khóa khi truyền.
Máy chủ xử lý yêu cầu và trả về giấy phép cũng được mã hóa và chỉ có thể được giải mã bởi CDM của thiết bị. Liên kết phần cứng khóa với một thiết bị cụ thể ngăn chặn việc chuyển sang nền tảng khác.
Widevine sử dụng các tiêu chuẩn Common Encryption (CENC) được định nghĩa trong ISO/IEC 23001-7, đảm bảo tương thích với các định dạng MPEG-DASH và HLS. Mã hóa AES-128 ở chế độ CTR hoặc CBC được sử dụng để bảo vệ luồng phương tiện.
Để dẫn xuất khóa, HKDF (HMAC-based Key Derivation Function) được sử dụng, cho phép tạo khóa duy nhất cho mỗi phân đoạn nội dung. Hỗ trợ HLS trong Widevine được thêm vào với phiên bản Modular 2.0, mở rộng khả năng tương thích với các nền tảng Apple.
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevine xác định ba cấp độ bảo mật khác nhau về cách thức thực hiện các hoạt động mã hóa và xử lý nội dung. Cấp độ L1 cung cấp bảo vệ tối đa, L3 cung cấp bảo vệ tối thiểu và L2 ở vị trí trung gian.
| Cấp độ | Loại bảo vệ | Yêu cầu thiết bị | Độ phân giải tối đa |
|---|---|---|---|
| L1 | Phần cứng | TEE ở cấp SoC | 4K Ultra HD |
| L2 | Kết hợp | TEE cho khóa, phần mềm cho video | 1080p |
| L3 | Phần mềm | Chỉ CDM phần mềm | 720p |
Cấp độ L1 yêu cầu Trusted Execution Environment (TEE) ở cấp phần cứng, nơi tất cả các hoạt động mã hóa được thực hiện. Khóa nội dung không bao giờ rời khỏi TEE, ngăn chặn việc trích xuất ngay cả khi hệ điều hành chính bị xâm phạm.
Thiết bị có chứng nhận L1 có thể phát nội dung ở chất lượng 4K và HDR, vì luồng video đã giải mã được gửi trực tiếp đến đầu ra video được bảo vệ mà không có quyền truy cập từ các tiến trình người dùng.
Cấp độ L3 thực hiện tất cả các hoạt động mã hóa bằng phần mềm trong không gian người dùng thông thường. Đây là chế độ ít an toàn nhất, nơi khóa có thể bị trích xuất từ RAM của thiết bị.
Widevine L3 giới hạn chất lượng phát lại ở 720p, phù hợp để xem trên các thiết bị cấp thấp hoặc trình duyệt máy tính để bàn không có bảo vệ phần cứng.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
Tích hợp Widevine vào ứng dụng di động được thực hiện thông qua các API tiêu chuẩn MediaDrm (Android) và AVContentKeySession (iOS). Trong hầu hết các trường hợp, nhà phát triển không cần làm việc trực tiếp với DRM — các thư viện trình phát như ExoPlayer và AVPlayer xử lý cấp phép tự động.
Trên Android, Widevine được tích hợp thông qua lớp MediaDrm, cung cấp quyền truy cập trực tiếp vào CDM. Đối với ứng dụng phát trực tuyến, nên sử dụng ExoPlayer với mô-đun DrmSessionManager, tự động quản lý các yêu cầu giấy phép.
Khi khởi tạo trình phát, bạn cần chỉ định UUID lược đồ Widevine (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) và URL máy chủ cấp phép do nhà cung cấp nội dung cung cấp. ExoPlayer tự động xử lý chu trình yêu cầu và gia hạn giấy phép.
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
Trên nền tảng web, Widevine hoạt động thông qua Media Source Extensions (MSE) và Encrypted Media Extensions (EME). Trình duyệt dựa trên Chromium có Widevine CDM tích hợp sẵn và nhà phát triển chỉ cần khởi tạo phiên EME với cấu hình chính xác.
Để sử dụng Widevine trong trình duyệt, bạn cần chỉ định bộ khởi tạo giấy phép với loại keySystem `com.widevine.alpha`. Sau khi tạo phiên bản MediaKeys, trình duyệt tự động xử lý các yêu cầu giấy phép.
Khi tích hợp Widevine, điều quan trọng là phải xử lý chính xác các lỗi cấp phép xảy ra do thiếu quyền truy cập, hết hạn đăng ký hoặc không tương thích thiết bị. Lỗi TYPE_EXPIRED_LICENSE yêu cầu cập nhật giấy phép thông qua yêu cầu lại tới máy chủ, trong khi TYPE_OUTPUT_NOT_ALLOWED cho biết đầu ra video không tương thích với chính sách DRM.
Nên triển khai cơ chế thử lại với backoff theo cấp số nhân cho lỗi mạng tạm thời và hiển thị thông báo rõ ràng cho người dùng khi lỗi cấp phép vĩnh viễn. Ghi nhật ký lỗi phiên DRM giúp nhà cung cấp nội dung xác định sự cố thiết bị và tối ưu hóa chính sách.
Widevine cạnh tranh với FairPlay của Apple và PlayReady của Microsoft, tạo thành ba giải pháp DRM chính trên thị trường nền tảng di động. Mỗi công nghệ đều có ưu điểm và hạn chế riêng liên quan đến hệ sinh thái nền tảng.
| Đặc điểm | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Nhà phát triển | Apple | Microsoft | |
| Nền tảng chính | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Cấp độ tối đa | L1 (4K) | Tương đương L1 (4K) | SL3000 (4K) |
| Bảo vệ phần cứng | TEE | Secure Enclave | TPM + TEE |
Việc chọn DRM phụ thuộc vào nền tảng mục tiêu của ứng dụng. Đối với các dự án ưu tiên Android, Widevine là lựa chọn tự nhiên vì nó được cài đặt sẵn trên tất cả các thiết bị được chứng nhận với Google Mobile Services và không yêu cầu phí cấp phép bổ sung.
Đối với các dự án đa nền tảng, phương pháp đa DRM thường được sử dụng với các bộ tổng hợp giấy phép như Axinom, EZDRM và Vualto, cung cấp API thống nhất để làm việc với cả ba hệ thống DRM. Điều này giảm độ phức tạp tích hợp và tập trung hóa quản lý giấy phép.
Câu hỏi thường gặp
Widevine là công nghệ DRM của Google được thiết kế để bảo vệ nội dung video kỹ thuật số khỏi sao chép trái phép. Nó được các dịch vụ phát trực tuyến sử dụng để mã hóa video và quản lý quyền truy cập thông qua hệ thống cấp phép.
Widevine hỗ trợ ba cấp độ bảo mật: L1 với mã hóa phần cứng trong TEE, L2 với phương pháp kết hợp và L3 với triển khai hoàn toàn bằng phần mềm. L1 cho phép phát nội dung 4K, L3 bị giới hạn ở chất lượng 720p.
Bạn có thể kiểm tra cấp độ Widevine trên Android thông qua lớp MediaDrm bằng cách yêu cầu thuộc tính securityLevel. Để thực hiện, hãy tạo phiên bản MediaDrm với UUID Widevine và gọi getPropertyString, hoặc sử dụng ứng dụng bên thứ ba như DRM Info.
Widevine được Google phát triển cho Android và Chrome, trong khi FairPlay dành cho iOS, tvOS và Safari. Cả hai đều hỗ trợ mã hóa phần cứng và 4K, nhưng Widevine phổ biến hơn trên thiết bị Android, trong khi FairPlay là tiêu chuẩn thực tế trong hệ sinh thái Apple.
Để sử dụng Widevine trong ứng dụng di động, không cần giấy phép riêng — công nghệ này được tích hợp sẵn trong các thiết bị Android được chứng nhận và Chrome. Phí chỉ được tính cho các nhà cung cấp nội dung khi sử dụng máy chủ cấp phép.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm