---
title: how to build a video conference ​application ​with WebRTC ​& ​Tokbox
description: how to build a video conference ​application ​with WebRTC ​& ​Tokbox
image: https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/The-Road-to-WebRTC-24.jpg
---

[Skip to content](https://blog.webrtc.ventures/2018/08/tutorial-how-to-build-a-video-conference-application-with-webrtc-tokbox#main-content)

![WebRTC.ventures](https://blog.webrtc.ventures/hubfs/logo-main-light.svg)

- [WebRTC Services](https://webrtc.ventures/webrtc-development-services/)
  
  Show submenu for WebRTC Services 
  
    - [Assess](https://webrtc.ventures/services/assess/)
    - [Build](https://webrtc.ventures/services/build/)
    - [Integrate](https://webrtc.ventures/services/integrate/)
    - [Test](https://webrtc.ventures/services/test/)
    - [Manage](https://webrtc.ventures/services/manage/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
- Our Partners
  
  Show submenu for Our Partners 
  
    - [Amazon Chime SDK](https://webrtc.ventures/partners/amazon-chime-sdk/)
- Stories of Success
  
  Show submenu for Stories of Success 
  
    - [Remote Video Interpreting Platform with Agent Routing](https://webrtc.ventures/successes/remote-video-translation-platform/)
    - [WebRTC to SIP Gateway for ASL Interpreters](https://webrtc.ventures/successes/webrtc-to-sip-gateway-for-asl-interpreters/)
    - [Audio Listening Device to Improve Surgical Outcomes](https://webrtc.ventures/successes/audio-listening-device-to-improve-surgical-outcomes/)
    - [Albania’s First Telemedicine Platform](https://webrtc.ventures/successes/albanias-first-telemedicine-platform/)
    - [Automated Video Storytelling with the Amazon Chime SDK](https://webrtc.ventures/successes/automated-video-storytelling-with-the-amazon-chime-sdk/)
    - [Large Scale Video Conferencing](https://webrtc.ventures/successes/large-scale-video-conferencing/)
    - [Broadcasting and Webcast Control Room](https://webrtc.ventures/successes/live-video-broadcasting-and-webcast-control-room/)
- WebRTC Resources
  
  Show submenu for WebRTC Resources 
  
    - [WebRTC Live](https://webrtc.ventures/webrtc-live/)
    - [WebRTC Tips](https://www.youtube.com/playlist?list=PLayYqdnyegt3QvxX-Rt6wbFIK8727Z5Oz)
    - [WebRTC.ventures Blog](https://webrtc.ventures/blog/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
    - [WebRTC.ventures Training Program](https://webrtc.ventures/webrtc-ventures-training-program/)
- [About Us](https://webrtc.ventures/our-team/)
  
  Show submenu for About Us 
  
    - [Blog](https://webrtc.ventures/blog/)
    - [Our Team](https://webrtc.ventures/our-team/)
    - [Jobs](https://webrtc.ventures/jobs/)

Open main navigation

Close main navigation

- [WebRTC Services](https://webrtc.ventures/webrtc-development-services/)
  
  Show submenu for WebRTC Services 
  
    - [Assess](https://webrtc.ventures/services/assess/)
    - [Build](https://webrtc.ventures/services/build/)
    - [Integrate](https://webrtc.ventures/services/integrate/)
    - [Test](https://webrtc.ventures/services/test/)
    - [Manage](https://webrtc.ventures/services/manage/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
- Our Partners
  
  Show submenu for Our Partners 
  
    - [Amazon Chime SDK](https://webrtc.ventures/partners/amazon-chime-sdk/)
- Stories of Success
  
  Show submenu for Stories of Success 
  
    - [Remote Video Interpreting Platform with Agent Routing](https://webrtc.ventures/successes/remote-video-translation-platform/)
    - [WebRTC to SIP Gateway for ASL Interpreters](https://webrtc.ventures/successes/webrtc-to-sip-gateway-for-asl-interpreters/)
    - [Audio Listening Device to Improve Surgical Outcomes](https://webrtc.ventures/successes/audio-listening-device-to-improve-surgical-outcomes/)
    - [Albania’s First Telemedicine Platform](https://webrtc.ventures/successes/albanias-first-telemedicine-platform/)
    - [Automated Video Storytelling with the Amazon Chime SDK](https://webrtc.ventures/successes/automated-video-storytelling-with-the-amazon-chime-sdk/)
    - [Large Scale Video Conferencing](https://webrtc.ventures/successes/large-scale-video-conferencing/)
    - [Broadcasting and Webcast Control Room](https://webrtc.ventures/successes/live-video-broadcasting-and-webcast-control-room/)
- WebRTC Resources
  
  Show submenu for WebRTC Resources 
  
    - [WebRTC Live](https://webrtc.ventures/webrtc-live/)
    - [WebRTC Tips](https://www.youtube.com/playlist?list=PLayYqdnyegt3QvxX-Rt6wbFIK8727Z5Oz)
    - [WebRTC.ventures Blog](https://webrtc.ventures/blog/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
    - [WebRTC.ventures Training Program](https://webrtc.ventures/webrtc-ventures-training-program/)
- [About Us](https://webrtc.ventures/our-team/)
  
  Show submenu for About Us 
  
    - [Blog](https://webrtc.ventures/blog/)
    - [Our Team](https://webrtc.ventures/our-team/)
    - [Jobs](https://webrtc.ventures/jobs/)
- [Contact us](https://webrtc.ventures/contact/)

[Contact us](https://webrtc.ventures/contact/)

 Aug 6, 2018 12:00:00 AM

# \[TUTORIAL\] ​How ​to ​Build ​a ​Video Conference ​Application ​with WebRTC ​& ​Tokbox

[Hector Zelaya](https://blog.webrtc.ventures/author/hector-zelaya)

Share: [linkedin-in icon](http://www.linkedin.com/shareArticle?mini=true&url=https://blog.webrtc.ventures/2018/08/tutorial-how-to-build-a-video-conference-application-with-webrtc-tokbox) [X Twitter icon](https://twitter.com/intent/tweet?url=https://blog.webrtc.ventures/2018/08/tutorial-how-to-build-a-video-conference-application-with-webrtc-tokbox) [envelope icon](mailto:?body=https://blog.webrtc.ventures/2018/08/tutorial-how-to-build-a-video-conference-application-with-webrtc-tokbox)

This tutorial will be how to build a video conference ​application ​with WebRTC ​& ​Tokbox. We will cover how to build a video conference application by using a Communication-Platform-as-a-Service (CPaaS) solution, **this means that we will focus only on coding our application and not on the infrastructure on which rely.**

We will use Tokbox as the CPaaS solution.

So before we begin, go ahead and [create an account](https://tokbox.com/account/user/signup) if you don’t already have one.

**Tokbox provides a free trial which will be enough to do this tutorial and get familiar with the technology.**

Before moving forward though, let’s recall our slightly modified three-step flow for enabling communication using webRTC.

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_44_45.png?width=647&height=360&name=Screenshot-2018-08-06-15_44_45.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_44_45.png?width=647&height=360&name=Screenshot-2018-08-06-15_44_45.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_44_45.png)

1. The browser get access to the media devices (camera and microphone).

2. Each peer exchange information about itself with all other peers through a signaling process managed by the CPaaS vendor.

3. After information exchange, peers can connect each other through the vendor’s platform and the communication begins.

As you can see, servers are still there: Signaling, STUN, TURN and media server are all there, only that this time they’re part of a service offered by a third party vendor.

## The Application

**Our application will consist of a room selection screen, on which the user will type the room name to which he wants to join, and a call screen, where he will be able to see the video of all the participants.**

As usual, the code for this tutorial is available as a public repository on Github, you can [clone](https://github.com/agilityfeat/webrtc-video-conference-tutorial/) it to your computer or follow along with us to build it from scratch.

We’re using Javascript as programming language and Node.JS as runtime engine so you’ll need to install [node](https://nodejs.org/en/download/) if you don’t have it yet.

So **let’s begin by creating a folder anywhere you want, this will be our project folder.**

Then create another one inside called public.

Now using the command line, navigate to the project folder and type the following commands to install the required dependencies. An internet connection is required to download the libraries.

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_48_29.png?width=357&height=49&name=Screenshot-2018-08-06-15_48_29.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_48_29.png?width=357&height=49&name=Screenshot-2018-08-06-15_48_29.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_48_29.png)

Now, let’s create a simple html file with two divs: selectRoom and videos. **The first one will show a screen to type a room name for the call and the other is where the actual call takes place.** Inside the videos div, we will create another pair of divs: publisher and subscribers, those are going be used by tokbox to append the video elements of each call participant. We will also add the opentok library and our client.js script before the <body> closing tag.

Using your favorite text editor, create a new file and paste the code below, then save it in the public folder from your project as index.html

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_49_51-1.png?width=626&height=180&name=Screenshot-2018-08-06-15_49_51-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_49_51-1.png?width=626&height=180&name=Screenshot-2018-08-06-15_49_51-1.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_49_51-1.png)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_50_09-1.png?width=638&height=230&name=Screenshot-2018-08-06-15_50_09-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_50_09-1.png?width=638&height=230&name=Screenshot-2018-08-06-15_50_09-1.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_50_09-1.png)

Now we need to create the client’s side javascript file.

**We will begin the client.js file by getting references to webpage elements and declaring some variables, among these are apiKey, sessionId and token variables, which are used by the opentok library to connect with the tokbox platform in order to initiate or join to a call.** We also declare a variable to store the room name and our Node.JS server URL.

Continuing with our client.js file, when the user clicks the Go button to initiate the call we use the fetch function to make a request to a route defined on our server. The server returns a JSON response with the values for the three tokbox variables. After we set these values we call the initializeSession function.

The initializeSession function is where all the magic happens, first we toggle the visibility of the divs and then we join to a Tokbox session, defined by the sessionId variable. **Think of a session as a room, therefore all participants needs to be in the same session to be able to talk each other.**

Next we set a handler for the ‘streamCreated’ event, this event will be received each time a new participant joins the session, and in the callback of the handler we subscribe the session to a stream. In Tokbox, the term subscribe refers to the ability to receive video and audio from other users.

The function continues by creating a publisher. **A publisher is a type of object that allow us to publish or send our own video and audio to the session.** Finally we connect to the session and then we send our publisher object.

Now, using your favorite text editor, create the client.js file and save it on your project folder, under public.

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_52_24-1.png?width=635&height=146&name=Screenshot-2018-08-06-15_52_24-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_52_24-1.png?width=635&height=146&name=Screenshot-2018-08-06-15_52_24-1.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_52_24-1.png)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_53_50-1.png?width=492&height=705&name=Screenshot-2018-08-06-15_53_50-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_53_50-1.png?width=492&height=705&name=Screenshot-2018-08-06-15_53_50-1.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_53_50-1.png)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_54_47.png?width=472&height=104&name=Screenshot-2018-08-06-15_54_47.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_54_47.png?width=472&height=104&name=Screenshot-2018-08-06-15_54_47.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_54_47.png)

At the moment, behind the scenes, the opentok library has gotten access to the media devices, **so step one is done.**

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_55_46-1.png?width=459&height=39&name=Screenshot-2018-08-06-15_55_46-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_55_46-1.png?width=459&height=39&name=Screenshot-2018-08-06-15_55_46-1.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_55_46-1.png)

Also as more users arrive to the session, the tokbox platform is coordinating the communication between them, so a signaling process is running transparently. This means that **Tokbox has completed step 2 on our behalf.**

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_56_01-1.png?width=487&height=58&name=Screenshot-2018-08-06-15_56_01-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_56_01-1.png?width=487&height=58&name=Screenshot-2018-08-06-15_56_01-1.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_56_01-1.png)

So before creating the third step of our flow, let’s create our server.

This time there will be no signaling here, just pure express and node code. The server code begins by adding all the required imports. Then we set three variables: apiKey, secret and rooms. The value for the first two is provided by Tokbox when you create an account, be sure to store them in a safe place, we will add these using environment variables later. The rooms variable will serve as a store for tokbox sessions.

Next we create an opentok object and define the express routes. We end the file with the app listener on port 3000.

Our server is in charge of two things: **serving the client files and generate the values for the client side tokbox variables, the latter is done on the /room/:name route.**

We said before that for a group of users be able to talk each other, they need to be in the same session or room, right? So how do we make this possible? When the user types a room name and clicks the Go button, the client.js file makes a request to the server, remember?

Well, in this request, **the server receives a room name**.

When the server gets the room name, it first makes sure that the room doesn’t exist so it take a look on its rooms variable. If the session exists there, then it just create a token and returns a response with the three values: sessionId got from the rooms array, the apiKey provided by environment variables and the newly created token, which is a type of access code for a user be able to join a call.

If there is no entry with that name on the rooms array, then the server creates one and stores it in the aforementioned variable, from there it does the same procedure described above. **When the client gets the three variables it can connect directly with the tokbox platform to initiate or join to the call**. Create the server.js file and paste the code below

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_58_31.png?width=510&height=683&name=Screenshot-2018-08-06-15_58_31.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_58_31.png?width=510&height=683&name=Screenshot-2018-08-06-15_58_31.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_58_31.png)

 

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_02.png?width=536&height=168&name=Screenshot-2018-08-06-15_59_02.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_02.png?width=536&height=168&name=Screenshot-2018-08-06-15_59_02.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_02.png)

So up until now, the step three is also done.

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_23.png?width=454&height=42&name=Screenshot-2018-08-06-15_59_23.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_23.png?width=454&height=42&name=Screenshot-2018-08-06-15_59_23.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_23.png)

Now it’s time to run the application, but before, be sure to set your environment variables. On Unix/Linux systems this is done by writing on the command line:

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_41.png?width=278&height=37&name=Screenshot-2018-08-06-15_59_41.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_41.png?width=278&height=37&name=Screenshot-2018-08-06-15_59_41.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_41.png)

Now, on the same terminal screen, navigate to the project folder and type the following command:

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_52.png?width=109&height=22&name=Screenshot-2018-08-06-15_59_52.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_52.png?width=109&height=22&name=Screenshot-2018-08-06-15_59_52.png)](https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/Screenshot-2018-08-06-15_59_52.png)

Then using Google Chrome or Mozilla Firefox, open [http://localhost:3000](http://www.localhost3000.org/) on three or more separated tabs, type the same room name on all tabs and click Go!

Great, isn’t? Now **you’ve created a video conference application without having to worry about setting the infrastructure**, which is managed by a CPaaS vendor.

## Want to leave it to the experts?

If you are ready to **chat about how you can incorporate a video conference app into your business**? We have an experienced team ready & happy to help you out. [Contact us today](https://webrtc.ventures/contact/).

[CPaaS](https://blog.webrtc.ventures/tag/cpaas), [Managed Services](https://blog.webrtc.ventures/tag/managed-services), [Events](https://blog.webrtc.ventures/tag/events), [Video Conferencing](https://blog.webrtc.ventures/tag/video-conferencing), [Real Time Weekly](https://blog.webrtc.ventures/tag/real-time-weekly), [WebRTC Architecture](https://blog.webrtc.ventures/tag/webrtc-architecture), [Broadcasting](https://blog.webrtc.ventures/tag/broadcasting), [Medical](https://blog.webrtc.ventures/tag/medical), [WebRTC Live](https://blog.webrtc.ventures/tag/webrtc-live), [Showcase](https://blog.webrtc.ventures/tag/showcase), [Thoughts](https://blog.webrtc.ventures/tag/thoughts), [Vonage](https://blog.webrtc.ventures/tag/vonage), [Daily](https://blog.webrtc.ventures/tag/daily), [Jobs](https://blog.webrtc.ventures/tag/jobs), [Contact Centers](https://blog.webrtc.ventures/tag/contact-centers), [Telehealth](https://blog.webrtc.ventures/tag/telehealth), [Education](https://blog.webrtc.ventures/tag/education), [Technical](https://blog.webrtc.ventures/tag/technical), [General](https://blog.webrtc.ventures/tag/general), [Story of success](https://blog.webrtc.ventures/tag/story-of-success), [The WebRTC.ventures Blog](https://blog.webrtc.ventures/tag/the-webrtc-ventures-blog), [Testing](https://blog.webrtc.ventures/tag/testing), [Gaming](https://blog.webrtc.ventures/tag/gaming), [DevOps](https://blog.webrtc.ventures/tag/devops), [Symbl.ai](https://blog.webrtc.ventures/tag/symbl-ai)

## Related posts

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/The-Road-to-WebRTC-20.jpg?height=200&name=The-Road-to-WebRTC-20.jpg)](https://blog.webrtc.ventures/2018/07/tutorial-build-video-conference-application-webrtc-2)

## [\[Tutorial\] How to Build a Video Conference Application with WebRTC](https://blog.webrtc.ventures/2018/07/tutorial-build-video-conference-application-webrtc-2)

[Hector Zelaya](https://blog.webrtc.ventures/author/hector-zelaya) 

 Jul 26, 2018 12:00:00 AM

In this blog post, we will provide a tutorial on how to build a video conference application using...

[Read more](https://blog.webrtc.ventures/2018/07/tutorial-build-video-conference-application-webrtc-2)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/blogimage1.png?height=200&name=blogimage1.png)](https://blog.webrtc.ventures/2018/02/learn-how-to-build-a-video-conference-app-and-not-die-trying)

## [Learn How to Build a Video Conference App (and not die trying)!](https://blog.webrtc.ventures/2018/02/learn-how-to-build-a-video-conference-app-and-not-die-trying)

[Hector Zelaya](https://blog.webrtc.ventures/author/hector-zelaya) 

 Feb 1, 2018 12:00:00 AM

Real-time Communication is quickly becoming a “must-have” feature in many types of applications....

[Read more](https://blog.webrtc.ventures/2018/02/learn-how-to-build-a-video-conference-app-and-not-die-trying)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/TADHack-Global-to-be-held-next-to-2019-IIT-RTC-Conference-2.png?height=200&name=TADHack-Global-to-be-held-next-to-2019-IIT-RTC-Conference-2.png)](https://blog.webrtc.ventures/2019/06/tadhack-global-to-be-held-next-to-2019-iit-rtc-conference)

## [TADHack Global to be held next to 2019 IIT RTC Conference](https://blog.webrtc.ventures/2019/06/tadhack-global-to-be-held-next-to-2019-iit-rtc-conference)

[webrtc](https://blog.webrtc.ventures/author/webrtc) 

 Jun 26, 2019 12:00:00 AM

TADHack is a group of global hackathons around leading technologies like WebRTC,...

[Read more](https://blog.webrtc.ventures/2019/06/tadhack-global-to-be-held-next-to-2019-iit-rtc-conference)

### WebRTC.Ventures Services

...

- Assess
- Build
- Integrate
- Test
- Deploy & Manage

### Contact Us

...

**Video should be an opportunity, not a headache.**   
 We’re here to build, integrate, assess and optimize, test, and even deploy and manage your live video application. 

[Contact us](https://blog.webrtc.ventures/2018/08/tutorial-how-to-build-a-video-conference-application-with-webrtc-tokbox#contact)

### WebRTC Live

...

 View [past episodes](https://blog.webrtc.ventures/webrtc-live/) of our webinar interview series about the latest webRTC use cases and technical updates. Join our mailing list to learn about upcoming episodes! 

![WebRTC Live](https://blog.webrtc.ventures/hs-fs/hubfs/Template%20Images/widged-bannet.webp?height=90&name=widged-bannet.webp)

![logo-main-light](https://blog.webrtc.ventures/hubfs/logo-main-light.svg "logo-main-light")

We’re one of the few agencies in the world dedicated to WebRTC development. This dedication and experience is why so many people trust us to help bring live video application dreams to life.

 

### Let's get started!

###### **[Contact us today](https://webrtc.ventures/contact/)**

**[info@webrtc.ventures](mailto:info@webrtc.ventures)**

<https://www.linkedin.com/company/webrtc-ventures> <https://www.youtube.com/@WebrtcVentures>

### Join our mailing list

We don't e-mail often (a few times a month max), and it will be worth it when we do! Of course, we respect your privacy and will not share your contact information.

© 2023 WebRTC.ventures, an [AgilityFeat](https://agilityfeat.com/) company / [Privacy Policy](https://webrtc.ventures/privacy-policy//)

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Hector Zelaya",
    "url" : "https://blog.webrtc.ventures/author/hector-zelaya"
  },
  "dateModified" : "2024-04-03T19:03:15.263Z",
  "datePublished" : "2018-08-06T04:00:00.000Z",
  "headline" : "how to build a video conference ​application ​with WebRTC ​& ​Tokbox",
  "image" : [ "https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/The-Road-to-WebRTC-24.jpg" ],
  "mainEntityOfPage" : {
    "@id" : "https://blog.webrtc.ventures/2018/08/tutorial-how-to-build-a-video-conference-application-with-webrtc-tokbox",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://blog.webrtc.ventures/hubfs/logo-main-light.svg"
    }
  }
}
```