custom source picker

This commit is contained in:
Kasper Moskwiak 2015-11-08 23:03:45 +01:00
parent 86224b067f
commit 52b097cc0e

View file

@ -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;
};