会话请求与消息 (ClearKey) 中的 EME 密钥 ID 不同
EME Key ID different in session request vs. message (ClearKey)
提供给 MediaKeySession.generateRequest() 的孩子与通过 MediaKeyMessageEvent 提供的孩子之间的关系是什么?
如果它们应该相同 - 为什么它们在下面的代码中不同? 请注意,由于安全限制
,此处不会运行
navigator.requestMediaKeySystemAccess("org.w3.clearkey", [{
initDataTypes: ['webm'],
audioCapabilities: [{
contentType: 'audio/webm; codecs="opus"'
}],
videoCapabilities: [{
contentType: 'video/webm; codecs="vp8"'
},
{
contentType: 'video/webm; codecs="vp9"'
}
],
}]).then((keySystemAccess) => {
return keySystemAccess.createMediaKeys();
}).then((mediaKeys) => {
var session = mediaKeys.createSession("temporary");
var keyId = "VHM2iIMGiSg";
var initData = '{"kids":["' + keyId + '"]}';
console.log(keyId);
session.addEventListener('message', (evt) => {
var requestJson = new TextDecoder().decode(evt.message);
var request = JSON.parse(requestJson);
console.log(request.kids[0]);
});
this.session.generateRequest("webm", new TextEncoder().encode(initData));
});
输出:
VHM2iIMGiSg
eyJraWRzIjpbIlZITTJpSU1HaVNnIl19
第二行的预期输出也是VHM2iIMGiSg
eyJraWRzIjpbIlZITTJpSU1HaVNnIl19
是传递给 generateRequest
.
的 initData
的 base64url 编码值
request.kids[0]
是 initData
的完整值而不是 keyId
的值的原因是因为 generateRequest
是用 initDataType
参数调用的设置为 webm
。如果 initDataType
参数设置为 keyids
那么 request.kids[0]
将是 keyId
.
的值
当 initDataType
参数设置为 webm
时,initData
参数应为 single key ID of one or more bytes. Whereas when the initDataType
parameter is set to keyids
the initData
parameter is expected to be a JSON object encoded as UTF-8, containing a single member kids
which is an array of base64url encoded Key ID(s)。
提供给 MediaKeySession.generateRequest() 的孩子与通过 MediaKeyMessageEvent 提供的孩子之间的关系是什么?
如果它们应该相同 - 为什么它们在下面的代码中不同? 请注意,由于安全限制
,此处不会运行
navigator.requestMediaKeySystemAccess("org.w3.clearkey", [{
initDataTypes: ['webm'],
audioCapabilities: [{
contentType: 'audio/webm; codecs="opus"'
}],
videoCapabilities: [{
contentType: 'video/webm; codecs="vp8"'
},
{
contentType: 'video/webm; codecs="vp9"'
}
],
}]).then((keySystemAccess) => {
return keySystemAccess.createMediaKeys();
}).then((mediaKeys) => {
var session = mediaKeys.createSession("temporary");
var keyId = "VHM2iIMGiSg";
var initData = '{"kids":["' + keyId + '"]}';
console.log(keyId);
session.addEventListener('message', (evt) => {
var requestJson = new TextDecoder().decode(evt.message);
var request = JSON.parse(requestJson);
console.log(request.kids[0]);
});
this.session.generateRequest("webm", new TextEncoder().encode(initData));
});
输出:
VHM2iIMGiSg
eyJraWRzIjpbIlZITTJpSU1HaVNnIl19
第二行的预期输出也是VHM2iIMGiSg
eyJraWRzIjpbIlZITTJpSU1HaVNnIl19
是传递给 generateRequest
.
initData
的 base64url 编码值
request.kids[0]
是 initData
的完整值而不是 keyId
的值的原因是因为 generateRequest
是用 initDataType
参数调用的设置为 webm
。如果 initDataType
参数设置为 keyids
那么 request.kids[0]
将是 keyId
.
当 initDataType
参数设置为 webm
时,initData
参数应为 single key ID of one or more bytes. Whereas when the initDataType
parameter is set to keyids
the initData
parameter is expected to be a JSON object encoded as UTF-8, containing a single member kids
which is an array of base64url encoded Key ID(s)。