var savedSessionId = 'UnknownSessionId';
function createPersistentSession() {
return navigator
.requestMediaKeySystemAccess(
'org.chromium.externalclearkey', [{
initDataTypes: ['keyids'],
audioCapabilities: [
{contentType: 'audio/mp4; codecs="mp4a.40.2"'},
{contentType: 'audio/webm; codecs="opus"'}
],
persistentState: 'required',
sessionTypes: ['persistent-license'],
}])
.then(function(access) {
return access.createMediaKeys();
})
.then(function(mediaKeys) {
return mediaKeys.createSession('persistent-license');
});
}
function handleMessageEvent(e) {
var session = e.target;
var te = new TextEncoder();
var license = te.encode(
'{"keys":[{"kty":"oct","k":"tQ0bJVWb6b0KPL6KtZIy_A","kid":"LwVHf8JLtPrv2GUXFW2v_A"}],"type":"persistent-license"}');
savedSessionId = session.sessionId;
return session.update(license).then(() => true, () => false);
}
async function setMediaLicense() {
var te = new TextEncoder();
var initData = te.encode('{"kids":["LwVHf8JLtPrv2GUXFW2v_A"]}');
try {
const session = await createPersistentSession();
const handled = new Promise((resolve, reject) => {
session.addEventListener('message', (e) => {
handleMessageEvent(e).then(resolve, reject)
}, false);
});
await session.generateRequest('keyids', initData);
await handled;
return true;
} catch {
return false;
}
}
async function hasMediaLicense() {
try {
const session = await createPersistentSession();
const result = await session.load(savedSessionId);
return result;
}catch {
return false;
}
}