-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Fix PlayReady key endianness #7510
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix PlayReady key endianness #7510
Conversation
|
Did you mean to merge these changes into the branch submitted for #7509? |
|
#7510 (comment) |
| }, | ||
| ); | ||
|
|
||
| // Handle case where no keys matched but all have the same status |
There was a problem hiding this comment.
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=
There was a problem hiding this comment.
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:
hls.js/src/utils/mediakeys-helper.ts
Lines 181 to 205 in 665ea29
| 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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
There was a problem hiding this comment.
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 ??
There was a problem hiding this comment.
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/.
(cherry picked from commit f9e23c0)
All unwanted code is removed and the package-lock.json file is also fixed.