0fff2542b7
Adds custom video.js hls quality selector plugin This allows the quality selector plugin to stay active and listen for source changes on the player to prevent the need to recreate the player when switching between MP4's and M3U8's
46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
import videojs from 'video.js';
|
|
|
|
// Concrete classes
|
|
const VideoJsMenuItemClass = videojs.getComponent('MenuItem');
|
|
|
|
/**
|
|
* Extend vjs menu item class.
|
|
*/
|
|
export default class ConcreteMenuItem extends VideoJsMenuItemClass {
|
|
|
|
/**
|
|
* Menu item constructor.
|
|
*
|
|
* @param {Player} player - vjs player
|
|
* @param {Object} item - Item object
|
|
* @param {ConcreteButton} qualityButton - The containing button.
|
|
* @param {HlsQualitySelectorPlugin} plugin - This plugin instance.
|
|
*/
|
|
constructor(player, item, qualityButton, plugin) {
|
|
super(player, {
|
|
label: item.label,
|
|
selectable: true,
|
|
selected: item.selected || false
|
|
});
|
|
this.item = item;
|
|
this.qualityButton = qualityButton;
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
/**
|
|
* Click event for menu item.
|
|
*/
|
|
handleClick() {
|
|
|
|
// Reset other menu items selected status.
|
|
for (let i = 0; i < this.qualityButton.items.length; ++i) {
|
|
this.qualityButton.items[i].selected(false);
|
|
}
|
|
|
|
// Set this menu item to selected, and set quality.
|
|
this.plugin.setQuality(this.item.value);
|
|
this.selected(true);
|
|
|
|
}
|
|
}
|