EME接口(w3c Encrypted Media Extensions)

参考文档:https://www.w3.org/TR/encrypted-media/

 交流qq80101277

 

 

通常网页初始化时,会调用一堆requestMediaKeySystemAccess(),探测web能力:解码器(vp8,vp9,av1,h264,avc,hvc等),hdcp等;

然后为创建一个播放环境,示例:

const mediaKeySystemAccess = await window.Navigator.requestMediaKeySystemAccess("com.widevine.alpha", [{
  initDataTypes: ["cenc"],
  audioCapabilities: [{contentType: "audio/mp4; codecs="mp4a.40.5""}],
  videoCapabilities: [{contentType: "video/mp4; codecs="avc1.4d400d""}],
}]) => MediaKeySystemAccess instance {
  keySystem: "com.widevine.alpha",
  autoId: "MediaKeySystemAccess_4",
}

指定一个keySystem ,上面是widevine,给一些解码器参数,返回一个工厂,类型:MediaKeySystemAccess

const mediaKeys = await mediaKeySystemAccess.createMediaKeys() // 调用cdm的CreateCdmInstance,InitializeCdmModule_4,Initialize等
const session = mediaKeys.createSession("temporary")
这个session应该是一个cdm实例(和cdm里面的update session不一样)

 session.generateRequest   (js调用这个接口把pssh发给底层cdm,里面是keyid,不需要返回数据)

向widevine server请求数据(http请求:根据pssh等,返回一个二进制数据,观察700字节左右protobuf格式)

session.update (参数:widevine server返回的数据,就是700字节左右的),返回cdm数据(protobuf格式)

 

如果有setServerCertificate会调用2次update

 

 

 

 

posted on 2024-04-23 15:41  拥剑公子  阅读(76)  评论(0编辑  收藏  举报

导航