async function onFpEncrypted(event) {
try {
let initDataType = event.initDataType;
if (initDataType !== 'skd') {
window.console.error(`Received unexpected initialization data type "${initDataType}"`);
return;
}
let video = event.target;
if (!video.mediaKeys) {
let access = await navigator.requestMediaKeySystemAccess("com.apple.fps", [{
initDataTypes: [initDataType],
videoCapabilities: [{ contentType: 'application/vnd.apple.mpegurl', robustness: '' }],
distinctiveIdentifier: 'not-allowed',
persistentState: 'not-allowed',
sessionTypes: ['temporary'],
}]);
let keys = await access.createMediaKeys();
// The FairPlay certificate we fetched earlier is used here.
await keys.setServerCertificate(window.fp_certificate);
await video.setMediaKeys(keys);
}
let initData = event.initData;
let session = video.mediaKeys.createSession();
session.generateRequest(initDataType, initData);
let message = await new Promise(resolve => {
session.addEventListener('message', resolve, { once: true });
});
// license_server_url we set earlier is used here.
let response = await getResponse(message, window.fp_license_server_url);
await session.update(response);
return session;
} catch(e) {
window.console.error(`Could not start encrypted playback due to exception "${e}"`)
}
}