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   拥剑公子  阅读(100)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版
历史上的今天:
2021-04-23 python日志库loguru
2021-04-23 node.js日志封装

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示