rx-player
Version:
Canal+ HTML5 Video Player
61 lines (60 loc) • 3.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DUMMY_PLAY_READY_HEADER = void 0;
exports.generatePlayReadyInitData = generatePlayReadyInitData;
var byte_parsing_1 = require("../utils/byte_parsing");
var string_parsing_1 = require("../utils/string_parsing");
/**
* The PlayReadyHeader sample that will be used to test if the CDM is supported.
* The KID does not matter because no content will be played, it's only to check if
* the CDM is capable of creating a session and generating a request.
*/
exports.DUMMY_PLAY_READY_HEADER = '<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0"><DATA><PROTECTINFO><KEYLEN>16</KEYLEN><ALGID>AESCTR</ALGID></PROTECTINFO><KID>ckB07BNLskeUq0qd83fTbA==</KID><DS_ID>yYIPDBca1kmMfL60IsfgAQ==</DS_ID><CUSTOMATTRIBUTES xmlns=""><encryptionref>312_4024_2018127108</encryptionref></CUSTOMATTRIBUTES><CHECKSUM>U/tsUYRgMzw=</CHECKSUM></DATA></WRMHEADER>';
/**
* Generate the "cenc" init data for playready from the PlayreadyHeader string.
* @param {string} playreadyHeader - String representing the PlayreadyHeader XML.
* @returns {Uint8Array} The init data generated for that PlayreadyHeader.
* @see https://learn.microsoft.com/en-us/playready/specifications/playready-header-specification
*/
function generatePlayReadyInitData(playreadyHeader) {
var recordValueEncoded = (0, string_parsing_1.strToUtf16LE)(playreadyHeader);
var recordLength = (0, byte_parsing_1.itole2)(recordValueEncoded.length);
// RecordType: 0x0001 Indicates that the record contains a PlayReady Header (PRH).
var recordType = new Uint8Array([1, 0]);
var numberOfObjects = new Uint8Array([1, 0]); // 1 PlayReady object
/* playReadyObjectLength equals = X bytes for record + 2 bytes for record length,
+ 2 bytes for record types + 2 bytes for number of object */
var playReadyObjectLength = (0, byte_parsing_1.itole4)(recordValueEncoded.length + 6);
var playReadyObject = (0, byte_parsing_1.concat)(playReadyObjectLength, // 4 bytes for the Playready object length
numberOfObjects, // 2 bytes for the number of PlayReady objects
recordType, // 2 bytes for record type
recordLength, // 2 bytes for record length
recordValueEncoded);
/** the systemId is define at https://dashif.org/identifiers/content_protection/ */
var playreadySystemId = (0, string_parsing_1.hexToBytes)("9a04f07998404286ab92e65be0885f95");
return generateInitData(playReadyObject, playreadySystemId);
}
/**
* Generate the "cenc" initData given the data and the systemId to use.
* Note this will generate an initData for version 0 of pssh.
* @param data - The data that is contained inside the pssh.
* @param systemId - The systemId to use.
* @returns
*/
function generateInitData(data, systemId) {
var psshBoxName = (0, string_parsing_1.strToUtf8)("pssh");
var versionAndFlags = new Uint8Array([0, 0, 0, 0]); // pssh version 0
var sizeOfData = (0, byte_parsing_1.itobe4)(data.length);
var psshSize = (0, byte_parsing_1.itobe4)(4 /* pssh size */ +
4 /* pssh box */ +
4 /* version and flags */ +
16 /* systemId */ +
4 /* size of data */ +
data.length /* data */);
return (0, byte_parsing_1.concat)(psshSize, // 4 bytes for the pssh size
psshBoxName, // 4 bytes for the pssh box
versionAndFlags, // 4 bytes for version and flags
systemId, // 16 bytes for the systemId
sizeOfData, // 4 bytes for the data size
data);
}