From 52b097cc0e4006caa5e64421008faee6744e342c Mon Sep 17 00:00:00 2001 From: Kasper Moskwiak Date: Sun, 8 Nov 2015 23:03:45 +0100 Subject: [PATCH] custom source picker --- lib/videojs-resolution-switcher.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/videojs-resolution-switcher.js b/lib/videojs-resolution-switcher.js index 808310a..ed8e488 100644 --- a/lib/videojs-resolution-switcher.js +++ b/lib/videojs-resolution-switcher.js @@ -22,11 +22,14 @@ currentResolution = {}, // stores current resolution menuItemsHolder = {}; // stores menuItems - function setSourcesSanitized(player, sources, label) { + function setSourcesSanitized(player, sources, label, customSourcePicker) { currentResolution = { label: label, sources: sources }; + if(typeof customSourcePicker === 'function'){ + return customSourcePicker(player, sources, label); + } return player.src(sources.map(function(src) { return {src: src.src, type: src.type, res: src.res}; })); @@ -58,7 +61,7 @@ this.label.innerHTML = this.options_.label; } }, - onClick: function(){ + onClick: function(customSourcePicker){ this.onClickListener(this); // Remember player state var currentTime = this.player_.currentTime(); @@ -71,7 +74,7 @@ // Change player source and wait for loadeddata event, then play video // loadedmetadata doesn't work right now for flash. // Probably because of https://github.com/videojs/video-js-swf/issues/124 - setSourcesSanitized(this.player_, this.src, this.options_.label).one('loadeddata', function() { + setSourcesSanitized(this.player_, this.src, this.options_.label, customSourcePicker).one('loadeddata', function() { this.player_.currentTime(currentTime); this.player_.handleTechSeeked_(); if(!isPaused){ @@ -169,13 +172,14 @@ /** * Returns current resolution or sets one when label is specified - * @param {String} [label] label name - * @returns {Object} current resolution object {label: '', sources: []} if used as getter or player object if used as setter + * @param {String} [label] label name + * @param {Function} [customSourcePicker] custom function to choose source. Takes 3 arguments: player, sources, label. Must return player object. + * @returns {Object} current resolution object {label: '', sources: []} if used as getter or player object if used as setter */ - player.currentResolution = function(label){ + player.currentResolution = function(label, customSourcePicker){ if(label == null) { return currentResolution; } if(menuItemsHolder[label] != null){ - menuItemsHolder[label].onClick(); + menuItemsHolder[label].onClick(customSourcePicker); } return player; };