vendor/assets/javascripts/webshims/shims/usermedia-shim.js in webshims-rails-1.14.6 vs vendor/assets/javascripts/webshims/shims/usermedia-shim.js in webshims-rails-1.15.2

- old
+ new

@@ -1,20 +1,17 @@ webshim.register('usermedia-shim', function($, webshim, window, document, undefined, options){ "use strict"; var addMediaAPI; - var streamUrlPrefix = 'webshimstream'; var id = 0; - var streams = {}; var streamCb = {}; var hasSwf = swfmini.hasFlashPlayerVersion('11.3'); - var mediaOptions = webshim.cfg.mediaelement; var mediaelement = webshim.mediaelement; var flashEvents = { - NOT_SUPPORTED_ERROR: 1, - PERMISSION_DENIED: 1, + NotSupportedError: 1, + PermissionDeniedError: 1, //not implemented yet - MANDATORY_UNSATISFIED_ERROR: 1, + ConstraintNotSatisfiedError: 1, onUserSuccess: 1 }; var noSource = function(){ return !$.prop(this, 'currentSrc') && !mediaelement.srces(this).length; }; @@ -49,10 +46,17 @@ success: successCb, fail: failCb }; addMediaAPI(); + /* + { width: 650 }, + { width: { min: 650 }}, + { frameRate: 60 }, + { width: { max: 800 }}, + { facingMode: "user" } + */ mediaelement.createSWF(media, {srcProp: src, streamrequest: true, type: 'jarisplayer/stream'}); } @@ -71,10 +75,12 @@ return $media[0]; } function LocalMediaStream(data, api, id){ + data._cTNow = Date.now(); + data._cTID = false; webshim.defineProperties(this, { _swf: { value: api, enumerable: false }, @@ -90,24 +96,38 @@ } LocalMediaStream.prototype = { - currentTime: 0, stop: function(){ + if(this._data._cTID){ + clearInterval(this._data._cTID); + } mediaelement.queueSwfMethod(this._data._elem, 'api_detach', [], this._data); - }, - getAudioTracks: $.noop, - getVideoTracks: $.noop + this._data.ended = true; + $(this._data._elem).trigger('ended'); + } }; webshim.usermedia = { attach: function(elem, canPlaySrc, data){ + var $media; if(data._usermedia == canPlaySrc.srcProp){ mediaelement.queueSwfMethod(data._elem, 'api_attach', [], data); - $(data._elem).trigger('loadstart'); + $media = $(data._elem).trigger('loadstart'); + data._cTID = setInterval(function(){ + if(data.ended){ + clearInterval(data._cTID); + } else if(!data.paused){ + data.currentTime = (Date.now() - data._cTNow) / 1000; + $media.triggerHandler('timeupdate'); + } + }, 250); + if(!data.paused){ + mediaelement.queueSwfMethod(data._elem, 'api_play', [], data); + } } else { webshim.error('something went wrong'); } }, request: function(elem, canPlaySrc, data){ @@ -118,35 +138,12 @@ $(data.api).css({position: 'relative', zIndex: '999999'}); } } }; - URL._nativeCreateObjectURL = URL.createObjectURL; - URL._nativeRevokeObjectURL = URL.revokeObjectURL; - URL.createObjectURL = function(stream){ - var url = ''; - if(URL._nativeCreateObjectURL && !stream._wsStreamId){ - url = URL._nativeCreateObjectURL(stream); - } else if(stream._wsStreamId) { - url = stream._wsStreamId; - streams[url] = stream; - } - return url; - }; - - URL.revokeObjectURL = function(url){ - if(streams[url]){ - delete streams[url]; - } - if(URL._nativeRevokeObjectURL){ - return URL._nativeRevokeObjectURL(url); - } - }; - webshim.usermediastreams = streams; - addMediaAPI = function(){ if(!webshim.mediaelement.createSWF){return;} addMediaAPI = $.noop; var revert = function(data){ setTimeout(function(){ @@ -159,13 +156,13 @@ var fail = function(jaris, data){ revert(data); streamCb[data._usermedia].fail({name: jaris.type}); }; $.extend(mediaelement.onEvent, { - NOT_SUPPORTED_ERROR: fail, - PERMISSION_DENIED: fail, + NotSupportedError: fail, + PermissionDeniedError: fail, //not implemented yet - MANDATORY_UNSATISFIED_ERROR: fail, + ConstraintNotSatisfiedError: fail, onUserSuccess: function(jaris, data){ revert(data); streamCb[data._usermedia].success(new LocalMediaStream(data, data.api, data._usermedia)); } });