pssh-tools
Version:
Tools to generate PSSH Data and PSSH Box
62 lines • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeData = exports.encodePssh = void 0;
const path = require("path");
const protobuf = require("protobufjs");
const tools = require("./tools");
const getPsshData = (request) => {
const protoFile = path.join(__dirname, 'proto', 'WidevineCencHeader.proto');
const root = protobuf.loadSync(protoFile);
const WidevineCencHeader = root.lookupType('proto.WidevineCencHeader');
const payload = {
algorithm: 1 // 0: Unencrypted - 1: AESCTR
};
if (request.keyIds && request.keyIds.length > 0) {
const keyIdsBuffer = request.keyIds.map((key) => {
return Buffer.from(key, 'hex');
});
payload.keyId = keyIdsBuffer;
}
if (request.contentId) {
payload.contentId = Buffer.from(request.contentId);
}
if (request.trackType !== '') {
payload.trackType = request.trackType;
}
if (request.provider !== '') {
payload.provider = request.provider;
}
if (request.protectionScheme) {
payload.protectionScheme = Buffer.from(request.protectionScheme).readInt32BE(0);
}
const errMsg = WidevineCencHeader.verify(payload);
if (errMsg) {
throw new Error(errMsg);
}
const message = WidevineCencHeader.create(payload);
const buffer = WidevineCencHeader.encode(message).finish();
return Buffer.from(buffer).toString('base64');
};
const getPsshBox = (request) => {
// data
const data = getPsshData(request);
const requestData = {
systemId: tools.system.WIDEVINE.id,
keyIds: request.keyIds,
data: data
};
const psshHeader = tools.getPsshHeader(requestData);
return psshHeader;
};
const encodePssh = (request) => {
if (request.dataOnly) {
return getPsshData(request);
}
return getPsshBox(request);
};
exports.encodePssh = encodePssh;
const decodeData = (data) => {
return tools.decodePsshData(tools.system.WIDEVINE.name, data);
};
exports.decodeData = decodeData;
//# sourceMappingURL=widevine.js.map