2017-06-05 50 views
0
  1. 提供给MediaKeySession.generateRequest()的孩子与通过MediaKeyMessageEvent提供的孩子之间的关系是什么?会话请求与消息中的EME密钥ID不同(ClearKey)

  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

回答

2

eyJraWRzIjpbIlZITTJpSU1HaVNnIl19initData的base64url编码值传递给generateRequest

的原因,request.kids[0]initData的全部价值,而不是keyId值是因为generateRequest是与initDataType参数设置为webm调用。如果参数initDataType设置为keyids,那么request.kids[0]将是值keyId

当参数initDataType设置为webminitData参数预计为single key ID of one or more bytes。而当initDataType参数设置为keyids时,initData参数预计为JSON object encoded as UTF-8, containing a single member kids which is an array of base64url encoded Key ID(s)