AutorÃa | Ultima modificación | Ver Log |
// 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 for function abstractions** @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 */// 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;M.atto_recordrtc.abstractmodule = {// A helper for making a Moodle alert appear.// Subject is the content of the alert (which error ther alert is for).// Possibility to add on-alert-close event.show_alert: function(subject, onCloseEvent) {Y.use('moodle-core-notification-alert', function() {var dialogue = new M.core.alert({title: M.util.get_string(subject + '_title', 'atto_recordrtc'),message: M.util.get_string(subject, 'atto_recordrtc')});if (onCloseEvent) {dialogue.after('complete', onCloseEvent);}});},// Handle getUserMedia errors.handle_gum_errors: function(error, commonConfig) {var btnLabel = M.util.get_string('recordingfailed', 'atto_recordrtc'),treatAsStopped = function() {commonConfig.onMediaStopped(btnLabel);};// Changes 'CertainError' -> 'gumcertain' to match language string names.var stringName = 'gum' + error.name.replace('Error', '').toLowerCase();// After alert, proceed to treat as stopped recording, or close dialogue.if (stringName !== 'gumsecurity') {am.show_alert(stringName, treatAsStopped);} else {am.show_alert(stringName, function() {cm.editorScope.closeDialogue(cm.editorScope);});}},// Select best options for the recording codec.select_rec_options: function(recType) {var types, options;if (recType === 'audio') {types = [// Firefox supports webm and ogg but Chrome only supports ogg.// So we use ogg to maximize the compatibility.'audio/ogg;codecs=opus',// Safari supports mp4.'audio/mp4;codecs=opus','audio/mp4;codecs=wav','audio/mp4;codecs=mp3',];options = {audioBitsPerSecond: window.parseInt(cm.editorScope.get('audiobitrate'))};} else {types = [// Support webm as a preference.// This container supports both vp9, and vp8.// It does not support AVC1/h264 at all.// It is supported by Chromium, and Firefox browsers, but not Safari.'video/webm;codecs=vp9,opus','video/webm;codecs=vp8,opus',// Fall back to mp4 if webm is not available.// The mp4 container supports v9, and h264 but neither of these are supported for recording on other// browsers.// In addition to this, we can record in v9, but VideoJS does not support an mp4 containern with v9 codec// for playback. We leave it as a final option as a just-in-case.'video/mp4;codecs=h264,opus','video/mp4;codecs=h264,wav','video/mp4;codecs=v9,opus',];options = {audioBitsPerSecond: window.parseInt(cm.editorScope.get('audiobitrate')),videoBitsPerSecond: window.parseInt(cm.editorScope.get('videobitrate'))};}var possibleTypes = types.reduce(function(result, type) {result.push(type);// Safari seems to use codecs: instead of codecs=.// It is safe to add both, so we do, but we want them to remain in order.result.push(type.replace('=', ':'));return result;}, []);var compatTypes = possibleTypes.filter(function(type) {return window.MediaRecorder.isTypeSupported(type);});if (compatTypes.length !== 0) {options.mimeType = compatTypes[0];}return options;}};