return Utils.convertToUint8Array(createJWKSet(createJWK(keyId, key)));
};
+Utils.extractFirstLicenseKey = function(message) {
+ // Decodes data (Uint8Array) from base64 string.
+ // TODO(jrummell): Update once the EME spec is updated to say base64url
+ // encoding.
+ function base64Decode(data) {
+ return atob(data);
+ }
+
+ function convertToString(data) {
+ return String.fromCharCode.apply(null, Utils.convertToUint8Array(data));
+ }
+
+ try {
+ var json = JSON.parse(convertToString(message));
+ // Decode the first element of 'kids', return it as an Uint8Array.
+ return Utils.convertToUint8Array(base64Decode(json.kids[0]));
+ } catch (error) {
+ // Not valid JSON, so return message untouched as Uint8Array.
+ return Utils.convertToUint8Array(message);
+ }
+}
+
Utils.documentLog = function(log, success, time) {
if (!docLogs)
return;
return hex_str;
};
-Utils.getInitDataFromMessage = function(message, mediaType) {
- var initData = Utils.convertToUint8Array(message.message);
+Utils.getInitDataFromMessage = function(message, mediaType, decodeJSONMessage) {
+ var initData;
if (mediaType.indexOf('mp4') != -1) {
// Temporary hack for Clear Key in v0.1.
// If content uses mp4, then message.message is PSSH data. Instead of
// parsing that data we hard code the initData.
initData = Utils.convertToUint8Array(KEY_ID);
+ } else if (decodeJSONMessage) {
+ initData = Utils.extractFirstLicenseKey(message.message);
+ } else {
+ initData = Utils.convertToUint8Array(message.message);
}
return initData;
};