Here was my code to initialize the capture canvas:
function CaptureImageBeginCapture() {
CaptureImageCanvas = $("#ImageCaptureCanvas")[0];
var videoObj = { "video": true },
errBack = function(error) {
console.log("Video capture error: ", error.code);
};
CaptureImageVideo = $("#ImageCapturePreviewFrame")[0];
CaptureImageContext = CaptureImageCanvas.getContext("2d");
// Put video listeners into place if(navigator.getUserMedia) { // Standard navigator.getUserMedia(videoObj, function(stream) {
CaptureImageStream = stream;
CaptureImageVideo.src = stream;
CaptureImageVideo.play();
}, errBack);
} else if(navigator.webkitGetUserMedia) { // WebKit-prefixed navigator.webkitGetUserMedia(videoObj, function(stream){
CaptureImageStream = stream;
CaptureImageVideo.src = window.webkitURL.createObjectURL(stream);
CaptureImageVideo.play();
}, errBack);
}
else if(navigator.mozGetUserMedia) { // Firefox-prefixed navigator.mozGetUserMedia(videoObj, function(stream){
CaptureImageStream = stream;
CaptureImageVideo.src = window.URL.createObjectURL(stream);
CaptureImageVideo.play();
}, errBack);
}
}
And this code was used to react to the pressing of a "Capture" button which froze the image and then saved it.
// Snapping up the picture$("#ImageCaptureSnap").click(function() {
CaptureImageContext.drawImage(CaptureImageVideo, 0, 0, 640, 480, -95,0,448,330);
CaptureImageStream.stop();
$("#ImageCaptureStep1").hide();
$("#ImageCaptureStep2").show();
});
Unfortunately, the MediaStream.stop() function recently became depreciated. After a quick search, I found only one article explaining what I need to do to fix it. The fix is to get a "track" instance from your MediaStream and stop the track instead of stopping the MediaStream itself.
// Snapping up the picture$("#ImageCaptureSnap").click(function() {
CaptureImageContext.drawImage(CaptureImageVideo, 0, 0, 640, 480, -95,0,448,330);
try { CaptureImageStream.stop(); } catch(e) { }try {} catch(e) { } $("#ImageCaptureStep1").hide(); $("#ImageCaptureStep2").show(); });
var track = CaptureImageStream.getTracks()[0];
track.stop();
Hopefully it won't change further, but as we know HTML5 APIs are evolving all the time.