2017-06-05 96 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)