Fixed bug in event-handling; Updated webrtc-adapter

This commit is contained in:
Christoph Oberhofer
2016-06-07 23:04:23 +02:00
parent 36205f8ceb
commit 3df696a1f7
8 changed files with 3093 additions and 2048 deletions
+1158 -636
View File
File diff suppressed because one or more lines are too long
+4 -3
View File
File diff suppressed because one or more lines are too long
+1169 -647
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -108,6 +108,6 @@
"lodash": "^4.6.1",
"ndarray": "^1.0.18",
"ndarray-linear-interpolate": "^1.0.0",
"webrtc-adapter": "^1.0.6"
"webrtc-adapter": "^1.3.0"
}
}
+13 -1
View File
@@ -50,10 +50,22 @@ export default (function() {
var event = getEvent(eventName),
subscribers = event.subscribers;
event.subscribers = subscribers.filter(function(subscriber) {
// Publish one-time subscriptions
subscribers.filter(function(subscriber) {
return !!subscriber.once;
}).forEach((subscriber) => {
publishSubscription(subscriber, data);
});
// remove them from the subscriber
event.subscribers = subscribers.filter(function(subscriber) {
return !subscriber.once;
});
// publish the rest
event.subscribers.forEach((subscriber) => {
publishSubscription(subscriber, data);
});
},
once: function(event, callback, async) {
subscribe(event, {
+12 -12
View File
@@ -1,7 +1,6 @@
import {merge, pick} from 'lodash';
var streamRef,
loadedDataHandler;
var streamRef;
function waitForVideo(video) {
return new Promise((resolve, reject) => {
@@ -35,13 +34,14 @@ function waitForVideo(video) {
function initCamera(video, constraints) {
return navigator.mediaDevices.getUserMedia(constraints)
.then((stream) => {
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
streamRef = stream;
video.src = window.URL.createObjectURL(stream);
video.onloadedmetadata = (e) => {
video.setAttribute("autoplay", 'true');
video.srcObject = stream;
video.addEventListener('loadedmetadata', () => {
video.play();
resolve();
};
});
});
})
.then(waitForVideo.bind(null, video));
@@ -51,13 +51,13 @@ function deprecatedConstraints(videoConstraints) {
const normalized = pick(videoConstraints, ["width", "height", "facingMode",
"aspectRatio", "deviceId"]);
if (typeof videoConstraints["minAspectRatio"] !== 'undefined' &&
videoConstraints["minAspectRatio"] > 0) {
normalized["aspectRatio"] = videoConstraints["minAspectRatio"];
if (typeof videoConstraints.minAspectRatio !== 'undefined' &&
videoConstraints.minAspectRatio > 0) {
normalized.aspectRatio = videoConstraints.minAspectRatio;
console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead");
}
if (typeof videoConstraints["facing"] !== 'undefined') {
normalized["facingMode"] = videoConstraints["facing"];
if (typeof videoConstraints.facing !== 'undefined') {
normalized.facingMode = videoConstraints.facing;
console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'");
}
return normalized;
@@ -69,7 +69,7 @@ function applyCameraFacing(facing, constraints) {
}
if ( typeof MediaStreamTrack !== 'undefined' &&
typeof MediaStreamTrack.getSources !== 'undefined') {
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
MediaStreamTrack.getSources((sourceInfos) => {
const videoSource = sourceInfos.filter((sourceInfo) => (
sourceInfo.kind === "video" && sourceInfo.facing === facing
-1
View File
@@ -67,7 +67,6 @@ function initInputStream(cb) {
}
_inputStream.setAttribute("preload", "auto");
_inputStream.setAttribute("autoplay", true);
_inputStream.setInputStream(_config.inputStream);
_inputStream.addEventListener("canrecord", canRecord.bind(undefined, cb));
}
+6 -17
View File
@@ -27,9 +27,10 @@ beforeEach(function() {
sinon.spy(tracks[0], "stop");
video = {
src: null,
srcObject: null,
addEventListener: function() {},
removeEventListener: function() {},
setAttribute: sinon.spy(),
play: function() {},
videoWidth: 320,
videoHeight: 480
@@ -60,12 +61,9 @@ describe('success', function() {
CameraAccess.request(video, {})
.then(function () {
expect(navigator.mediaDevices.getUserMedia.calledOnce).to.equal(true);
expect(video.src).to.deep.equal(stream);
expect(video.srcObject).to.deep.equal(stream);
done();
})
window.setTimeout(() => {
video.onloadedmetadata();
}, 100);
});
it("should allow deprecated constraints to be used", (done) => {
@@ -89,9 +87,6 @@ describe('success', function() {
expect(args[0].video.maxAspectRatio).not.to.be.defined;
done();
})
window.setTimeout(() => {
video.onloadedmetadata();
}, 100);
});
});
@@ -122,9 +117,6 @@ describe('success', function() {
expect(args[0].video.deviceId).to.equal("user");
done();
})
window.setTimeout(() => {
video.onloadedmetadata();
}, 100);
});
});
@@ -132,15 +124,12 @@ describe('success', function() {
it('should release the camera', function (done) {
CameraAccess.request(video, {})
.then(function () {
expect(video.src).to.deep.equal(stream);
expect(video.srcObject).to.deep.equal(stream);
CameraAccess.release();
expect(video.src.getVideoTracks()).to.have.length(1);
expect(video.src.getVideoTracks()[0].stop.calledOnce).to.equal(true);
expect(video.srcObject.getVideoTracks()).to.have.length(1);
expect(video.srcObject.getVideoTracks()[0].stop.calledOnce).to.equal(true);
done();
});
window.setTimeout(() => {
video.onloadedmetadata();
}, 100);
});
});
});