Skip to content

Conversation

@ShubhamSharma2311
Copy link
Contributor

All unwanted code is removed and the package-lock.json file is also fixed.

@robwalch
Copy link
Collaborator

robwalch commented Aug 29, 2025

Hi @ShubhamSharma2311,

Did you mean to merge these changes into the branch submitted for #7509?

@ShubhamSharma2311 ShubhamSharma2311 changed the title remove unwanted lines and fix the package-lock.json file fix playready-key-endianness and remove the previous conflicts Aug 29, 2025
@ShubhamSharma2311
Copy link
Contributor Author

#7510 (comment)
yes sir

},
);

// Handle case where no keys matched but all have the same status
Copy link
Contributor

@hongfeih-es hongfeih-es Aug 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @ShubhamSharma2311 how can we reproduce this? not sure this is required.
Still saw wrong key ids, seems sometimes endianness doesn't need to be changed, is this why?
Correct:

  • e13d04505bd346a088b41e3b8e9e97af
  • 76becf7d11af43698295422217009743

Incorrect:

  • 50043de1d35ba04688b41e3b8e9e97af
  • 7dcfbe76af1169438295422217009743
[log] > [eme]: unmatched key status change "status-pending" for keyStatuses keyId: e13d04505bd346a088b41e3b8e9e97af session keyId: b255031432584910a8272213421391b8 uri: data:text/plain;charset=UTF-16;base64,BgIAAAEAAQD8ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgBBAE4AVgBzAGwAZwB5AEUARQBtAG8ASgB5AEkAVABRAGgATwBSAHUAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAEMAZwBNADgARQBLADkAeQBsAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
eme-controller.ts:915 [log] > [eme]: unmatched key status change "status-pending" for keyStatuses keyId: 76becf7d11af43698295422217009743 session keyId: b255031432584910a8272213421391b8 uri: data:text/plain;charset=UTF-16;base64,BgIAAAEAAQD8ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgBBAE4AVgBzAGwAZwB5AEUARQBtAG8ASgB5AEkAVABRAGgATwBSAHUAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAEMAZwBNADgARQBLADkAeQBsAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
eme-controller.ts:915 [log] > [eme]: unmatched key status change "status-pending" for keyStatuses keyId: 50043de1d35ba04688b41e3b8e9e97af session keyId: b255031432584910a8272213421391b8 uri: data:text/plain;charset=UTF-16;base64,BgIAAAEAAQD8ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgBBAE4AVgBzAGwAZwB5AEUARQBtAG8ASgB5AEkAVABRAGgATwBSAHUAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAEMAZwBNADgARQBLADkAeQBsAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
eme-controller.ts:915 [log] > [eme]: unmatched key status change "status-pending" for keyStatuses keyId: 7dcfbe76af1169438295422217009743 session keyId: b255031432584910a8272213421391b8 uri: data:text/plain;charset=UTF-16;base64,BgIAAAEAAQD8ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgBBAE4AVgBzAGwAZwB5AEUARQBtAG8ASgB5AEkAVABRAGgATwBSAHUAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAEMAZwBNADgARQBLADkAeQBsAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
eme-controller.ts:915 [log] > [eme]: unmatched key status change "usable" for keyStatuses keyId: e13d04505bd346a088b41e3b8e9e97af session keyId: b255031432584910a8272213421391b8 uri: data:text/plain;charset=UTF-16;base64,BgIAAAEAAQD8ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgBBAE4AVgBzAGwAZwB5AEUARQBtAG8ASgB5AEkAVABRAGgATwBSAHUAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAEMAZwBNADgARQBLADkAeQBsAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
eme-controller.ts:915 [log] > [eme]: unmatched key status change "usable" for keyStatuses keyId: 76becf7d11af43698295422217009743 session keyId: b255031432584910a8272213421391b8 uri: data:text/plain;charset=UTF-16;base64,BgIAAAEAAQD8ATwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgBBAE4AVgBzAGwAZwB5AEUARQBtAG8ASgB5AEkAVABRAGgATwBSAHUAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBVAEMAZwBNADgARQBLADkAeQBsAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's changed when read from the PlayReady EXT-X-KEY, so it needs to be changes here too to match:

export function parsePlayReadyWRM(keyBytes: Uint8Array<ArrayBuffer>) {
const keyBytesUtf16 = new Uint16Array(
keyBytes.buffer,
keyBytes.byteOffset,
keyBytes.byteLength / 2,
);
const keyByteStr = String.fromCharCode.apply(null, Array.from(keyBytesUtf16));
// Parse Playready WRMHeader XML
const xmlKeyBytes = keyByteStr.substring(
keyByteStr.indexOf('<'),
keyByteStr.length,
);
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlKeyBytes, 'text/xml');
const keyData = xmlDoc.getElementsByTagName('KID')[0];
if (keyData) {
const keyId = keyData.childNodes[0]
? keyData.childNodes[0].nodeValue
: keyData.getAttribute('VALUE');
if (keyId) {
const keyIdArray = base64Decode(keyId).subarray(0, 16);
// KID value in PRO is a base64-encoded little endian GUID interpretation of UUID
// KID value in ‘tenc’ is a big endian UUID GUID interpretation of UUID
changeEndianness(keyIdArray);

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hongfeih-es,

I plan to merge these changes. I have another PR in the works to improve Multi-key handling (group playlist key data with different key-is in the same session). I'll share more soon.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sir, now I have to fix this thing #7510 (comment). am I right ??

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sir, now I have to fix this thing #7510 (comment). am I right ??

No. These changes have been merged. New changes are in review with #7517.

Please leave review comments on #7517. This PR can be tested in the branch preview: https://bugfix-eme-multi-key.hls-js-4zn.pages.dev/demo/.

Or, file new issues against latest dev/canary at https://hlsjs-dev.video-dev.org/demo/.

@robwalch robwalch changed the title fix playready-key-endianness and remove the previous conflicts Fix PlayReady key endianness Aug 29, 2025
@robwalch robwalch merged commit f9e23c0 into video-dev:master Aug 29, 2025
12 checks passed
robwalch pushed a commit that referenced this pull request Aug 30, 2025
@robwalch robwalch mentioned this pull request Aug 30, 2025
3 tasks
@robwalch robwalch modified the milestones: 1.7.0, 1.6.12 Sep 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Development

Successfully merging this pull request may close these issues.

extract key id incorrectly from key statuses when using PlayReady

3 participants