DRM-X 6.0 鸽子和橄榄枝标志DRM-X 6.0文档
◎ 简体中文

创建播放会话

了解如何通过身份验证调用接口,并按 DRM-X Universal Playback Session Contract 处理响应。后端使用可信的 Content IDs 请求具有明确有效期和适用范围的播放授权。

查看 Markdown在线示例更新于 2026-10-26

播放授权的流程

您的后端决定谁可以观看。DRM-X 提供播放授权,播放器使用该授权请求 DRM 许可证。

  1. 观看用户

    登录您的服务并请求播放视频。

  2. 您的后端

    检查用户的购买记录、订阅状态或其他观看权限。

  3. DRM-X

    应用所选播放规则,返回播放配置和授权信息。

  4. 播放器

    使用返回的授权信息,请求播放所需的 DRM 许可证。

您的后端判断用户是否有权观看,DRM-X 执行签名授权中的播放策略。加密媒体与 DRM 许可证通过各自的服务传送给播放器。
API

创建通用播放会话#

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。
drmSystemwidevine, playready, fairplay,或 wiseplay根据播放器能力选择匹配的 DRM 系统。
sessionId本次播放尝试的唯一标识为每次尝试生成新的不可预测的值 。
contentTypevod 或 live使用已注册的内容类型 。
playbackModeContract 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。授权过期或无效时,请求可能在释放前失败;开始新的播放尝试时应取得新的授权。对临时服务故障采用有上限的退避重试。

本公开接口约定描述流媒体播放。客户自有的离线端点和设备绑定的持久许可证采用独立流程;不要将此流媒体响应用作离线许可证。