Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.12.2014, 14:57
Новичок на форуме
Отправить личное сообщение для aspex Посмотреть профиль Найти все сообщения от aspex
 
Регистрация: 23.12.2014
Сообщений: 1

Повтор фото (getUserMedia(),HTML5 Canvas)
Здравствуйте,есть скрипт,который делает захват видео с вебкамеры и делает с нее фотографию.
Используется getUserMedia() для видео и Canvas для снятия фотографии.
Все работает,фотография делается после нажатия кнопки "Фотогрфировать". Но мне нужно чтобы после нажатия кнопки "Запустить" фотография делалась автоматически каждые N секунд.

Пытался сделать так
setInterval(captureMe,1000);

Но ничего не получилось..
В общем пример: http://aspex.wen.ru
Исходник:
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
        <style>
body{text-align:center;font-family:arial;font-family:"Abel",Helvetica,sans-serif}.stuff{display:none}.item{display:inline-block;width:300px;margin:20px 10px;background:#fff;padding:10px 0px}.item span{padding-bottom:15px;display:block;font-size:36px;color:#646464}video,canvas{width:266px;height:200px;background:rgba(0,0,0,.1)}input{display:block;width:100%}img{width:128px;height:96px;margin:6px}video{transform:scaleX(-1);-o-transform:scaleX(-1);-ms-transform:scaleX(-1);-moz-transform:scaleX(-1);-webkit-transform:scaleX(-1)}#allow{min-height:40px;line-height:40px;font-size:20px;color:#fff;border:2px solid #fff;background:#e67e22}.button{display:inline-block;cursor:pointer;padding:.75em 1em;-webkit-border-radius:2px;border-radius:2px;font:1.25em "Abel",Helvetica,sans-serif;color:rgba(255,255,255,1);background:#62ac15;text-shadow:0 -1px 0 #5b8111;border:none;outline:none;display:none}.button:hover{background:#6fba22;-webkit-transition:all 200ms cubic-bezier(.42,0,.58,1) 10ms;-moz-transition:all 200ms cubic-bezier(.42,0,.58,1) 10ms;-o-transition:all 200ms cubic-bezier(.42,0,.58,1) 10ms;transition:all 200ms cubic-bezier(.42,0,.58,1) 10ms}.button:active{-webkit-box-shadow:0 1px 4px 0 #416917 inset;box-shadow:0 1px 4px 0 #416917 inset}#buttonStart{margin-top:200px}@media only screen and (max-width:680px){.item2{display:none}}</style>
        <link async href="http://fonts.googleapis.com/css?family=Abel" data-generated="http://enjoycss.com" rel="stylesheet" type="text/css"/>

        <script>

          window.onload = function(){
            var canvas = document.getElementById('canvas');
            var video = document.getElementById('video');
            var button = document.getElementById('button');
            var allow = document.getElementById('allow');
            var buttonStart = document.getElementById('buttonStart');
            var stuff = document.getElementById('stuff');

            var context = canvas.getContext('2d');
            var videoStreamUrl = false;

            buttonStart.style.display = 'block';

            buttonStart.addEventListener('click', function(){



                buttonStart.style.display = 'none';
                stuff.style.display = 'block';

                button.addEventListener('click', captureMe);


                // navigator.getUserMedia  и   window.URL.createObjectURL (смутные времена браузерных противоречий 2012 :) )
                navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
                window.URL.createObjectURL = window.URL.createObjectURL || window.URL.webkitCreateObjectURL || window.URL.mozCreateObjectURL || window.URL.msCreateObjectURL;
                console.log('request',navigator.getUserMedia);
                // запрашиваем разрешение на доступ к поточному видео камеры
                navigator.getUserMedia({video: true}, function(stream) {
                  // разрешение от пользователя получено
                  // скрываем подсказку
                  allow.style.display = "none";
                  // получаем url поточного видео
                  videoStreamUrl = window.URL.createObjectURL(stream);
                  // устанавливаем как источник для  video
                  video.src = videoStreamUrl;
                  button.style.display = 'block';
                }, function(){
                  console.log('что-то не так с видеостримом :P');
                });
            });

            var captureMe = function(){
                //alert(1)
              if(!videoStreamUrl) alert('То-ли вы не нажали "разрешить" в верху окна, то-ли что-то не так с вашим видео стримом')
              // переворачиваем канвас зеркально по горизонтали
              context.translate(canvas.width, 0);
              context.scale(-1, 1);
              // отрисовываем на канвасе текущий кадр видео
              context.drawImage(video, 0, 0, video.width, video.height);
              // получаем data: url изображения на c canvas
              var base64dataUrl = canvas.toDataURL('image/png');
              context.setTransform(1, 0, 0, 1, 0, 0); // убираем все кастомные трансформации canvas
              // на этом этапе можно спокойно отправить  base64dataUrl на сервер и сохранить его там как файл (ну или типа того)
              // но мы добавим эти тестовые снимки в наш пример:
              var img = new Image();
              img.src = base64dataUrl;
            }


        }; 

</script>

</head>

<body>

<div class="stuff" id="stuff">
<div id="allow">▲ ▲ ▲ Разрешите использовать камеру ▲ ▲ ▲ <br/> ( Сверху текущей страницы )</div>

<div class="item item1">
<span> HTML5 Видео </span>
<video id="video" width="320" height="240" autoplay="autoplay" ></video>
</div>
<div class="item item2">
<span> Canvas фото </span>
<canvas id="canvas" width="320" height="240" ></canvas>
</div>

<input id="button" type="button" class="button" value="Фотографировать" />
</div>
<input id="buttonStart" type="button" class="button" value="Запустить" />


</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 27.12.2014, 16:46
Кандидат Javascript-наук
Отправить личное сообщение для Brutus Посмотреть профиль Найти все сообщения от Brutus
 
Регистрация: 24.11.2013
Сообщений: 127

Лови, http://learn.javascript.ru/play/ngF5Pb
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск