会话请求与消息 (ClearKey) 中的 EME 密钥 ID 不同

EME Key ID different in session request vs. message (ClearKey)

  1. 提供给 MediaKeySession.generateRequest() 的孩子与通过 MediaKeyMessageEvent 提供的孩子之间的关系是什么?

  2. 如果它们应该相同 - 为什么它们在下面的代码中不同? 请注意,由于安全限制

    ,此处不会运行

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)