Налаштування DRM-плеєра¶
Нижче описано, як ваш плеєр отримує ліцензію із сервера ліцензій MEGOGO для кожної системи DRM: Widevine, FairPlay і PlayReady. Спершу прочитайте розділ DRM: там пояснено, яку систему DRM використовує ваш ключ.
Перед початком роботи¶
Переконайтеся, що:
- MEGOGO налаштував систему DRM вашого ключа для кожної платформи (див. DRM);
- ви вже вмієте отримувати потік відео (див. Відтворення відео).
Як плеєр отримує ліцензію¶
- Ваш застосунок надсилає
/streamі отримуєsrc,drm_type,license_server, а для FairPlay — ще йlicense_certificate. - Плеєр завантажує маніфест із
srcі виявляє, що відео зашифроване. - Плеєр надсилає запит ліцензії на
license_server. - Сервер ліцензій повертає ліцензію, і плеєр розшифровує та відтворює відео.
Використовуйте license_server точно в тому вигляді, у якому його
отримали: не змінюйте його й не формуйте самостійно. Він містить
підписаний шлях потоку в параметрі ref, і це єдина авторизація запиту.
Жодні заголовки чи токени не потрібні.
УВАГА
license_server, як і src, діє лише для цього користувача й цього
відтворення. Щоразу, коли користувач запускає відтворення,
запитуйте новий /stream.
Widevine (drm_type: modular)¶
Платформи: веб (Chrome, Firefox, Edge), Android, Android TV, деякі моделі Smart TV. Потік: DASH.
| Запит | Тіло | Відповідь |
|---|---|---|
POST на license_server |
Запит ліцензії (license challenge), сформований плеєром (двійкові дані без змін) | Ліцензія (двійкові дані, application/octet-stream) |
Більшість плеєрів спершу надсилає на той самий URL запит сертифіката сервісу (service certificate). Сервер ліцензій на нього відповідає, тож отримувати сертифікат самостійно не потрібно.
Веб: Shaka Player¶
const player = new shaka.Player();
await player.attach(document.querySelector("video"));
player.configure({
drm: { servers: { "com.widevine.alpha": stream.license_server } },
});
await player.load(stream.src);
stream — це об'єкт data з відповіді /stream.
Android: Media3 ExoPlayer¶
val mediaItem = MediaItem.Builder()
.setUri(stream.src)
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri(stream.licenseServer)
.build()
)
.build()
player.setMediaItem(mediaItem)
player.prepare()
FairPlay (drm_type: fairplay)¶
Платформи: iOS, iPadOS, tvOS, Safari на macOS. Потік: HLS.
| Крок | Що зробити |
|---|---|
| Сертифікат | Отримайте сертифікат застосунку з license_certificate (двійкові дані, DER) |
| Content ID | Візьміть текст після skd:// в URI ключа в плейлисті (#EXT-X-KEY або #EXT-X-SESSION-KEY). Це 32-символьний шістнадцятковий ID ключа |
| Запит | Надішліть SPC (двійкові дані) методом POST на license_server із заголовком Content-Type: application/octet-stream |
| Відповідь | CKC (двійкові дані) |
Плейлист може містити кілька ключів, наприклад для аудіо, SD і Full HD. Для кожного ключа плеєр надсилає окремий запит.
iOS і tvOS: AVContentKeySession¶
func contentKeySession(_ session: AVContentKeySession,
didProvide keyRequest: AVContentKeyRequest) {
// keyRequest.identifier is the key URI: "skd://<key ID>"
guard let uri = keyRequest.identifier as? String,
let contentId = uri.replacingOccurrences(of: "skd://", with: "").data(using: .utf8)
else { return }
// certificate: the bytes from license_certificate
keyRequest.makeStreamingContentKeyRequestData(forApp: certificate,
contentIdentifier: contentId,
options: nil) { spc, error in
guard let spc = spc else { keyRequest.processContentKeyResponseError(error!); return }
var request = URLRequest(url: licenseServer) // license_server
request.httpMethod = "POST"
request.setValue("application/octet-stream", forHTTPHeaderField: "Content-Type")
request.httpBody = spc
URLSession.shared.dataTask(with: request) { ckc, _, error in
guard let ckc = ckc else { keyRequest.processContentKeyResponseError(error!); return }
keyRequest.processContentKeyResponse(
AVContentKeyResponse(fairPlayStreamingKeyResponseData: ckc))
}.resume()
}
}
Safari¶
Використовуйте вбудоване відтворення HLS у Safari (елемент video)
з підтримкою FairPlay у браузері. Через бібліотеку hls.js FairPlay зараз
не працює.
Помилки¶
Якщо сервер ліцензій не може прочитати запит, він повертає HTTP 400
з порожнім тілом. Причину вказано в заголовку X-Error:
X-Error |
Причина |
|---|---|
Invalid SPC data size |
SPC порожній або занадто короткий |
Invalid SPC certificate |
SPC сформовано з іншим сертифікатом. Використовуйте license_certificate |
Invalid asset ID |
Content ID у SPC не є ключем цього відео. Використовуйте ID ключа з skd:// |
PlayReady (drm_type: playready)¶
Платформи: Smart TV (Samsung Tizen, LG webOS та інші), Xbox, PlayStation, Microsoft Edge. Потік: DASH або MSS — залежно від налаштування вашого ключа.
| Запит | Тіло | Відповідь |
|---|---|---|
POST на license_server |
Стандартний запит ліцензії PlayReady (license challenge, SOAP), сформований плеєром | Відповідь PlayReady з ліцензією |
Укажіть license_server як URL ліцензії у своєму плеєрі. Не додавайте
custom data: запит авторизує параметр ref в URL.
ПРИМІТКА
На Samsung Tizen версії Full HD і 4K із PlayReady SL3000 відтворюються
в HTML5-елементі video. Використовуйте саме його, а не нативний
плеєр Tizen.
Захист пристрою для кожної якості¶
Якість, яку може відтворити пристрій, залежить від його рівня захисту DRM і від HDCP підключення до екрана:
| Якість | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| SD, HD (до 720) | Достатньо L3 (програмний) | Без додаткових вимог | Без додаткових вимог |
| Full HD (1080) | L1 (апаратний) і HDCP 2.x | Без додаткових вимог | SL3000 і HDCP 2.2 |
| 4K (UHD) | L1 і HDCP 2.2 | HDCP 2.2 | SL3000 і HDCP 2.2 |
Якщо пристрій не відповідає цим вимогам, плеєр не отримує ключів для вищих якостей. Для окремих відео й регіонів правовласники можуть встановлювати суворіші вимоги.
Помилки сервера ліцензій¶
| HTTP-статус | Причина | Дія |
|---|---|---|
| 403 | ref неправильний або вже недійсний |
Надішліть /stream ще раз і використайте новий license_server |
| 400 (FairPlay) | SPC неправильний. Див. X-Error |
Див. помилки FairPlay |
| 500 (Widevine) | Тіло запиту не є запитом ліцензії Widevine | Надсилайте запит ліцензії від плеєра без змін |
Усі коди помилок наведено в каталозі помилок.
Що далі¶
- Налаштування відтворення: аудіодоріжки й субтитри.
- Чек-лист запуску: перевірте відео з DRM на кожній платформі.
Версія посібника 1.5, 2026-10-31 · Повідомити про проблему на цій сторінці