# Record a session

**URL:** <https://devforum.zoom.us/t/record-a-session/48988>\
**Category:** Web\
**Created:** [April 27, 2021, 3:45pm UTC](https://devforum.zoom.us/t/record-a-session/48988 "2021-04-27T15:45:31Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![alex125](https://avatars.discourse-cdn.com/v4/letter/a/ba8739/32.png) [@alex125](https://devforum.zoom.us/u/alex125)\
**Post date:** [April 27, 2021, 3:45pm UTC](https://devforum.zoom.us/t/record-a-session/48988/1 "2021-04-27T15:45:32Z")

</div>

How can I record a session? Let’s say I want to record and save it on my server.

---

<div class="post-metadata">

**Author:** ![bekit](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/bekit/32/26056_2.png) [@bekit](https://devforum.zoom.us/u/bekit)\
**Post date:** [April 27, 2021, 5:16pm UTC](https://devforum.zoom.us/t/record-a-session/48988/2 "2021-04-27T17:16:08Z")

</div>

I’m not seeing recording or raw stream capture available on the Web Video SDK. There are methods for it on the mobile and desktop SDKs, though.

One option you could use is to capture the canvas that you are drawing the videos on using [HTMLCanvasElement.captureStream()](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/captureStream). You’ll have to manage all of the recording logic yourself, though.

---

<div class="post-metadata">

**Author:** ![alex125](https://avatars.discourse-cdn.com/v4/letter/a/ba8739/32.png) [@alex125](https://devforum.zoom.us/u/alex125)\
**Post date:** [April 27, 2021, 11:49pm UTC](https://devforum.zoom.us/t/record-a-session/48988/3 "2021-04-27T23:49:09Z")

</div>

How about the audio? We may record them separately and mix them together somehow I guess?

---

<div class="post-metadata">

**Author:** ![bekit](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/bekit/32/26056_2.png) [@bekit](https://devforum.zoom.us/u/bekit)\
**Post date:** [April 28, 2021, 12:23am UTC](https://devforum.zoom.us/t/record-a-session/48988/4 "2021-04-28T00:23:59Z")

</div>

That’s a really good question. I don’t know if there’s a way to capture the audio stream.

I get that the raw audio & video feeds probably can’t be done easily on web, but I really wish the SDK could provide the audio and video as MediaStreamTracks.

---

<div class="post-metadata">

**Author:** ![alex125](https://avatars.discourse-cdn.com/v4/letter/a/ba8739/32.png) [@alex125](https://devforum.zoom.us/u/alex125)\
**Post date:** [April 28, 2021, 12:46am UTC](https://devforum.zoom.us/t/record-a-session/48988/5 "2021-04-28T00:46:13Z")

</div>

I’m curious if the streams are going through Zoom server so that Zoom can count how many minutes their customers have used. If that’s not the case, then Zoom may rely on the join/leave method of the SDK. In that case it’s a bit dangerous for their customers if they forgot to call `leave` method in their app, they may end up with a big bill.

---

<div class="post-metadata">

**Author:** ![bekit](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/bekit/32/26056_2.png) [@bekit](https://devforum.zoom.us/u/bekit)\
**Post date:** [April 28, 2021, 3:13am UTC](https://devforum.zoom.us/t/record-a-session/48988/6 "2021-04-28T03:13:08Z")

</div>

The streams definitely go through their servers. However, if you just close the page or get disconnected, your user times out of the meeting within a couple of minutes and it stops running up minutes. The leave call makes them exit immediately, so it’s good to hook that on an unload event.

If the page is left open and connected, I’m not sure if it will time out or keep running up minutes. I am considering writing a failsafe into my app to prompt users to confirm they are still active after a certain amount of time to reduce that risk.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [April 29, 2021, 9:01pm UTC](https://devforum.zoom.us/t/record-a-session/48988/7 "2021-04-29T21:01:11Z")

</div>

Hey @bekit , @alex125 ,

Regarding Video SDK recording, this will have to be built on your end as we do not support this. Perhaps we will in the future.

> [@bekit](#):
>
> If the page is left open and connected, I’m not sure if it will time out or keep running up minutes. I am considering writing a failsafe into my app to prompt users to confirm they are still active after a certain amount of time to reduce that risk.

Good point. If the sessions are live it will count towards billing. We can look into offering an “inactive” prompt or logic of some sort, but you will have to handle that currently.

If the browser tab is closed though, the session will disconnect (end).

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![bekit](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/bekit/32/26056_2.png) [@bekit](https://devforum.zoom.us/u/bekit)\
**Post date:** [April 30, 2021, 6:10pm UTC](https://devforum.zoom.us/t/record-a-session/48988/8 "2021-04-30T18:10:38Z")

</div>

> [@tommy](#):
>
> Good point. If the sessions are live it will count towards billing. We can look into offering an “inactive” prompt or logic of some sort, but you will have to handle that currently.

Yeah, I don’t mind adding that part myself. What would be nice is a session time limit. For instance, if the session itself would end when the signature expires or if there was some kind of time limit that could be passed to the `join` method, that would be helpful as a safety check against running up a large bill.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [May 3, 2021, 4:30pm UTC](https://devforum.zoom.us/t/record-a-session/48988/9 "2021-05-03T16:30:33Z")

</div>

Hey @bekit , that is a great suggestion, thank you for sharing this! 🙂

> [@bekit](#):
>
> What would be nice is a session time limit. For instance, if the session itself would end when the signature expires or if there was some kind of time limit that could be passed to the `join` method, that would be helpful as a safety check against running up a large bill.

We will see if we can fit this into our backlog.

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/3X/6/1/614bdd549b610bbaa46ff934617683a02bdaa03c.png) [@system](https://devforum.zoom.us/u/system)\
**Post date:** [June 3, 2021, 2:31am UTC](https://devforum.zoom.us/t/record-a-session/48988/10 "2021-06-03T02:31:14Z")

</div>

Closed on June 3, 2021, 2:31am UTC

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [June 29, 2021, 6:04pm UTC](https://devforum.zoom.us/t/record-a-session/48988/11 "2021-06-29T18:04:36Z")

</div>

Hey @bekit , @alex125 ,

I wanted to share this article on how you can record an HTML Canvas. This approach could be used to record a Video SDK Session:

> **[How to record a canvas element](https://medium.com/@amatewasu/how-to-record-a-canvas-element-d4d0826d3591)**
>
> This is a really short tutorial in order to show you how to record a canvas element properly

Thanks,  
Tommy
