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

98 lines
2.6 KiB

/*
* Copyright (c) 2017 Philipp Hancke. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree.
*/
/* eslint-env node */
const EventEmitter = require('events');
const SDPUtils = require('sdp');
module.exports = function(window) {
const MediaStream = function(tracks) {
this.id = SDPUtils.generateIdentifier();
this._tracks = tracks || [];
this._emitter = new EventEmitter();
this.addEventListener = (name, cb) => {
this._emitter.addListener(name, cb);
};
this.removeEventListener = (name, cb) => {
this._emitter.removeListener(name, cb);
};
this.dispatchEvent = (ev) => {
this._emitter.emit(ev.type, ev);
};
};
MediaStream.prototype.getTracks = function() {
return this._tracks;
};
MediaStream.prototype.getAudioTracks = function() {
return this._tracks.filter(t => t.kind === 'audio');
};
MediaStream.prototype.getVideoTracks = function() {
return this._tracks.filter(t => t.kind === 'video');
};
MediaStream.prototype.addTrack = function(t) {
this._tracks.push(t);
};
MediaStream.prototype.removeTrack = function(t) {
var idx = this._tracks.indexOf(t);
if (idx !== -1) {
this._tracks.splice(idx, 1);
}
};
window.MediaStream = MediaStream;
const MediaStreamTrack = function() {
this.id = SDPUtils.generateIdentifier();
this._emitter = new EventEmitter();
this.addEventListener = (name, cb) => {
this._emitter.addListener(name, cb);
};
this.removeEventListener = (name, cb) => {
this._emitter.removeListener(name, cb);
};
this.dispatchEvent = (ev) => {
this._emitter.emit(ev.type, ev);
};
};
MediaStreamTrack.prototype.stop = function() {};
window.MediaStreamTrack = MediaStreamTrack;
const MediaStreamTrackEvent = function(type, args) {
this.type = type;
this.track = args.track;
};
window.MediaStreamTrackEvent = MediaStreamTrackEvent;
const getUserMedia = (constraints) => {
const tracks = [];
if (constraints.audio) {
let track = new MediaStreamTrack();
track.kind = 'audio';
tracks.push(track);
}
if (constraints.video) {
let track = new MediaStreamTrack();
track.kind = 'video';
tracks.push(track);
}
const stream = new MediaStream(tracks);
return new Promise((resolve) => {
resolve(stream);
});
};
window.navigator = {
getUserMedia: (constraints, cb, eb) => {
getUserMedia(constraints).then(cb, eb);
},
mediaDevices: {
getUserMedia
}
};
};