You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
967 B
JavaScript

"use strict";
const Promise = require("bluebird");
const awaitVideoElementLoad = require("../await-video-element-load");
function trySetSrcObject(element, file) {
if ("srcObject" in element) {
try {
element.srcObject = file;
return true;
} catch (error) {
if (error.name === "TypeError") {
return false;
} else {
throw error;
}
}
} else {
return false;
}
}
module.exports = function loadVideoFile(file) {
// FIXME: Validation
let cleanupFunction;
let element = document.createElement("video");
if (!trySetSrcObject(element, file)) {
let objectURL = URL.createObjectURL(file);
element.src = objectURL;
// FIXME: Verify that this works correctly, and doesn't prematurely kill the video!
cleanupFunction = () => URL.revokeObjectURL(objectURL);
}
return Promise.try(() => {
return awaitVideoElementLoad(element);
}).then(() => {
if (cleanupFunction != null) {
cleanupFunction();
}
return element;
});
};