UNPKG

pssh-tools

Version:

Tools to generate PSSH Data and PSSH Box

62 lines 2.09 kB
"use strict"; 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