Merge pull request #1058 from paulkaplan/fix-gum

Fix video motion in Safari/Firefox
This commit is contained in:
Paul Kaplan 2018-04-13 11:25:07 -04:00 committed by GitHub
commit 651fb58abc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 10 deletions

View file

@ -162,7 +162,7 @@ class VideoMotion {
this.prev = this.curr; this.prev = this.curr;
// Create a clone of the array so any modifications made to the source // Create a clone of the array so any modifications made to the source
// array do not affect the work done in here. // array do not affect the work done in here.
this.curr = new Uint32Array(source.buffer.slice()); this.curr = new Uint32Array(source.buffer.slice(0));
// Swap _prev and _curr. Copy one of the color components of the new // Swap _prev and _curr. Copy one of the color components of the new
// array into _curr overwriting what was the old _prev data. // array into _curr overwriting what was the old _prev data.

View file

@ -240,23 +240,27 @@ class Video {
return this._singleSetup; return this._singleSetup;
} }
this._singleSetup = new Promise((resolve, reject) => { this._singleSetup = navigator.mediaDevices.getUserMedia({
navigator.getUserMedia({
audio: false, audio: false,
video: { video: {
width: {min: 480, ideal: 640}, width: {min: 480, ideal: 640},
height: {min: 360, ideal: 480} height: {min: 360, ideal: 480}
} }
}, resolve, reject);
}) })
.then(stream => { .then(stream => {
this._video = document.createElement('video'); this._video = document.createElement('video');
// Use the new srcObject API, falling back to createObjectURL
try {
this._video.srcObject = stream;
} catch (error) {
this._video.src = window.URL.createObjectURL(stream); this._video.src = window.URL.createObjectURL(stream);
}
// Hint to the stream that it should load. A standard way to do this // Hint to the stream that it should load. A standard way to do this
// is add the video tag to the DOM. Since this extension wants to // is add the video tag to the DOM. Since this extension wants to
// hide the video tag and instead render a sample of the stream into // hide the video tag and instead render a sample of the stream into
// the webgl rendered Scratch canvas, another hint like this one is // the webgl rendered Scratch canvas, another hint like this one is
// needed. // needed.
this._video.play(); // Needed for Safari/Firefox, Chrome auto-plays.
this._track = stream.getTracks()[0]; this._track = stream.getTracks()[0];
this._setupPreview(); this._setupPreview();
return this; return this;