diff --git a/media/player/videojs/amd/build/loader.min.js b/media/player/videojs/amd/build/loader.min.js
index cd5ff9e55e3..5bee19d5cf0 100644
--- a/media/player/videojs/amd/build/loader.min.js
+++ b/media/player/videojs/amd/build/loader.min.js
@@ -1,3 +1,3 @@
-define("media_videojs/loader",["exports","core/ajax","core/config","core_filters/events","core/localstorage","core/notification","jquery"],(function(_exports,_ajax,_config,_events,_localstorage,_notification,_jquery){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setUp=void 0,_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_localstorage=_interopRequireDefault(_localstorage),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}let firstLoad,language,langStringCache;_exports.setUp=lang=>{language=lang,firstLoad=!0,notifyVideoJS({detail:{nodes:document.body}}),document.addEventListener(_events.eventTypes.filterContentUpdated,notifyVideoJS)};const notifyVideoJS=e=>{const nodes=(0,_jquery.default)(e.detail.nodes),langStrings=getLanguageJson();nodes.find(".mediaplugin_videojs").addBack(".mediaplugin_videojs").find("audio, video").each(((index,element)=>{const id=(0,_jquery.default)(element).attr("id"),config=(0,_jquery.default)(element).data("setup-lazy"),modulePromises=["function"==typeof _systemImportTransformerGlobalIdentifier.define&&_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/video-lazy"],resolve,reject)})):"undefined"!=typeof module&&module.exports&&"undefined"!=typeof require||"undefined"!=typeof module&&module.component&&_systemImportTransformerGlobalIdentifier.require&&"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/video-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/video-lazy"])];config.techOrder&&-1!==config.techOrder.indexOf("youtube")&&modulePromises.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&&_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/Youtube-lazy"],resolve,reject)})):"undefined"!=typeof module&&module.exports&&"undefined"!=typeof require||"undefined"!=typeof module&&module.component&&_systemImportTransformerGlobalIdentifier.require&&"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/Youtube-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/Youtube-lazy"])),config.techOrder&&-1!==config.techOrder.indexOf("OgvJS")&&(config.ogvjs={worker:!0,wasm:!0,base:_config.default.wwwroot+"/media/player/videojs/ogvloader.php/"+_config.default.jsrev+"/"},modulePromises.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&&_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/videojs-ogvjs-lazy"],resolve,reject)})):"undefined"!=typeof module&&module.exports&&"undefined"!=typeof require||"undefined"!=typeof module&&module.component&&_systemImportTransformerGlobalIdentifier.require&&"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/videojs-ogvjs-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/videojs-ogvjs-lazy"]))),Promise.all([langStrings,...modulePromises]).then((_ref=>{let[langJson,videojs]=_ref;firstLoad&&(videojs.options.playbackRates=[.5,.75,1,1.25,1.5,1.75,2],videojs.options.userActions={hotkeys:!0},videojs.addLanguage(language,langJson),firstLoad=!1),videojs(id,config)})).catch(_notification.default.exception)}))},getLanguageJson=()=>{if(langStringCache)return Promise.resolve(langStringCache);const cacheKey="media_videojs/".concat(language),rawCacheContent=_localstorage.default.get(cacheKey);if(rawCacheContent){const cacheContent=JSON.parse(rawCacheContent);return langStringCache=cacheContent,Promise.resolve(langStringCache)}const request={methodname:"media_videojs_get_language",args:{lang:language}};return _ajax.default.call([request])[0].then((langStringData=>(_localstorage.default.set(cacheKey,langStringData),langStringData))).then((result=>JSON.parse(result))).then((langStrings=>(langStringCache=langStrings,langStrings)))}}));
+define("media_videojs/loader",["exports","core/ajax","core/config","core_filters/events","core/localstorage","core/notification","jquery"],(function(_exports,_ajax,_config,_events,_localstorage,_notification,_jquery){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.setUp=void 0,_ajax=_interopRequireDefault(_ajax),_config=_interopRequireDefault(_config),_localstorage=_interopRequireDefault(_localstorage),_notification=_interopRequireDefault(_notification),_jquery=_interopRequireDefault(_jquery);var _systemImportTransformerGlobalIdentifier="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}let firstLoad,language,langStringCache;_exports.setUp=lang=>{language=lang,firstLoad=!0,notifyVideoJS({detail:{nodes:document.body}}),document.addEventListener(_events.eventTypes.filterContentUpdated,notifyVideoJS)};const notifyVideoJS=e=>{const nodes=(0,_jquery.default)(e.detail.nodes),langStrings=getLanguageJson();nodes.find(".mediaplugin_videojs").addBack(".mediaplugin_videojs").find("audio, video").each(((index,element)=>{const id=(0,_jquery.default)(element).attr("id"),config=(0,_jquery.default)(element).data("setup-lazy"),modulePromises=["function"==typeof _systemImportTransformerGlobalIdentifier.define&&_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/video-lazy"],resolve,reject)})):"undefined"!=typeof module&&module.exports&&"undefined"!=typeof require||"undefined"!=typeof module&&module.component&&_systemImportTransformerGlobalIdentifier.require&&"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/video-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/video-lazy"])];config.techOrder&&-1!==config.techOrder.indexOf("youtube")&&modulePromises.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&&_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/Youtube-lazy"],resolve,reject)})):"undefined"!=typeof module&&module.exports&&"undefined"!=typeof require||"undefined"!=typeof module&&module.component&&_systemImportTransformerGlobalIdentifier.require&&"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/Youtube-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/Youtube-lazy"])),config.techOrder&&-1!==config.techOrder.indexOf("OgvJS")&&(config.ogvjs={worker:!0,wasm:!0,base:_config.default.wwwroot+"/media/player/videojs/ogvloader.php/"+_config.default.jsrev+"/"},modulePromises.push("function"==typeof _systemImportTransformerGlobalIdentifier.define&&_systemImportTransformerGlobalIdentifier.define.amd?new Promise((function(resolve,reject){_systemImportTransformerGlobalIdentifier.require(["media_videojs/videojs-ogvjs-lazy"],resolve,reject)})):"undefined"!=typeof module&&module.exports&&"undefined"!=typeof require||"undefined"!=typeof module&&module.component&&_systemImportTransformerGlobalIdentifier.require&&"component"===_systemImportTransformerGlobalIdentifier.require.loader?Promise.resolve(require("media_videojs/videojs-ogvjs-lazy")):Promise.resolve(_systemImportTransformerGlobalIdentifier["media_videojs/videojs-ogvjs-lazy"]))),Promise.all([langStrings,...modulePromises]).then((_ref=>{let[langJson,videojs]=_ref;firstLoad&&(videojs.addLanguage(language,langJson),firstLoad=!1),videojs(id,config)})).catch(_notification.default.exception)}))},getLanguageJson=()=>{if(langStringCache)return Promise.resolve(langStringCache);const cacheKey="media_videojs/".concat(language),rawCacheContent=_localstorage.default.get(cacheKey);if(rawCacheContent){const cacheContent=JSON.parse(rawCacheContent);return langStringCache=cacheContent,Promise.resolve(langStringCache)}const request={methodname:"media_videojs_get_language",args:{lang:language}};return _ajax.default.call([request])[0].then((langStringData=>(_localstorage.default.set(cacheKey,langStringData),langStringData))).then((result=>JSON.parse(result))).then((langStrings=>(langStringCache=langStrings,langStrings)))}}));
//# sourceMappingURL=loader.min.js.map
\ No newline at end of file
diff --git a/media/player/videojs/amd/build/loader.min.js.map b/media/player/videojs/amd/build/loader.min.js.map
index aba9332fabb..230495207fa 100644
--- a/media/player/videojs/amd/build/loader.min.js.map
+++ b/media/player/videojs/amd/build/loader.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"loader.min.js","sources":["../src/loader.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Video JS loader.\n *\n * This takes care of applying the filter on content which was dynamically loaded.\n *\n * @module media_videojs/loader\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Ajax from 'core/ajax';\nimport Config from 'core/config';\nimport {eventTypes} from 'core_filters/events';\nimport LocalStorage from 'core/localstorage';\nimport Notification from 'core/notification';\nimport jQuery from 'jquery';\n\n/** @var {bool} Whether this is the first load of videojs module */\nlet firstLoad;\n\n/** @var {string} The language that is used in the player */\nlet language;\n\n/** @var {object} List of languages and translations for the current page */\nlet langStringCache;\n\n/**\n * Initialisei teh videojs Loader.\n *\n * Adds the listener for the event to then notify video.js.\n *\n * @method\n * @param {string} lang Language to be used in the player\n * @listens event:filterContentUpdated\n */\nexport const setUp = (lang) => {\n language = lang;\n firstLoad = true;\n\n // Notify Video.js about the nodes already present on the page.\n notifyVideoJS({\n detail: {\n nodes: document.body,\n }\n });\n\n // We need to call popover automatically if nodes are added to the page later.\n document.addEventListener(eventTypes.filterContentUpdated, notifyVideoJS);\n};\n\n/**\n * Notify video.js of new nodes.\n *\n * @param {Event} e The event.\n */\nconst notifyVideoJS = e => {\n const nodes = jQuery(e.detail.nodes);\n const selector = '.mediaplugin_videojs';\n const langStrings = getLanguageJson();\n\n // Find the descendants matching the expected parent of the audio and video\n // tags. Then also addBack the nodes matching the same selector. Finally,\n // we find the audio and video tags contained in those parents. Kind thanks\n // to jQuery for the simplicity.\n nodes.find(selector)\n .addBack(selector)\n .find('audio, video').each((index, element) => {\n const id = jQuery(element).attr('id');\n const config = jQuery(element).data('setup-lazy');\n const modulePromises = [import('media_videojs/video-lazy')];\n\n if (config.techOrder && config.techOrder.indexOf('youtube') !== -1) {\n // Add YouTube to the list of modules we require.\n modulePromises.push(import('media_videojs/Youtube-lazy'));\n }\n if (config.techOrder && config.techOrder.indexOf('OgvJS') !== -1) {\n config.ogvjs = {\n worker: true,\n wasm: true,\n base: Config.wwwroot + '/media/player/videojs/ogvloader.php/' + Config.jsrev + '/'\n };\n // Add Ogv.JS to the list of modules we require.\n modulePromises.push(import('media_videojs/videojs-ogvjs-lazy'));\n }\n Promise.all([langStrings, ...modulePromises])\n .then(([langJson, videojs]) => {\n if (firstLoad) {\n videojs.options.playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n videojs.options.userActions = {\n hotkeys: true,\n };\n videojs.addLanguage(language, langJson);\n\n firstLoad = false;\n }\n videojs(id, config);\n return;\n })\n .catch(Notification.exception);\n });\n};\n\n/**\n * Returns the json object of the language strings to be used in the player.\n *\n * @returns {Promise}\n */\nconst getLanguageJson = () => {\n if (langStringCache) {\n return Promise.resolve(langStringCache);\n }\n\n const cacheKey = `media_videojs/${language}`;\n\n const rawCacheContent = LocalStorage.get(cacheKey);\n if (rawCacheContent) {\n const cacheContent = JSON.parse(rawCacheContent);\n\n langStringCache = cacheContent;\n\n return Promise.resolve(langStringCache);\n }\n\n const request = {\n methodname: 'media_videojs_get_language',\n args: {\n lang: language,\n },\n };\n\n return Ajax.call([request])[0]\n .then(langStringData => {\n LocalStorage.set(cacheKey, langStringData);\n\n return langStringData;\n })\n .then(result => JSON.parse(result))\n .then(langStrings => {\n langStringCache = langStrings;\n\n return langStrings;\n });\n};\n"],"names":["firstLoad","language","langStringCache","lang","notifyVideoJS","detail","nodes","document","body","addEventListener","eventTypes","filterContentUpdated","e","langStrings","getLanguageJson","find","addBack","each","index","element","id","attr","config","data","modulePromises","techOrder","indexOf","push","ogvjs","worker","wasm","base","Config","wwwroot","jsrev","Promise","all","then","_ref","langJson","videojs","options","playbackRates","userActions","hotkeys","addLanguage","catch","Notification","exception","resolve","cacheKey","rawCacheContent","LocalStorage","get","cacheContent","JSON","parse","request","methodname","args","Ajax","call","langStringData","set","result"],"mappings":"2uBAiCIA,UAGAC,SAGAC,+BAWkBC,OAClBF,SAAWE,KACXH,WAAY,EAGZI,cAAc,CACVC,OAAQ,CACJC,MAAOC,SAASC,QAKxBD,SAASE,iBAAiBC,mBAAWC,qBAAsBP,sBAQzDA,cAAgBQ,UACZN,OAAQ,mBAAOM,EAAEP,OAAOC,OAExBO,YAAcC,kBAMpBR,MAAMS,KAPW,wBAQZC,QARY,wBASZD,KAAK,gBAAgBE,MAAK,CAACC,MAAOC,iBACzBC,IAAK,mBAAOD,SAASE,KAAK,MAC1BC,QAAS,mBAAOH,SAASI,KAAK,cAC9BC,eAAiB,2nBAEnBF,OAAOG,YAAsD,IAAzCH,OAAOG,UAAUC,QAAQ,YAE7CF,eAAeG,qoBAEfL,OAAOG,YAAoD,IAAvCH,OAAOG,UAAUC,QAAQ,WAC7CJ,OAAOM,MAAQ,CACXC,QAAQ,EACRC,MAAM,EACNC,KAAMC,gBAAOC,QAAU,uCAAyCD,gBAAOE,MAAQ,KAGnFV,eAAeG,wpBAEnBQ,QAAQC,IAAI,CAACvB,eAAgBW,iBAC5Ba,MAAKC,WAAEC,SAAUC,cACVxC,YACAwC,QAAQC,QAAQC,cAAgB,CAAC,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,GAChEF,QAAQC,QAAQE,YAAc,CAC1BC,SAAS,GAEbJ,QAAQK,YAAY5C,SAAUsC,UAE9BvC,WAAY,GAEhBwC,QAAQpB,GAAIE,WAGfwB,MAAMC,sBAAaC,eAS1BlC,gBAAkB,QAChBZ,uBACOiC,QAAQc,QAAQ/C,uBAGrBgD,iCAA4BjD,UAE5BkD,gBAAkBC,sBAAaC,IAAIH,aACrCC,gBAAiB,OACXG,aAAeC,KAAKC,MAAML,wBAEhCjD,gBAAkBoD,aAEXnB,QAAQc,QAAQ/C,uBAGrBuD,QAAU,CACZC,WAAY,6BACZC,KAAM,CACFxD,KAAMF,kBAIP2D,cAAKC,KAAK,CAACJ,UAAU,GACvBpB,MAAKyB,uCACWC,IAAIb,SAAUY,gBAEpBA,kBAEVzB,MAAK2B,QAAUT,KAAKC,MAAMQ,UAC1B3B,MAAKxB,cACFX,gBAAkBW,YAEXA"}
\ No newline at end of file
+{"version":3,"file":"loader.min.js","sources":["../src/loader.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Video JS loader.\n *\n * This takes care of applying the filter on content which was dynamically loaded.\n *\n * @module media_videojs/loader\n * @copyright 2016 Frédéric Massart - FMCorz.net\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Ajax from 'core/ajax';\nimport Config from 'core/config';\nimport {eventTypes} from 'core_filters/events';\nimport LocalStorage from 'core/localstorage';\nimport Notification from 'core/notification';\nimport jQuery from 'jquery';\n\n/** @var {bool} Whether this is the first load of videojs module */\nlet firstLoad;\n\n/** @var {string} The language that is used in the player */\nlet language;\n\n/** @var {object} List of languages and translations for the current page */\nlet langStringCache;\n\n/**\n * Initialisei teh videojs Loader.\n *\n * Adds the listener for the event to then notify video.js.\n *\n * @method\n * @param {string} lang Language to be used in the player\n * @listens event:filterContentUpdated\n */\nexport const setUp = (lang) => {\n language = lang;\n firstLoad = true;\n\n // Notify Video.js about the nodes already present on the page.\n notifyVideoJS({\n detail: {\n nodes: document.body,\n }\n });\n\n // We need to call popover automatically if nodes are added to the page later.\n document.addEventListener(eventTypes.filterContentUpdated, notifyVideoJS);\n};\n\n/**\n * Notify video.js of new nodes.\n *\n * @param {Event} e The event.\n */\nconst notifyVideoJS = e => {\n const nodes = jQuery(e.detail.nodes);\n const selector = '.mediaplugin_videojs';\n const langStrings = getLanguageJson();\n\n // Find the descendants matching the expected parent of the audio and video\n // tags. Then also addBack the nodes matching the same selector. Finally,\n // we find the audio and video tags contained in those parents. Kind thanks\n // to jQuery for the simplicity.\n nodes.find(selector)\n .addBack(selector)\n .find('audio, video').each((index, element) => {\n const id = jQuery(element).attr('id');\n const config = jQuery(element).data('setup-lazy');\n const modulePromises = [import('media_videojs/video-lazy')];\n\n if (config.techOrder && config.techOrder.indexOf('youtube') !== -1) {\n // Add YouTube to the list of modules we require.\n modulePromises.push(import('media_videojs/Youtube-lazy'));\n }\n if (config.techOrder && config.techOrder.indexOf('OgvJS') !== -1) {\n config.ogvjs = {\n worker: true,\n wasm: true,\n base: Config.wwwroot + '/media/player/videojs/ogvloader.php/' + Config.jsrev + '/'\n };\n // Add Ogv.JS to the list of modules we require.\n modulePromises.push(import('media_videojs/videojs-ogvjs-lazy'));\n }\n Promise.all([langStrings, ...modulePromises])\n .then(([langJson, videojs]) => {\n if (firstLoad) {\n videojs.addLanguage(language, langJson);\n\n firstLoad = false;\n }\n videojs(id, config);\n return;\n })\n .catch(Notification.exception);\n });\n};\n\n/**\n * Returns the json object of the language strings to be used in the player.\n *\n * @returns {Promise}\n */\nconst getLanguageJson = () => {\n if (langStringCache) {\n return Promise.resolve(langStringCache);\n }\n\n const cacheKey = `media_videojs/${language}`;\n\n const rawCacheContent = LocalStorage.get(cacheKey);\n if (rawCacheContent) {\n const cacheContent = JSON.parse(rawCacheContent);\n\n langStringCache = cacheContent;\n\n return Promise.resolve(langStringCache);\n }\n\n const request = {\n methodname: 'media_videojs_get_language',\n args: {\n lang: language,\n },\n };\n\n return Ajax.call([request])[0]\n .then(langStringData => {\n LocalStorage.set(cacheKey, langStringData);\n\n return langStringData;\n })\n .then(result => JSON.parse(result))\n .then(langStrings => {\n langStringCache = langStrings;\n\n return langStrings;\n });\n};\n"],"names":["firstLoad","language","langStringCache","lang","notifyVideoJS","detail","nodes","document","body","addEventListener","eventTypes","filterContentUpdated","e","langStrings","getLanguageJson","find","addBack","each","index","element","id","attr","config","data","modulePromises","techOrder","indexOf","push","ogvjs","worker","wasm","base","Config","wwwroot","jsrev","Promise","all","then","_ref","langJson","videojs","addLanguage","catch","Notification","exception","resolve","cacheKey","rawCacheContent","LocalStorage","get","cacheContent","JSON","parse","request","methodname","args","Ajax","call","langStringData","set","result"],"mappings":"2uBAiCIA,UAGAC,SAGAC,+BAWkBC,OAClBF,SAAWE,KACXH,WAAY,EAGZI,cAAc,CACVC,OAAQ,CACJC,MAAOC,SAASC,QAKxBD,SAASE,iBAAiBC,mBAAWC,qBAAsBP,sBAQzDA,cAAgBQ,UACZN,OAAQ,mBAAOM,EAAEP,OAAOC,OAExBO,YAAcC,kBAMpBR,MAAMS,KAPW,wBAQZC,QARY,wBASZD,KAAK,gBAAgBE,MAAK,CAACC,MAAOC,iBACzBC,IAAK,mBAAOD,SAASE,KAAK,MAC1BC,QAAS,mBAAOH,SAASI,KAAK,cAC9BC,eAAiB,2nBAEnBF,OAAOG,YAAsD,IAAzCH,OAAOG,UAAUC,QAAQ,YAE7CF,eAAeG,qoBAEfL,OAAOG,YAAoD,IAAvCH,OAAOG,UAAUC,QAAQ,WAC7CJ,OAAOM,MAAQ,CACXC,QAAQ,EACRC,MAAM,EACNC,KAAMC,gBAAOC,QAAU,uCAAyCD,gBAAOE,MAAQ,KAGnFV,eAAeG,wpBAEnBQ,QAAQC,IAAI,CAACvB,eAAgBW,iBAC5Ba,MAAKC,WAAEC,SAAUC,cACVxC,YACAwC,QAAQC,YAAYxC,SAAUsC,UAE9BvC,WAAY,GAEhBwC,QAAQpB,GAAIE,WAGfoB,MAAMC,sBAAaC,eAS1B9B,gBAAkB,QAChBZ,uBACOiC,QAAQU,QAAQ3C,uBAGrB4C,iCAA4B7C,UAE5B8C,gBAAkBC,sBAAaC,IAAIH,aACrCC,gBAAiB,OACXG,aAAeC,KAAKC,MAAML,wBAEhC7C,gBAAkBgD,aAEXf,QAAQU,QAAQ3C,uBAGrBmD,QAAU,CACZC,WAAY,6BACZC,KAAM,CACFpD,KAAMF,kBAIPuD,cAAKC,KAAK,CAACJ,UAAU,GACvBhB,MAAKqB,uCACWC,IAAIb,SAAUY,gBAEpBA,kBAEVrB,MAAKuB,QAAUT,KAAKC,MAAMQ,UAC1BvB,MAAKxB,cACFX,gBAAkBW,YAEXA"}
\ No newline at end of file
diff --git a/media/player/videojs/amd/src/loader.js b/media/player/videojs/amd/src/loader.js
index f8a79d95d8c..be4d023a8bb 100644
--- a/media/player/videojs/amd/src/loader.js
+++ b/media/player/videojs/amd/src/loader.js
@@ -100,10 +100,6 @@ const notifyVideoJS = e => {
Promise.all([langStrings, ...modulePromises])
.then(([langJson, videojs]) => {
if (firstLoad) {
- videojs.options.playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
- videojs.options.userActions = {
- hotkeys: true,
- };
videojs.addLanguage(language, langJson);
firstLoad = false;
diff --git a/media/player/videojs/classes/plugin.php b/media/player/videojs/classes/plugin.php
index 51e034b98ac..7f74c04af2b 100644
--- a/media/player/videojs/classes/plugin.php
+++ b/media/player/videojs/classes/plugin.php
@@ -154,6 +154,10 @@ class media_videojs_plugin extends core_media_player_native {
$datasetup[] = '"aspectRatio": "1:0"';
}
+ // Additional setup for playback rate and user actions.
+ $datasetup[] = '"playbackRates": [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]';
+ $datasetup[] = '"userActions": {"hotkeys": true}';
+
// Attributes for the video/audio tag.
// We use data-setup-lazy as the attribute name for the config instead of
// data-setup because data-setup will cause video.js to load the player as soon as the library is loaded,