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

时间:2017-06-05 09:09:38

标签: html5 encryption browser drm

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

  2. 如果它们应该是相同的 - 为什么它们在下面的代码中有所不同? 注意,由于安全限制,此操作不会在此处运行

  3. 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

1 个答案:

答案 0 :(得分:2)

eyJraWRzIjpbIlZITTJpSU1HaVNnIl19是传递给initData的{​​{1}}的base64url编码值。

generateRequestrequest.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)