2014-06-13 3 views
0

Я использовал getusermedia(), чтобы передать веб-камеру и микрофон в браузер. Но при захвате видео с помощью холста он выводит черное изображение! ctx.drawImage(video, 0,0,640,480); window.open(canvas.toDataURL('image/jpeg')); Почему его отображение черного изображения и как его исправить? Ингмарс решил проблему мага.Захват видео скриншота с использованием холста

Теперь, если я хочу видео с максимальным 10 секунд, я думал о том, чтобы перебирать кадры и присоединяться к .png один за другим. Является ли это возможным? Если у вас нет альтернативы?

+0

Вы использовали некоторые вид цикла для 'drawImage'? Это не сработает, если вы назовете его только один раз. Вам нужно обновить контекст canvas для каждого фрейма. – Ingmars

+0

Не используется никакой петли. – user3508453

+0

Какую бы петлю использовать @Ingmars – user3508453

ответ

2

Вам нужен цикл:

//assuming canvas, ctx and video is set previously and available in all scopes. 

var fps = 1000/25; //Approximately 25 frames per second 

var videoDrawInterval = setInterval(function() { 
    ctx.drawImage(video, 0, 0, 640, 480); 
}, fps); 


something.onclick = function() { 
    clearInterval(videoDrawInterval); 

    var snapshotImg = new Image(); 
    snapshotImg.src = canvas.toDataURL('image/jpeg', 0.5); //Second param is jpg quality 

    var win = window.open('', 'Snapshot', 'width=640, height=480' ); 
    win.document.body.appendChild(snapshotImg); 
} 

Имейте в виду, что сжатие JPEG не поддерживается во всех браузерах, поэтому для тестирования я предлагаю использовать PNG формат:

canvas.toDataURL('image/png'); 
+0

нет, если он/она хочет только скриншот, нет необходимости в цикле, если это всего лишь один снимок экрана. –

Смежные вопросы