You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dash.js等网页播放器中配置ExoPlayer适配的Widevine DRM许可证

Widevine加密DASH流网页端播放问题解答

问题背景

此前接到客户需求开发支持视频流播放的Android应用,客户提供的配置对象包含视频链接、DRM许可证地址等信息,格式如下:

"n": {
  "drm_license_url": "https://sp-supplier.supplier.com/?deviceId=SoMeALphaNUmericakStuFF=",
  "drm_scheme": "widevine",
  "icon": "https://blogger.googleusercontent.com/img/some-logo.png",
  "name": "ANY NAME",
  "uri": "https://supplier-supplier-sl.supplier.com/live/c6eds/VIDEO/SA_Live_dash_enc_2A/SOMEVIDEO.mpd"
},

参考ExoPlayer官方文档完成Android端播放实现后,客户要求新增网页端同款视频播放能力。调研后计划选用dash.js实现DRM加密流播放,参考官方示例配置时发现需要构造protData对象传入DRM参数,示例结构如下:

var protData = {
  "com.widevine.alpha": {
    "serverURL": "https://drm-widevine-licensing.axtest.net/AcquireLicense",
    "httpRequestHeaders": {
      "X-AxDRM-Message": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImZpcnN0X3BsYXlfZXhwaXJhdGlvbiI6NjAsInBsYXlyZWFkeSI6eyJyZWFsX3RpbWVfZXhwaXJhdGlvbiI6dHJ1ZX0sImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.FAbIiPxX8BHi9RwfzD7Yn-wugU19ghrkBFKsaCPrZmU"
    },
    priority: 0
  }
}

目前已知可将已有DRM许可证地址填入serverURL字段,但不清楚示例中X-AxDRM-Message请求头的取值规则,使用dash.js预构建测试播放器填入现有参数测试时,抛出如下错误:

DRM: licenser error! --com.widevine.alpha update, XHR error. status is "" (0), readyState is 4

待确认问题如下:

  • 网页端播放同款加密视频,是否需要向DRM供应商索取额外配置信息?
  • 仅凭现有配置信息,能否构造出符合要求的protData对象?
  • 选用dash.js作为网页端播放库的方案是否可行,是否存在选型错误?

答复

  • 关于是否需要向DRM供应商索要额外信息
    必须要。示例里的X-AxDRM-Message是AxomDRM系统专属的鉴权请求头,不是Widevine DRM的通用强制字段。Android端ExoPlayer能正常播放,是因为其默认发起许可证请求时携带的参数、Widevine生成的挑战信息刚好匹配当前DRM服务的校验规则。
    你遇到的XHR状态码0错误,优先查两个原因:一是DRM服务端没有给你的网页域名加CORS跨域白名单,二是网页端请求许可证缺少服务端要求的鉴权参数(自定义请求头、Cookie、URL签名参数都有可能)。这两类问题都需要联系DRM供应商或者内容提供方解决,没有办法自行绕过。

  • 关于现有信息能否构造合法protData
    不能直接构造出可用的完整配置,但可以先试最小配置验证问题。不要硬套示例里的X-AxDRM-Message字段,那个是对应示例DRM服务的专属参数,你当前用的DRM服务不一定需要。先按如下最小配置测试:

    var protData = {
      "com.widevine.alpha": {
        "serverURL": "你拿到的drm_license_url",
        "httpRequestHeaders": {}
      }
    }
    

    如果最小配置能跑通,说明不需要额外鉴权头;如果还是报许可证错误,就必须等DRM供应商提供网页端专属的鉴权参数,这些参数是服务端生成的,没有办法自行计算或猜测。

  • 关于dash.js选型是否正确
    选型没有问题。dash.js是目前网页端对DASH+Widevine DRM支持最成熟的开源播放器之一,完全可以满足加密DASH流的播放需求,不需要更换库。如果后续需要兼容HLS加密流,可以补充使用hls.js,两者DRM配置逻辑基本一致。
    额外提醒:Widevine在网页端仅支持Chrome、Edge、Firefox等Chromium/Gecko内核浏览器,Safari仅支持苹果自研的FairPlay DRM,如果客户要求兼容Safari,还需要单独向DRM供应商索要FairPlay对应的证书、许可证地址及相关配置参数。


内容的提问来源于stack exchange,提问作者Unknown.Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:01:04