# Accessing Your Webcam in HTML5

**URL:** <https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092>\
**Category:** programming\
**Created:** [November 23, 2014, 12:06am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092 "2014-11-23T00:06:38Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [June 16, 2018, 3:14pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/21 "2018-06-16T15:14:33Z")

</div>

I think the APi has been changed to: [https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)

The tutorial will be updated in a few moments to support it instead of the now-deprecated `navigator.getUserMedia`.

Cheers,  
Kirupa

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [June 18, 2018, 2:29am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/22 "2018-06-18T02:29:12Z")

</div>

I updated the tutorial to reflect the new getUserMedia API that everyone should be using: [https://www.kirupa.com/html5/accessing\_your\_webcam\_in\_html5.htm](https://www.kirupa.com/html5/accessing_your_webcam_in_html5.htm)

Thanks for bringing this to my attention 🙂

---

<div class="post-metadata">

**Author:** ![shashi\_kumar](https://avatars.discourse-cdn.com/v4/letter/s/91b2a8/32.png) [@shashi\_kumar](https://forum.kirupa.com/u/shashi_kumar)\
**Post date:** [September 7, 2018, 9:28pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/23 "2018-09-07T21:28:41Z")

</div>

How to stop video streaming completely

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [September 8, 2018, 6:22pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/24 "2018-09-08T18:22:22Z")

</div>

You can’t prevent the code from disabling your webcam. Is that what you are asking?

---

<div class="post-metadata">

**Author:** ![NDF](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ndf/32/9287_2.png) [@NDF](https://forum.kirupa.com/u/NDF)\
**Post date:** [September 17, 2018, 12:42am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/25 "2018-09-17T00:42:29Z")

</div>

Hi, thanks for the article, however I’m not seeing the webcam in Firefox on Windows 7, just the grey box and the error warning. Works fine in Chrome.

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [September 17, 2018, 1:53am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/26 "2018-09-17T01:53:45Z")

</div>

What is the error you are seeing in Firefox?

---

<div class="post-metadata">

**Author:** ![NDF](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ndf/32/9287_2.png) [@NDF](https://forum.kirupa.com/u/NDF)\
**Post date:** [September 17, 2018, 2:26am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/27 "2018-09-17T02:26:26Z")

</div>

Hi, my bad! Turns out it wasn’t working because the webcam was still in use in a Chrome browser whilst I was testing in FF!  
In the hope of someone else not making the same stupid mistake, the error was ‘NotReadableError: Failed to allocate videosource’

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [September 17, 2018, 2:46am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/28 "2018-09-17T02:46:19Z")

</div>

Haha! That has bitten me so often. The error message could be more helpful in a case like this as well 😛

---

<div class="post-metadata">

**Author:** ![Andy1211](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@Andy1211](https://forum.kirupa.com/u/Andy1211)\
**Post date:** [October 18, 2018, 4:38pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/29 "2018-10-18T16:38:02Z")

</div>

Hi,  
thanks for this. Can you pls advise how to make it work in an **android webview**? thks.

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [October 18, 2018, 9:23pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/30 "2018-10-18T21:23:32Z")

</div>

The code should just work. Have you set the appropriate app permissions to allow webcam access via the webview?

---

<div class="post-metadata">

**Author:** ![Zain\_Arain](https://avatars.discourse-cdn.com/v4/letter/z/f05b48/32.png) [@Zain\_Arain](https://forum.kirupa.com/u/Zain_Arain)\
**Post date:** [October 31, 2018, 7:54am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/31 "2018-10-31T07:54:18Z")

</div>

Hello Kirupa,

I wanted to ask you that is there any way to stop the camera, it seems that when i close my video div on stop my camera is still on and browser still shows the recording icon in the tab corner.

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [November 1, 2018, 4:09am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/32 "2018-11-01T04:09:26Z")

</div>

Sorry for the delay in replying on this. You need to stop each audio/video track individually.

You can get a list of all tracks using: `stream.getTracks()`

That will be an array of track objects, so you can loop through it and call the `stop` method on each track object found.

Cheers,  
Kirupa

---

<div class="post-metadata">

**Author:** ![Manitoulin-Island-Te](https://avatars.discourse-cdn.com/v4/letter/m/7bcc69/32.png) [@Manitoulin-Island-Te](https://forum.kirupa.com/u/Manitoulin-Island-Te)\
**Post date:** [November 29, 2018, 7:57am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/33 "2018-11-29T07:57:13Z")

</div>

Hey, thanks for the great tutorial, I like how you broke it down so you understand the sections. Any update on filters and overlays? I just want to add a custom grid to mine. Ideas? Thank you sir.

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [December 2, 2018, 6:17pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/34 "2018-12-02T18:17:52Z")

</div>

Sorry for the delay in getting back to you on it. You can position a div element over the image and place any content you want. You can certainly use filters and/or grids - just be sure to ensure there are transparent regions so that the video can still be visible 🙂

---

<div class="post-metadata">

**Author:** ![Willy\_Marston](https://avatars.discourse-cdn.com/v4/letter/w/7ea924/32.png) [@Willy\_Marston](https://forum.kirupa.com/u/Willy_Marston)\
**Post date:** [February 28, 2019, 8:17pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/35 "2019-02-28T20:17:50Z")

</div>

Hi Kirupa,

Congratulations! Keep up with the good work!

---

<div class="post-metadata">

**Author:** ![murkle](https://avatars.discourse-cdn.com/v4/letter/m/85e7bf/32.png) [@murkle](https://forum.kirupa.com/u/murkle)\
**Post date:** [March 6, 2019, 3:15pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/36 "2019-03-06T15:15:16Z")

</div>

You can change the example slightly to allow selecting front/back camera (works on iOS and Android!)

```
 var params = {video: {facingMode: 'environment'}};
// or use 
//var params = {video: {facingMode: 'user'}};
 
if (navigator.mediaDevices.getUserMedia) {       
    navigator.mediaDevices.getUserMedia(params)
```

---

<div class="post-metadata">

**Author:** ![Kirit\_Kajwe](https://avatars.discourse-cdn.com/v4/letter/k/bcef8e/32.png) [@Kirit\_Kajwe](https://forum.kirupa.com/u/Kirit_Kajwe)\
**Post date:** [March 19, 2019, 1:50pm UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/37 "2019-03-19T13:50:13Z")

</div>

Hi,

I tried the samething but my streaming is not stopped and i can see the camera is still running in the background. Is there any other way to stop the cam ?

Below is my code:  
I have created my function cameraService…

```
cameraService(cameraStop: boolean) {
    var front = false;
    var constraints = { video: { facingMode: (front ? "user" : "environment") } };

    function handleSuccess(stream) {
      const video: any = document.querySelector('#video');
      video.srcObject = stream;
      if (cameraStop == true) {
        video.play();
        console.log("On Stream");
      }
      else {
        stopStream(stream);
        console.log("Off Stream");
      }
    }

    function showVideo() {
      this.video.classList.add("visible");
    }

    function handleError(error) {
      console.log('getUserMedia error: ', error);
    }

    navigator.mediaDevices.getUserMedia(constraints).
      then(handleSuccess).catch(handleError);

    function stopStream(stream) {

      for (let track of stream.getTracks()) {
        track.stop()
      }
    }
  }
```

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [March 20, 2019, 4:20am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/38 "2019-03-20T04:20:43Z")

</div>

I think you are on the right _ **track** _ 😄

You may need to set the video source to **null** in addition to calling `stop` on the `track` object. Check out the following snippet:

```
function stop(e) {
  var stream = video.srcObject;
  var tracks = stream.getTracks();

  for (var i = 0; i < tracks.length; i++) {
    var track = tracks[i];
    track.stop();
  }

  video.srcObject = null;
}

```

Here is a working example: [https://www.kirupa.com/snippets/examples/stop\_webcam\_stream.htm](https://www.kirupa.com/snippets/examples/stop_webcam_stream.htm)

Does this help?

Cheers,  
Kirupa

---

<div class="post-metadata">

**Author:** ![Adarsh\_Jaiswal](https://avatars.discourse-cdn.com/v4/letter/a/a9a28c/32.png) [@Adarsh\_Jaiswal](https://forum.kirupa.com/u/Adarsh_Jaiswal)\
**Post date:** [March 24, 2019, 9:19am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/40 "2019-03-24T09:19:06Z")

</div>

Kirupa,  
what changes do i have to make if i want to take a picture and the save it?

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [March 26, 2019, 5:15am UTC](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092/41 "2019-03-26T05:15:23Z")

</div>

You can define a new image using the `canvas.drawImage` API. The source of the image will be a frame from the video element that is displaying your webcam footage. I don’t have time to create a custom example (yet), but this article does a good job providing a solution: [https://developer.mozilla.org/en-US/docs/Web/API/WebRTC\_API/Taking\_still\_photos](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Taking_still_photos)

🙂

[Previous page](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092.md?page=1)

[Next page](https://forum.kirupa.com/t/accessing-your-webcam-in-html5/352092.md?page=3)
