创建播放会话
了解如何通过身份验证调用接口,并按 DRM-X Universal Playback Session Contract 处理响应。后端使用可信的 Content IDs 请求具有明确有效期和适用范围的播放授权。
播放授权的流程
您的后端决定谁可以观看。DRM-X 提供播放授权,播放器使用该授权请求 DRM 许可证。
- 观看用户
登录您的服务并请求播放视频。
- 您的后端
检查用户的购买记录、订阅状态或其他观看权限。
- DRM-X
应用所选播放规则,返回播放配置和授权信息。
- 播放器
使用返回的授权信息,请求播放所需的 DRM 许可证。
创建通用播放会话#
POST https://api6.drm-x.com/api/v1/playback/environments/{siteId}/sessions
Accept: application/json
Content-Type: application/json
X-DRMX-Client-Id: {siteKey}
X-DRMX-Client-Secret: {accessKey}
{
"contentId": "course-12-lesson-4",
"contentType": "vod",
"drmSystem": "widevine",
"subject": "customer-user-1001",
"sessionId": "new-unpredictable-id-per-playback",
"playbackMode": "streaming",
"licensePolicyTemplate": "multi-tier-standard",
"useEnvironmentDefaults": true,
"applicationId": "customer-web",
"platformCapabilities": {
"clientPlatform": "web",
"drmSystems": ["widevine"],
"manifestTypes": ["dash"],
"maximumHeight": 2160,
"persistentState": false,
"sdkVersion": "1.2.0-beta.4"
}
}
成功的 Contract v1 响应包含服务器选定的 Manifest、可用的其他 Manifest 版本、对应 DRM 的许可证 URL、短期有效的 DRM License Token 或客户代理授权、会话释放路径、允许的最高视频高度及轨道列表。返回响应时应设置 Cache-Control: no-store。
每次实际发起播放时使用独立且不可预测的会话 ID。跨设备复用同一个 ID 会使并发播放计数失效。
成功响应示例
本示例使用不可用的示例 URL 和占位令牌。请读取嵌套的描述对象;兼容别名供旧版集成使用。
{
"contractVersion": 1,
"playbackMode": "streaming",
"sessionId": "c9006ed8-58c8-45db-9ed0-311d1047c210",
"contentId": "course-12-lesson-4",
"drmSystem": "widevine",
"manifestUrl": "https://media.example.test/course-12/manifest.mpd",
"manifestUrls": {"dash": "https://media.example.test/course-12/manifest.mpd"},
"expiresAt": "2026-10-26T12:10:00Z",
"drm": {
"system": "widevine",
"licenseServerUrl": "https://license6.drm-x.com/v1/licenses/widevine",
"drmLicenseToken": "REDACTED_EXAMPLE_ONLY",
"tokenType": "Bearer",
"fairPlayCertificateUrl": null
},
"release": {
"url": "https://license6.drm-x.com/v1/playback-sessions/release",
"method": "POST",
"authorizationScheme": "Bearer"
},
"policy": {"maximumHeight": 1080, "allowedTrackTypes": ["AUDIO", "SD", "HD"]},
"tracks": {"audioLanguageSelection": true, "subtitleLanguageSelection": true, "languageTagStandard": "BCP-47"},
"platformCapabilities": null,
"playerBranding": null,
"token": "REDACTED_EXAMPLE_ONLY",
"tokenType": "Bearer",
"licenseServerUrl": "https://license6.drm-x.com/v1/licenses/widevine",
"fairPlayCertificateUrl": null,
"releaseUrl": "https://license6.drm-x.com/v1/playback-sessions/release",
"maximumHeight": 1080,
"allowedTrackTypes": ["AUDIO", "SD", "HD"]
}
身份认证与可信请求字段#
由后端使用具备 license-tokens:create 权限的项目 API 客户端调用此 API,并将环境 UUID 作为 siteId。已登录用户调用您的接口,再由您的接口提供以下可信字段。
| 字段 | 含义 | 集成规则 |
|---|---|---|
contentId | 已发布内容的标识 | 完成观看权限检查后,从可信内容目录中取得。 |
subject | 稳定的用户标识 | 从已认证的服务器会话中取得,不采用客户端提交的用户 ID。 |
drmSystem | widevine, playready, fairplay,或 wiseplay | 根据播放器能力选择匹配的 DRM 系统。 |
sessionId | 本次播放尝试的唯一标识 | 为每次尝试生成新的不可预测的值 。 |
contentType | vod 或 live | 使用已注册的内容类型 。 |
playbackMode | Contract v1 中的 streaming | 离线播放需要后续扩展接口契约后才能支持。 |
licensePolicyTemplate / licensePolicy | 命名策略模板或自定义策略 | 在服务器端选择其中一种,不要同时提供两种。参见策略规则。 |
platformCapabilities | 平台、DRM 系统、Manifest 类型及设备信息 | 新集成应明确发送客户端能力信息。这些信息用于描述客户端,不能覆盖许可证策略。 |
读取并使用响应中的描述字段#
使用 Contract v1 的嵌套描述字段。不要自行猜测许可证 URL,也不要用播放器输入替换已注册的 Manifest URL。
| 响应字段 | 使用方法 |
|---|---|
contractVersion | 确认您的集成支持响应中的接口契约版本。 |
manifestUrl / manifestUrls | 加载服务器选定的 Manifest,或响应中提供的兼容版本。 |
expiresAt | 本次授权的过期时间。 |
drm | 读取 system、licenseServerUrl、drmLicenseToken、tokenType 及可选的 fairPlayCertificateUrl。客户 Token 代理可使用自己管理的、具有明确限制的会话替代面向浏览器的原始授权。 |
release | 播放结束时,使用其中的 url、method 和 authorizationScheme 释放会话。 |
policy | 遵循 maximumHeight 和 allowedTrackTypes 的限制。DRM 提供方仍会执行已签名的策略。 |
tracks | 读取音轨和字幕语言选择能力,以及所使用的语言标签标准。 |
向播放器返回响应时设置 Cache-Control: no-store。不得将项目 Access Key 发送到浏览器。仅向响应指定的许可证和证书路径附加授权请求头。
处理错误并释放并发播放名额#
检查 HTTP 状态和机器可读的 code。保留 requestId 以便排查,并遵循 retryable。如果用户无权观看或策略无效,应先修正权限判断或策略,不要反复重试。详见播放会话错误参考。
停止播放、更换视频、发生不可恢复错误或关闭应用时,释放占用的并发播放名额。重新发起播放时使用新的会话 ID。
POST https://license6.drm-x.com/v1/playback-sessions/release
Authorization: Bearer REDACTED_EXAMPLE_ONLY
Accept: application/json
HTTP/1.1 200 OK
{"contractVersion":1,"released":true,"code":"license_session_released","requestId":"example-request-id"}
使用响应返回的释放 URL 和授权方案,并携带同一个 DRM License Token。无需请求正文。已通过身份验证的重复释放请求会返回 HTTP 200,released 为 false,code 为 license_session_not_active。授权过期或无效时,请求可能在释放前失败;开始新的播放尝试时应取得新的授权。对临时服务故障采用有上限的退避重试。
本公开接口约定描述流媒体播放。客户自有的离线端点和设备绑定的持久许可证采用独立流程;不要将此流媒体响应用作离线许可证。
DRM-X 6.0