UNPKG

rx-player

Version:
74 lines (73 loc) 2.9 kB
"use strict"; /** * This file is the entry point of the default "RxPlayer Worker". * It is only relied on when running in a multithread mode. * * Note that the application can also define its own "RxPlayer worker" in which * case this file is not depended on. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = initializeWorker; var entry_1 = require("./core/entry"); var features_1 = require("./features"); var log_1 = require("./log"); var classes_1 = require("./manifest/classes"); var js_parser_1 = require("./parsers/manifest/dash/js-parser"); var wasm_parser_1 = require("./parsers/manifest/dash/wasm-parser"); var dash_1 = require("./transports/dash"); var global_scope_1 = require("./utils/global_scope"); function initializeWorker(corePlugins) { // Initialize Manually a `DashWasmParser` and add the feature. var dashWasmParser = new wasm_parser_1.default(); features_1.default.dashParsers.wasm = dashWasmParser; features_1.default.dashParsers.js = js_parser_1.default; features_1.default.transports.dash = dash_1.default; global_scope_1.default.onmessageerror = function (_msg) { log_1.default.error("Core", "Error when receiving message from main thread."); }; (0, entry_1.default)(function (handler) { onmessage = handler; }, sendMessage, corePlugins); } /** * Perform a `postMessage` to main thread with the given message. * Arguments follow the `postMessage` API. * @param {Object} msg * @param {Array.<Object>} [transferables] */ function sendMessage(msg, transferables) { updateMessageFormat(msg); if (msg.type !== "log" /* CoreMessageType.LogMessage */) { log_1.default.debug("M<--C", "Sending message from worker", { name: msg.type }); } if (transferables === undefined) { postMessage(msg); } else { // TypeScript made a mistake here, and 2busy2fix postMessage(msg, transferables); } } /** * Ensure that we're sending data that can be serialized, as this is a * requirement for the `postMessage` browser API. * * If necessary, mutations are done in place. * @param {Object} msg */ function updateMessageFormat(msg) { if (msg.type === "manifest-ready" /* CoreMessageType.ManifestReady */ || msg.type === "manifest-update" /* CoreMessageType.ManifestUpdate */) { if (msg.value.manifest instanceof classes_1.default) { msg.value.manifest = msg.value.manifest.getMetadataSnapshot(); if (msg.type === "manifest-update" /* CoreMessageType.ManifestUpdate */) { // Remove `periods` key to reduce cost of an unnecessary manifest // clone. msg.value.manifest.periods = []; } } else { log_1.default.warn("Core", "the Manifest instance should be communicated to `sendMessage`."); } } }