Phaser.Plugin.Webcam = function (game, parent){ Phaser.Plugin.call(this, game, parent); if (!game.device.getUserMedia) { return false ; } navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; this.context = null ; this.stream = null ; this.video = _AN_Call_createelement('createElement', document, 'video'); this.video.autoplay = true ; } ; Phaser.Plugin.Webcam.prototype = Object.create(Phaser.Plugin.prototype); Phaser.Plugin.Webcam.prototype.constructor = Phaser.Plugin.Webcam; Phaser.Plugin.Webcam.prototype.start = function (width, height, context){ console.log('Webcam start', width, height); this.context = context; if (!this.stream) { navigator.getUserMedia({ video: { mandatory: { minWidth: width, minHeight: height} } } , this.connectCallback.bind(this), this.errorCallback.bind(this)); } } ; Phaser.Plugin.Webcam.prototype.stop = function (){ if (this.stream) { this.stream.stop(); this.stream = null ; } } ; Phaser.Plugin.Webcam.prototype.connectCallback = function (stream){ this.stream = stream; _AN_Write_src('src', this.video, false , _AN_Read_url('URL', window).createObjectURL(this.stream)); } ; Phaser.Plugin.Webcam.prototype.errorCallback = function (e){ console.log('Video Stream rejected', e); } ; Phaser.Plugin.Webcam.prototype.grab = function (context, x, y){ if (this.stream) { context.drawImage(this.video, x, y); } } ; Phaser.Plugin.Webcam.prototype.update = function (){ if (this.stream) { this.context.drawImage(this.video, 0, 0); } } ; Object.defineProperty(Phaser.Plugin.Webcam.prototype, "active", { get: function (){ return (this.stream); } } );