%PDF- %PDF-
Direktori : /home/vacivi36/ava/lib/editor/atto/plugins/recordrtc/yui/src/recording/js/ |
Current File : /home/vacivi36/ava/lib/editor/atto/plugins/recordrtc/yui/src/recording/js/videomodule.js |
// This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. // /** * Atto recordrtc library functions * * @package atto_recordrtc * @author Jesus Federico (jesus [at] blindsidenetworks [dt] com) * @author Jacob Prud'homme (jacob [dt] prudhomme [at] blindsidenetworks [dt] com) * @copyright 2017 Blindside Networks Inc. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ // ESLint directives. /* eslint-disable camelcase, spaced-comment */ // Scrutinizer CI directives. /** global: M */ /** global: Y */ M.atto_recordrtc = M.atto_recordrtc || {}; // Shorten access to module namespaces. var cm = M.atto_recordrtc.commonmodule, am = M.atto_recordrtc.abstractmodule, ccm = M.atto_recordrtc.compatcheckmodule; M.atto_recordrtc.videomodule = { init: function(scope) { // Assignment of global variables. cm.editorScope = scope; // Allows access to the editor's "this" context. cm.alertWarning = Y.one('div#alert-warning'); cm.alertDanger = Y.one('div#alert-danger'); cm.player = Y.one('video#player'); cm.playerDOM = document.querySelector('video#player'); cm.startStopBtn = Y.one('button#start-stop'); cm.uploadBtn = Y.one('button#upload'); cm.recType = 'video'; cm.maxUploadSize = scope.get('maxrecsize'); // Show alert and close plugin if WebRTC is not supported. ccm.check_has_gum(); // Show alert and redirect user if connection is not secure. ccm.check_secure(); // Run when user clicks on "record" button. cm.startStopBtn.on('click', function() { cm.startStopBtn.set('disabled', true); // If button is displaying "Start Recording" or "Record Again". if ((cm.startStopBtn.get('textContent') === M.util.get_string('startrecording', 'atto_recordrtc')) || (cm.startStopBtn.get('textContent') === M.util.get_string('recordagain', 'atto_recordrtc')) || (cm.startStopBtn.get('textContent') === M.util.get_string('recordingfailed', 'atto_recordrtc'))) { // Make sure the upload button is not shown. cm.uploadBtn.ancestor().ancestor().addClass('hide'); // Change look of recording button. cm.startStopBtn.replaceClass('btn-outline-danger', 'btn-danger'); // Empty the array containing the previously recorded chunks. cm.chunks = []; cm.blobSize = 0; cm.uploadBtn.detach('click'); // Initialize common configurations. var commonConfig = { // When the stream is captured from the microphone/webcam. onMediaCaptured: function(stream) { // Make video stream available at a higher level by making it a property of the common module. cm.stream = stream; cm.start_recording(cm.recType, cm.stream); }, // Revert button to "Record Again" when recording is stopped. onMediaStopped: function(btnLabel) { cm.startStopBtn.set('textContent', btnLabel); cm.startStopBtn.set('disabled', false); cm.startStopBtn.replaceClass('btn-danger', 'btn-outline-danger'); }, // Handle recording errors. onMediaCapturingFailed: function(error) { am.handle_gum_errors(error, commonConfig); } }; // Show video tag without controls to view webcam stream. cm.player.ancestor().ancestor().removeClass('hide'); cm.player.set('controls', false); // Capture audio+video stream from webcam/microphone. M.atto_recordrtc.videomodule.capture_audio_video(commonConfig); } else { // If button is displaying "Stop Recording". // First of all clears the countdownTicker. window.clearInterval(cm.countdownTicker); // Disable "Record Again" button for 1s to allow background processing (closing streams). window.setTimeout(function() { cm.startStopBtn.set('disabled', false); }, 1000); // Stop recording. cm.stop_recording(cm.stream); // Change button to offer to record again. cm.startStopBtn.set('textContent', M.util.get_string('recordagain', 'atto_recordrtc')); cm.startStopBtn.replaceClass('btn-danger', 'btn-outline-danger'); } // Get dialogue centered. cm.editorScope.getDialogue().centered(); }); }, // Setup to get audio+video stream from microphone/webcam. capture_audio_video: function(config) { cm.capture_user_media( // Media constraints. { audio: true, video: { width: {ideal: 640}, height: {ideal: 480} } }, // Success callback. function(audioVideoStream) { // Set video player source to microphone+webcam stream, and play it back as it's recording. cm.playerDOM.srcObject = audioVideoStream; cm.playerDOM.play(); config.onMediaCaptured(audioVideoStream); }, // Error callback. function(error) { config.onMediaCapturingFailed(error); } ); } };