sp-compositor
Version:
Electron app that turns websites into video streams
129 lines (114 loc) • 3.72 kB
JavaScript
;
var _spClient = require("sp-client");
var debug = require("debug");
var log = debug("sp:sp-compositor-renderer");
var _require = require("electron"),
desktopCapturer = _require.desktopCapturer;
var url = require("url");
var querystring = require("querystring");
var fs = require("fs");
var path = require("path");
/* eslint-disable no-console */
var options = querystring.parse(url.parse(document.location.href).query);
log(options);
var video = document.querySelector("video");
video.style.width = options.width + "px";
video.style.height = options.height + "px";
desktopCapturer.getSources({ types: ["window", "screen"] }, function (error, sources) {
if (error) {
throw error;
}
var source = sources.find(function (source) {
return source.name === options.windowId;
});
if (!source) {
if (sources.length > 0) {
console.log("Couldn't find " + options.windowId + ", falling back to " + JSON.stringify(sources[0]));
source = sources[0];
} else {
throw new Error("No sources received from desktopCapturer");
}
}
navigator.mediaDevices.getUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: "desktop",
chromeMediaSourceId: source.id,
minWidth: options.width,
maxWidth: options.width,
minHeight: options.height,
maxHeight: options.height
}
}
}).then(function (stream) {
// video.srcObject = stream;
var recorder = new MediaRecorder(stream);
window.recorder = recorder;
var converter = new _spClient.convertVideoStream();
var dash = (0, _spClient.dashStream)();
if (options.rtmp) {
converter.pipe((0, _spClient.rtmpOutputStream)({ rtmpUrl: options.rtmp }));
} else {
converter.pipe(dash);
var server = (0, _spClient.dashServer)(dash);
server.listen(options.port);
}
recorder.ondataavailable = function (event) {
var fileReader = new FileReader();
fileReader.onload = function () {
try {
converter.write(Buffer.from(this.result));
} catch (e) {
console.error(e);
}
};
fileReader.readAsArrayBuffer(event.data);
};
recorder.onerror = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return log("onerror", args);
};
recorder.onpause = function () {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return log("onpause", args);
};
recorder.onresume = function () {
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
return log("onresume", args);
};
recorder.onstart = function () {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
return log("onstart", args);
};
recorder.onstop = function () {
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
return log("onstop", args);
};
setTimeout(function () {
log("starting");
recorder.start(100);
}, 5000);
}).catch(function (err) {
console.log("getUserMedia error");
console.log(err);
});
// if (error) throw error;
// for (let i = 0; i < sources.length; ++i) {
// if (sources[i].name === "Electron") {
//
// return;
// }
// }
});
//# sourceMappingURL=renderer.js.map