Опубликован: 04.07.2012 | Уровень: специалист | Доступ: платный
Самостоятельная работа 3:

Практическое введение в HTML 5. Создание собственного видео-плеера на HTML5 Video

< Лекция 7 || Самостоятельная работа 3: 123 || Лекция 8 >

Задание 3. Создание видеопроигрывателя с помощью элемента Video.

  1. Создайте в WebMatrix пустой веб-сайт, например с именем "HTML5VideoPlayer" и добавьте в него пустую HTML страницу.
  2. Добавьте на веб-странице элемент Video с помощью следующего кода:
    <!DOCTYPE html>
    <html>
    <body>
    
    <div style="text-align:center"> 
    
        <video id="myvideo" width="320" height="240" controls="controls">
           <source src="http://www.w3schools.com/html5/movie.mp4" type="video/mp4" /> 
            Your browser does not support the video tag.
        </video>
    </div>
    
    </body>
    </html>
    

    Значение атрибута src у элемента source приведено в качестве примера. Можно указать ссылку на любой другой видеоролик в формате MPEG4.

    В результате в окне веб-браузера появится стандартное окно проигрывателя видео заданного размера (320 x 240) с элементами управления по умолчанию.


  3. Добавим к проигрывателю собственный элемент управления воспроизведением в виде отдельной кнопки. Для данной кнопки необходимо будет описать на языке JavaScript обработчик события нажатия кнопки, который будет управлять воспроизведением видеоролика в проигрывателе.
    <!DOCTYPE html>
    <html>
    <body>
    
    <div style="text-align:center"> 
    
        <video id="myvideo" width="320" height="240">
    
            <source src="http://www.w3schools.com/html5/movie.mp4" type="video/mp4" /> 
            Your browser does not support the video tag.
    
        </video>
    
        <br/>
        
        <button onclick="playPause()">Play/Pause</button>
            
    </div>
    
    <script> 
    function playPause() 
    {
        var myVideo = document.getElementById('myvideo'); 
    
        if (myVideo.paused) 
             myVideo.play();
        else
             myVideo.pause();
    }
    </script> 
    </body>
    </html>
    

  4. Для отображения текущей информации о воспроизведении добавим индикаторы времени проигрывания в виде текстовой строки.
    <!DOCTYPE html>
    <html>
    
    <body>
    
    <div style="text-align:center"> 
    
        <video id="myvideo" width="320" height="240">
            <source src="http://www.w3schools.com/html5/movie.mp4" type="video/mp4" /> 
            Your browser does not support the video tag.
        </video>
        <br/>
        <span id="vduration">00:00</span> <br/>
        <span id="timepassed">00:00</span> <br/>
        <button onclick="playPause()">Play/Pause</button>
            
    </div>
    
    <script> 
    
       var myVideo = document.getElementById("myvideo");
       var tmPassed = document.getElementById("timepassed");
       var tmDuration = document.getElementById("vduration");
    
       function DisplayDuration() 
        {
            tmDuration.innerHTML = "Total duration:" + Math.floor(myVideo.duration) + " s.";
        }
        
        function timeDisplay() 
        {
            tmPassed.innerHTML =  "Passed: " + Math.floor(myVideo.currentTime) + " s.";
        }
        
        function DisplayEnded() 
        {
            tmPassed.innerHTML = "Display completed";
        }
    
        function playPause() 
        {
            if (myVideo.paused)
                myVideo.play();
            else
                myVideo.pause();
        }
    
        myVideo.addEventListener("loadedmetadata", DisplayDuration, false);
        myVideo.addEventListener("timeupdate", timeDisplay, false);
        myVideo.addEventListener("ended", DisplayEnded, false);
    
    </script> 
    
    </body>
    </html>
    

    Обратите внимание на то, что на самой веб-странице были добавлены 2 элемента <span>, которые будут использованы для отображения времени. Внутреннее содержимое этих элементов будет обновляться динамически с помощью JavaScript через атрибут innerHTML. Обновление этих элементов синхронизировано с видео через соответствующие обработчики событий, ассоциированные с элементом Video с помощью метода addEventListener.

    Необходимая для отображения информация извлекается из свойств duration и currentTime элемента Video.


  5. Воспользуемся теперь элементом canvas для создания графического индикатора продолжительности показа видеоролика.

    Для этого добавим на веб-странице элемент canvas вместо <span id="timepassed"> , а с событием timeupdate свяжем функцию progressBar. Изменения также будут внесены в функцию DisplayDuration: необходимо задать ширину элемента canvas (равной ширине окна видео-элемента) и нарисовать контур индикатора показа видео.

    <!DOCTYPE html>
    <html>
    <body>
    
    <div style="text-align:center"> 
    
        <video id="myvideo" width="320" height="240">
           <source src="http://www.w3schools.com/html5/movie.mp4" type="video/mp4" /> 
            Your browser does not support the video tag.
        </video>
        <br/>
        <span id="vduration">00:00</span> <br/>
        
        <canvas id="canvas" width="500" height="20">
            canvas not supported
        </canvas>
        
        <button onclick="playPause()">Play/Pause</button>
            
    </div>
    
    <script> 
    
       var myVideo = document.getElementById("myvideo");
       var progressCanvas = document.getElementById('canvas');
       var tmDuration = document.getElementById("vduration");
    
       function DisplayDuration() 
        {
            var widthAttr = myVideo.getAttribute('width');
            var heightAttr = progressCanvas.getAttribute('height');
    
            progressCanvas.setAttribute('width', widthAttr);
      
            var ctx=progressCanvas.getContext("2d");
            
            ctx.rect(0,0,widthAttr,heightAttr);
            ctx.stroke();
        
            tmDuration.innerHTML = "Total duration:" + Math.floor(myVideo.duration) + " s.";   
        }
        function playPause() 
        {
            if (myVideo.paused)
                myVideo.play();
            else
                myVideo.pause();
        }
        function progressBar() 
        { 
            var elapsedTime = Math.round(myVideo.currentTime);
            
            if (canvas.getContext) 
            {
                var ctx = progressCanvas.getContext("2d");
      
                ctx.fillStyle = "rgb(10,10,10)";
                var fWidth = (elapsedTime / myVideo.duration)*(progressCanvas.clientWidth);
                if (fWidth > 0)
                {
                    ctx.fillRect(0, 0, fWidth, progressCanvas.clientHeight);
                }
            }
        }
    
        myVideo.addEventListener("loadedmetadata", DisplayDuration, false);
        myVideo.addEventListener("timeupdate", progressBar, false);
    
    </script> 
    </body>
    </html>
    

Контрольные задания

  1. Добавьте к элементу canvas обработчики событий onMouseOver и onMouseOut, таким образом, чтобы при наведении курсора мыши на графический индикатор появлялась подсказка (tooltip) с указанием времени показа видео в секундах.
  2. Реализуйте графический индикатор показа видео с помощью SVG. Для этого потребуется графический элемент <rect> (прямоугольник) с атрибутами: x, y, width, height, style="fill:rgb(R,G,B) stroke-width: n stroke:rgb(R,G,B)".
  3. Сделайте так, чтобы при нажатии кнопки проигрывателя изменялась надпись на кнопке ("Play" на "Pause" и наоборот).
< Лекция 7 || Самостоятельная работа 3: 123 || Лекция 8 >
Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам