DEV Community

krishan
krishan

Posted on

videojs quality change hls video

var player = videojs('my-video');
var controlBar = player.controlBar;
console.log(controlBar);

    player.on('loadedmetadata',  ()=> {

        var subtitlesTrack = player.textTracks().getTrackById('subtitles');
        console.log(subtitlesTrack);
        subtitlesTrack.mode = 'disabled';

        let qualities = player.
                tech({ IWillNotUseThisInPlugins: true }).
                vhs.representations();
            console.log('qualities', qualities);
            createButtonsQualities({
                class: "item",
                qualities: qualities,
                father: player.controlBar.el_
            });

            player.play();

            // ---------------------------------------------- //

            function createAutoQualityButton(params) {
                let button = document.createElement("div");

                button.id = "auto";
                button.innerText = `Auto`;

                button.classList.add("selected");

                if (params && params.class){ button.classList.add(params.class)};

                button.addEventListener("click", () => {
                    removeSelected(params);
                    button.classList.add("selected");
                    qualities.map(quality => quality.enabled(true));
                });

                return button;
            }

            function createButtonsQualities(params) {

                let contentMenu = document.createElement('div');
                let menu = document.createElement('div');
                let icon = document.createElement('div');

                let fullscreen = params.father.querySelector('.vjs-fullscreen-control');
                contentMenu.appendChild(icon);
                contentMenu.appendChild(menu);
                fullscreen.before(contentMenu);

                menu.classList.add('menu');
                icon.classList.add('icon', 'vjs-icon-cog');
                contentMenu.classList.add('contentMenu');

                let autoButton = createAutoQualityButton(params);

                menu.appendChild(autoButton);

                qualities.sort((a, b) => {
                    return a.height > b.height ? 1 : 0;
                });

                qualities.map(quality => {
                    let button = document.createElement("div");

                    if (params && params.class) button.classList.add(params.class);

                    button.id = `${quality.height}`;
                    button.innerText = quality.height + "p";

                    button.addEventListener("click", () => {
                        resetQuality(params);
                        button.classList.add("selected");
                        quality.enabled(true);
                    });

                    menu.appendChild(button);
                });

                setInterval(() => {
                    let auto = document.querySelector("#auto");
                    current = player.
                        tech({ IWillNotUseThisInPlugins: true }).
                        vjs.selectPlaylist().attributes.RESOLUTION.height;
                    console.log(current);

                    document.querySelector("#auto").innerHTML = auto.classList.contains(
                        "selected") ?

                        `Auto <span class='current'>${current}p</span>` :
                        "Auto";
                }, 1000);


            }

            function removeSelected(params) {
                document.querySelector("#auto").classList.remove("selected");
                [...document.querySelectorAll(`.${params.class}`)].map(quality => {
                    quality.classList.remove("selected");
                });
            }

            function resetQuality(params) {
                removeSelected(params);

                for (let quality of params.qualities) {
                    quality.enabled(false);
                }
            }
    })
Enter fullscreen mode Exit fullscreen mode

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs