From 5dd23a842c30e80de965f72b6bfe33e03b9c71d8 Mon Sep 17 00:00:00 2001 From: Muaz Khan Date: Sun, 13 Jan 2019 16:51:08 +0500 Subject: [PATCH] tiny updates in the dev/RecordRTC.promises.js --- RecordRTC.js | 24 ++++++++++++++++------ RecordRTC.min.js | 6 +++--- bower.json | 2 +- dev/RecordRTC.promises.js | 16 +++++++++++++-- package.json | 2 +- simple-demos/RecordRTCPromisesHandler.html | 9 ++++---- 6 files changed, 42 insertions(+), 17 deletions(-) diff --git a/RecordRTC.js b/RecordRTC.js index 873769f5..aade0e8a 100644 --- a/RecordRTC.js +++ b/RecordRTC.js @@ -1,9 +1,9 @@ 'use strict'; -// Last time updated: 2019-01-11 12:28:08 PM UTC +// Last time updated: 2019-01-13 11:46:56 AM UTC // ________________ -// RecordRTC v5.5.1 +// RecordRTC v5.5.2 // Open-Sourced: https://github.com/muaz-khan/RecordRTC @@ -773,7 +773,7 @@ function RecordRTC(mediaStream, config) { * @example * alert(recorder.version); */ - version: '5.5.1' + version: '5.5.2' }; if (!this) { @@ -791,7 +791,7 @@ function RecordRTC(mediaStream, config) { return returnObject; } -RecordRTC.version = '5.5.1'; +RecordRTC.version = '5.5.2'; if (typeof module !== 'undefined' /* && !!module.exports*/ ) { module.exports = RecordRTC; @@ -5541,6 +5541,12 @@ function RecordRTCPromisesHandler(mediaStream, options) { try { self.recordRTC.stopRecording(function(url) { self.blob = self.recordRTC.getBlob(); + + if (!self.blob || !self.blob.size) { + reject('Empty blob.', self.blob); + return; + } + resolve(url); }); } catch (e) { @@ -5578,11 +5584,17 @@ function RecordRTCPromisesHandler(mediaStream, options) { * @memberof RecordRTCPromisesHandler * @example * recorder.stopRecording().then(function() { - * var blob = recorder.getBlob(); + * recorder.getBlob().then(function(blob) {}) * }).catch(errorCB); */ this.getBlob = function() { - return self.recordRTC.getBlob(); + return new Promise(function(resolve, reject) { + try { + resolve(self.recordRTC.getBlob()); + } catch (e) { + reject(e); + } + }); }; /** diff --git a/RecordRTC.min.js b/RecordRTC.min.js index ff3fd4cd..bfe12cc9 100644 --- a/RecordRTC.min.js +++ b/RecordRTC.min.js @@ -1,9 +1,9 @@ 'use strict'; -// Last time updated: 2019-01-11 12:28:08 PM UTC +// Last time updated: 2019-01-13 11:46:56 AM UTC // ________________ -// RecordRTC v5.5.1 +// RecordRTC v5.5.2 // Open-Sourced: https://github.com/muaz-khan/RecordRTC @@ -13,4 +13,4 @@ // -------------------------------------------------- -"use strict";function RecordRTC(mediaStream,config){if(!mediaStream)throw"First parameter is required.";config=new RecordRTCConfiguration(mediaStream,config=config||{type:"video"});var self=this;function initRecorder(initCallback){initCallback&&(config.initCallback=function(){initCallback(),initCallback=config.initCallback=null});var Recorder=new GetRecorderType(mediaStream,config);(mediaRecorder=new Recorder(mediaStream,config)).record(),setState("recording"),config.disableLogs||console.log("Initialized recorderType:",mediaRecorder.constructor.name,"for output-type:",config.type)}function stopRecording(callback){if(callback=callback||function(){},mediaRecorder){if("paused"===self.state)return self.resumeRecording(),void setTimeout(function(){stopRecording(callback)},1);"recording"===self.state||config.disableLogs||console.warn('Recording state should be: "recording", however current state is: ',self.state),config.disableLogs||console.log("Stopped recording "+config.type+" stream."),"gif"!==config.type?mediaRecorder.stop(_callback):(mediaRecorder.stop(),_callback()),setState("stopped")}else warningLog();function _callback(__blob){if(mediaRecorder){Object.keys(mediaRecorder).forEach(function(key){"function"!=typeof mediaRecorder[key]&&(self[key]=mediaRecorder[key])});var blob=mediaRecorder.blob;if(!blob){if(!__blob)throw"Recording failed.";mediaRecorder.blob=blob=__blob}if(blob&&!config.disableLogs&&console.log(blob.type,"->",bytesToSize(blob.size)),callback){var url;try{url=URL.createObjectURL(blob)}catch(e){}"function"==typeof callback.call?callback.call(self,url):callback(url)}config.autoWriteToDisk&&getDataURL(function(dataURL){var parameter={};parameter[config.type+"Blob"]=dataURL,DiskStorage.Store(parameter)})}else"function"==typeof callback.call?callback.call(self,""):callback("")}}function readFile(_blob){postMessage((new FileReaderSync).readAsDataURL(_blob))}function getDataURL(callback,_mediaRecorder){if(!callback)throw"Pass a callback function over getDataURL.";var blob=_mediaRecorder?_mediaRecorder.blob:(mediaRecorder||{}).blob;if(!blob)return config.disableLogs||console.warn("Blob encoder did not finish its job yet."),void setTimeout(function(){getDataURL(callback,_mediaRecorder)},1e3);if("undefined"==typeof Worker||navigator.mozGetUserMedia){var reader=new FileReader;reader.readAsDataURL(blob),reader.onload=function(event){callback(event.target.result)}}else{var webWorker=function(_function){try{var blob=URL.createObjectURL(new Blob([_function.toString(),"this.onmessage = function (eee) {"+_function.name+"(eee.data);}"],{type:"application/javascript"})),worker=new Worker(blob);return URL.revokeObjectURL(blob),worker}catch(e){}}(readFile);webWorker.onmessage=function(event){callback(event.data)},webWorker.postMessage(blob)}}function handleRecordingDuration(counter){counter=counter||0,"paused"!==self.state?"stopped"!==self.state&&(counter>=self.recordingDuration?stopRecording(self.onRecordingStopped):(counter+=1e3,setTimeout(function(){handleRecordingDuration(counter)},1e3))):setTimeout(function(){handleRecordingDuration(counter)},1e3)}function setState(state){self&&(self.state=state,"function"==typeof self.onStateChanged.call?self.onStateChanged.call(self,state):self.onStateChanged(state))}var mediaRecorder,WARNING='It seems that recorder is destroyed or "startRecording" is not invoked for '+config.type+" recorder.";function warningLog(){!0!==config.disableLogs&&console.warn(WARNING)}var returnObject={startRecording:function(config2){return config2&&(config=new RecordRTCConfiguration(mediaStream,config2)),config.disableLogs||console.log("started recording "+config.type+" stream."),mediaRecorder?(mediaRecorder.clearRecordedData(),mediaRecorder.record(),setState("recording"),self.recordingDuration&&handleRecordingDuration()):initRecorder(function(){self.recordingDuration&&handleRecordingDuration()}),self},stopRecording:stopRecording,pauseRecording:function(){mediaRecorder?"recording"===self.state?(setState("paused"),mediaRecorder.pause(),config.disableLogs||console.log("Paused recording.")):config.disableLogs||console.warn("Unable to pause the recording. Recording state: ",self.state):warningLog()},resumeRecording:function(){mediaRecorder?"paused"===self.state?(setState("recording"),mediaRecorder.resume(),config.disableLogs||console.log("Resumed recording.")):config.disableLogs||console.warn("Unable to resume the recording. Recording state: ",self.state):warningLog()},initRecorder:initRecorder,setRecordingDuration:function(recordingDuration,callback){if(void 0===recordingDuration)throw"recordingDuration is required.";if("number"!=typeof recordingDuration)throw"recordingDuration must be a number.";return self.recordingDuration=recordingDuration,self.onRecordingStopped=callback||function(){},{onRecordingStopped:function(callback){self.onRecordingStopped=callback}}},clearRecordedData:function(){mediaRecorder?(mediaRecorder.clearRecordedData(),config.disableLogs||console.log("Cleared old recorded data.")):warningLog()},getBlob:function(){if(mediaRecorder)return mediaRecorder.blob;warningLog()},getDataURL:getDataURL,toURL:function(){if(mediaRecorder)return URL.createObjectURL(mediaRecorder.blob);warningLog()},getInternalRecorder:function(){return mediaRecorder},save:function(fileName){mediaRecorder?invokeSaveAsDialog(mediaRecorder.blob,fileName):warningLog()},getFromDisk:function(callback){mediaRecorder?RecordRTC.getFromDisk(config.type,callback):warningLog()},setAdvertisementArray:function(arrayOfWebPImages){config.advertisement=[];for(var length=arrayOfWebPImages.length,i=0;i 127 not supported";return[128|data.trackNum,data.timecode>>8,255&data.timecode,flags].map(function(e){return String.fromCharCode(e)}).join("")+data.frame}({discardable:0,frame:webp.data.slice(4),invisible:0,keyframe:1,lacing:0,trackNum:1,timecode:Math.round(clusterCounter)});return clusterCounter+=webp.duration,{data:block,id:163}}))}function numToBuffer(num){for(var parts=[];0>=8;return new Uint8Array(parts.reverse())}function bitsToBuffer(bits){var data=[];bits=(bits.length%8?new Array(9-bits.length%8).join("0"):"")+bits;for(var i=0;i",bytesToSize(blob.size)),callback){var url;try{url=URL.createObjectURL(blob)}catch(e){}"function"==typeof callback.call?callback.call(self,url):callback(url)}config.autoWriteToDisk&&getDataURL(function(dataURL){var parameter={};parameter[config.type+"Blob"]=dataURL,DiskStorage.Store(parameter)})}else"function"==typeof callback.call?callback.call(self,""):callback("")}}function readFile(_blob){postMessage((new FileReaderSync).readAsDataURL(_blob))}function getDataURL(callback,_mediaRecorder){if(!callback)throw"Pass a callback function over getDataURL.";var blob=_mediaRecorder?_mediaRecorder.blob:(mediaRecorder||{}).blob;if(!blob)return config.disableLogs||console.warn("Blob encoder did not finish its job yet."),void setTimeout(function(){getDataURL(callback,_mediaRecorder)},1e3);if("undefined"==typeof Worker||navigator.mozGetUserMedia){var reader=new FileReader;reader.readAsDataURL(blob),reader.onload=function(event){callback(event.target.result)}}else{var webWorker=function(_function){try{var blob=URL.createObjectURL(new Blob([_function.toString(),"this.onmessage = function (eee) {"+_function.name+"(eee.data);}"],{type:"application/javascript"})),worker=new Worker(blob);return URL.revokeObjectURL(blob),worker}catch(e){}}(readFile);webWorker.onmessage=function(event){callback(event.data)},webWorker.postMessage(blob)}}function handleRecordingDuration(counter){counter=counter||0,"paused"!==self.state?"stopped"!==self.state&&(counter>=self.recordingDuration?stopRecording(self.onRecordingStopped):(counter+=1e3,setTimeout(function(){handleRecordingDuration(counter)},1e3))):setTimeout(function(){handleRecordingDuration(counter)},1e3)}function setState(state){self&&(self.state=state,"function"==typeof self.onStateChanged.call?self.onStateChanged.call(self,state):self.onStateChanged(state))}var mediaRecorder,WARNING='It seems that recorder is destroyed or "startRecording" is not invoked for '+config.type+" recorder.";function warningLog(){!0!==config.disableLogs&&console.warn(WARNING)}var returnObject={startRecording:function(config2){return config2&&(config=new RecordRTCConfiguration(mediaStream,config2)),config.disableLogs||console.log("started recording "+config.type+" stream."),mediaRecorder?(mediaRecorder.clearRecordedData(),mediaRecorder.record(),setState("recording"),self.recordingDuration&&handleRecordingDuration()):initRecorder(function(){self.recordingDuration&&handleRecordingDuration()}),self},stopRecording:stopRecording,pauseRecording:function(){mediaRecorder?"recording"===self.state?(setState("paused"),mediaRecorder.pause(),config.disableLogs||console.log("Paused recording.")):config.disableLogs||console.warn("Unable to pause the recording. Recording state: ",self.state):warningLog()},resumeRecording:function(){mediaRecorder?"paused"===self.state?(setState("recording"),mediaRecorder.resume(),config.disableLogs||console.log("Resumed recording.")):config.disableLogs||console.warn("Unable to resume the recording. Recording state: ",self.state):warningLog()},initRecorder:initRecorder,setRecordingDuration:function(recordingDuration,callback){if(void 0===recordingDuration)throw"recordingDuration is required.";if("number"!=typeof recordingDuration)throw"recordingDuration must be a number.";return self.recordingDuration=recordingDuration,self.onRecordingStopped=callback||function(){},{onRecordingStopped:function(callback){self.onRecordingStopped=callback}}},clearRecordedData:function(){mediaRecorder?(mediaRecorder.clearRecordedData(),config.disableLogs||console.log("Cleared old recorded data.")):warningLog()},getBlob:function(){if(mediaRecorder)return mediaRecorder.blob;warningLog()},getDataURL:getDataURL,toURL:function(){if(mediaRecorder)return URL.createObjectURL(mediaRecorder.blob);warningLog()},getInternalRecorder:function(){return mediaRecorder},save:function(fileName){mediaRecorder?invokeSaveAsDialog(mediaRecorder.blob,fileName):warningLog()},getFromDisk:function(callback){mediaRecorder?RecordRTC.getFromDisk(config.type,callback):warningLog()},setAdvertisementArray:function(arrayOfWebPImages){config.advertisement=[];for(var length=arrayOfWebPImages.length,i=0;i 127 not supported";return[128|data.trackNum,data.timecode>>8,255&data.timecode,flags].map(function(e){return String.fromCharCode(e)}).join("")+data.frame}({discardable:0,frame:webp.data.slice(4),invisible:0,keyframe:1,lacing:0,trackNum:1,timecode:Math.round(clusterCounter)});return clusterCounter+=webp.duration,{data:block,id:163}}))}function numToBuffer(num){for(var parts=[];0>=8;return new Uint8Array(parts.reverse())}function bitsToBuffer(bits){var data=[];bits=(bits.length%8?new Array(9-bits.length%8).join("0"):"")+bits;for(var i=0;iPromises and RecordRTC function stopRecordingCallback() { video.srcObject = null; - var blob = recorder.getBlob(); - video.src = URL.createObjectURL(blob); - - recorder.camera.stop(); + + recorder.getBlob().then(function(blob) { + video.src = URL.createObjectURL(blob); + recorder.camera.stop(); + }); } var recorder; // globally accessible