提供给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
答案 0 :(得分:2)
eyJraWRzIjpbIlZITTJpSU1HaVNnIl19
是传递给initData
的{{1}}的base64url编码值。
generateRequest
是request.kids[0]
的完整值而不是initData
的值的原因是因为调用了keyId
并将generateRequest
参数设置为initDataType
。如果webm
参数设置为initDataType
,那么keyids
将是request.kids[0]
的值。
当keyId
参数设置为initDataType
时,webm
参数应为single key ID of one or more bytes。然而,当initData
参数设置为initDataType
时,keyids
参数应为JSON object encoded as UTF-8, containing a single member kids
which is an array of base64url encoded Key ID(s)。