rx-player
Version:
Canal+ HTML5 Video Player
74 lines (73 loc) • 2.9 kB
JavaScript
;
/**
* 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`.");
}
}
}