<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yash Srivastava</title>
    <description>The latest articles on DEV Community by Yash Srivastava (@yashsrivastava176).</description>
    <link>https://dev.to/yashsrivastava176</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F887370%2Fec69f94f-ed79-4688-a675-8cdaa3c3e9ed.jpg</url>
      <title>DEV Community: Yash Srivastava</title>
      <link>https://dev.to/yashsrivastava176</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yashsrivastava176"/>
    <language>en</language>
    <item>
      <title>Building A Video Streaming App Using Screen Share Using React Native Toolkit</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Wed, 13 Jul 2022 05:37:47 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/building-a-video-streaming-app-using-screen-share-using-react-native-toolkit-3644</link>
      <guid>https://dev.to/yashsrivastava176/building-a-video-streaming-app-using-screen-share-using-react-native-toolkit-3644</guid>
      <description>&lt;p&gt;While video meetings make communication more personal, screen sharing makes it more collaborative. With businesses embracing remote and hybrid work where one-to-one and multiparty video calls are a norm, screen sharing becomes all the more crucial.&lt;/p&gt;

&lt;p&gt;This post is for you if you’re looking to build a video calling application with screen sharing using React Native.&lt;/p&gt;

&lt;p&gt;We have provided a detailed step-by-step guide to explain how you can embed the screen sharing feature in the existing application using EnableX React-Native toolkit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Pre-Requisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nodejs framework&lt;/li&gt;
&lt;li&gt;JDK&lt;/li&gt;
&lt;li&gt;Android Studio (recommended to use LTS version)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is EnableX React Native SDK?
&lt;/h2&gt;

&lt;p&gt;The EnableX-React Native SDK is used to build hybrid real-time communication applications for Android and iOS-based mobile devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating Project in EnableX
&lt;/h3&gt;

&lt;p&gt;First, you need to create a project on the EnableX portal. Here are the steps are given below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the EnableX portal. If you do not have an account, &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;Signup here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Next, “Create Projects”, enter relevant information as required.&lt;/li&gt;
&lt;li&gt;You get the option to copy App ID &amp;amp; APP Key when you create the project the first time.
In case the project has already been created, users need to go to the Video Project, then select the option: ‘I like to Code’ and then they can view App ID &amp;amp; App Key.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Creating a ReactNative Project
&lt;/h3&gt;

&lt;p&gt;Now, you need to create a ReactNative project. Follow the steps given below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Installing the EnableX React Native SDK&lt;/strong&gt;&lt;br&gt;
To install the EnableX-ReactNative SDK, open the project, navigate to the ReactNative Project directory and run the following command:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SXkiwZCD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o4a9xfytafmzgbxwhxm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SXkiwZCD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o4a9xfytafmzgbxwhxm5.png" alt="Image description" width="768" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Importing the Reactive Native Class&lt;/strong&gt;&lt;br&gt;
Once the installation is done successfully, import ‘enx-rtc-react-native’ in the class where you want to access the EnableX capability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qkGtH_Zq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyv6vjmjbiflm9cm8mpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qkGtH_Zq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyv6vjmjbiflm9cm8mpt.png" alt="Image description" width="768" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. How To Start And Stop Screen Sharing&lt;/strong&gt;&lt;br&gt;
EnableX-ReactNative SDK is used to start and stop screen sharing, while events are used to handle acknowledgements. To start screen sharing, use the following function:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pKrB8VVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ohavboioi16athdl3rd1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pKrB8VVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ohavboioi16athdl3rd1.png" alt="Image description" width="768" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To stop screen sharing, use the following function:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4JdmYNVk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3bebh24mj5bo268e4cul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4JdmYNVk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3bebh24mj5bo268e4cul.png" alt="Image description" width="768" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the user starts or stops the screen sharing feature, EnableX-ReactNative SDK acknowledges the event by sending event notifications to other participants:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UQBRVuRe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ss21lfoba71zlp9zagip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UQBRVuRe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ss21lfoba71zlp9zagip.png" alt="Image description" width="768" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Installing Foreground Service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Foreground Service is required whenever an application needs to perform a task which is also noticeable by users even when they’re not directly interacting with the app.&lt;/p&gt;

&lt;p&gt;Therefore, you need to install the Foreground Service. It is required to use the screen sharing feature in an app.  Here are the steps you need to follow to start the foreground services:&lt;/p&gt;

&lt;p&gt;A. Use the following command to add dependency in foreground services:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gBHBtoKS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qtk854u9ocnzqavsyo4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gBHBtoKS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qtk854u9ocnzqavsyo4e.png" alt="Image description" width="768" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B. Add permissions in “AndroidManifest.xml File”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YAOuX3Z5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zscdjv4ps15dhy25nohj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YAOuX3Z5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zscdjv4ps15dhy25nohj.png" alt="Image description" width="768" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C. Register for the Foreground Services in the AndroidManifest.xml File:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s0xI2Rgq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bxx229lhdpudz42isqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s0xI2Rgq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bxx229lhdpudz42isqd.png" alt="Image description" width="768" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;D. Go to the MainActivity class and add a variable:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FYefm0Ag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4d59wzskf9iudvdfdcgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FYefm0Ag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4d59wzskf9iudvdfdcgy.png" alt="Image description" width="768" height="91"&gt;&lt;/a&gt;&lt;br&gt;
E. Now, override onNewIntent and onStart function inside the MainActivity class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GMODwmvL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ssi3j837926ykmv1ixa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GMODwmvL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ssi3j837926ykmv1ixa.png" alt="Image description" width="768" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---YzcGT2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zvjvvkw735b0ebc3d80v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---YzcGT2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zvjvvkw735b0ebc3d80v.png" alt="Image description" width="768" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;F. MainActivty.java class is a vital component of an Android application through which activities are launched.&lt;/p&gt;

&lt;p&gt;Here is how it’s used to add foregroundEmitter function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KAjVBb83--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99b1gl1s8gpa5z0x9i85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KAjVBb83--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99b1gl1s8gpa5z0x9i85.png" alt="Image description" width="768" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Override onActivityResult&lt;/strong&gt;&lt;br&gt;
Next, you need to override the onActiveityResult function, which is inside the MainActivity class:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RlhugHly--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0z26m0m80qp4yzrljeh7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RlhugHly--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0z26m0m80qp4yzrljeh7.png" alt="Image description" width="768" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Inside the Color.xml file, set the notification color specified in AndroidManifest.xml file:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DZcKm23m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edubzdhbdv9zhq0r59ny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DZcKm23m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/edubzdhbdv9zhq0r59ny.png" alt="Image description" width="768" height="116"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;7. How to Start Foreground Service&lt;/strong&gt;&lt;br&gt;
A. Register a Headless Task (a way to run JavaScript tasks in the background) using  .js file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fO3w8KZk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m1em91hmg72squt81k8m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fO3w8KZk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m1em91hmg72squt81k8m.png" alt="Image description" width="768" height="102"&gt;&lt;/a&gt;&lt;br&gt;
B. Add a task as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c_QIU7Cd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ta75lah5ra2yevtr240.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c_QIU7Cd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1ta75lah5ra2yevtr240.png" alt="Image description" width="768" height="203"&gt;&lt;/a&gt;&lt;br&gt;
C. To start the Foreground Service class, use the function given below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---JhR5dVo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iy2t32wp3sxpda84hl24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---JhR5dVo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iy2t32wp3sxpda84hl24.png" alt="Image description" width="768" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. How to Stop The Foreground Service&lt;/strong&gt;&lt;br&gt;
A. To stop the Foreground Service, you’ll need to remove the task:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--omfXqSh4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2bfo5s8oot5mw722o2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--omfXqSh4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2bfo5s8oot5mw722o2k.png" alt="Image description" width="768" height="85"&gt;&lt;/a&gt;&lt;br&gt;
B. Now you can stop the Foreground Service:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ode11_PK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9pdtyi34zb2wqqia66ps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ode11_PK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9pdtyi34zb2wqqia66ps.png" alt="Image description" width="768" height="91"&gt;&lt;/a&gt;&lt;br&gt;
Ahoy! you made it. You’re now ready to run the application with screen sharing.&lt;/p&gt;

&lt;p&gt;To look at more examples &amp;amp; sample codes, visit our &lt;a href="https://github.com/EnableX/EnableX-Video-Chat-Application-Sample--with-SwiftUI"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Build something exciting!&lt;/p&gt;

</description>
      <category>react</category>
      <category>screenshare</category>
      <category>videostreaming</category>
      <category>api</category>
    </item>
    <item>
      <title>5 Things You Must Consider Before Choosing A Low Code Video Embed Platform</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Tue, 12 Jul 2022 06:45:04 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/5-things-you-must-consider-before-choosing-a-low-code-video-embed-platform-1ldc</link>
      <guid>https://dev.to/yashsrivastava176/5-things-you-must-consider-before-choosing-a-low-code-video-embed-platform-1ldc</guid>
      <description>&lt;p&gt;As businesses increasingly focus on digital transformation to stay up with changing business dynamics, they’re seeking solutions that help shorten the development cycle while also making them more agile. To survive and grow, they must develop apps far more quickly in order to respond to customer needs effectively and efficiently. Unfortunately, that has not been possible so far because of the constraints of coding, which is tedious and time-consuming. All this is changing, thanks to the disruption being caused by ‘low code platforms’ which minimize or eliminate the need to code in order to build solutions through Graphical User Interfaces(GUI)and other visual tools.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“The goal of a low-code or no-code visual builder platform is to make the app-building process easier by decreasing the amount of coding required”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The growth in low code solutions has surpassed beyond expectations. According to a Gartner report, 65 percent of all application development by 2024 will be done on low-code platforms. In response to the growing demand for video meeting solutions, several Communication Platform as a Service (CPaaS) providers have launched low-code video embeds. However, most video embed platforms currently available come with multiple constraints, such as the limitations around UI templates or the number of available collaboration features, which greatly restrict the usability of such embeds. Only a few CPaaS low code providers address the core concerns of developers like UI/UX coding, which has been a major challenge for developers in building fully functional real-time video communication solutions fast.&lt;/p&gt;

&lt;p&gt;The list of five things that you must consider while choosing the right &lt;a href="https://www.enablex.io/cpaas/video-embed/?utm_source=devto"&gt;Low-code Video Embed&lt;/a&gt; Platform for your business.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Granularity
&lt;/h2&gt;

&lt;p&gt;Most people opt for a low code solution for the simple reason that it should allow them to design &amp;amp; deliver a highly customized video calling app quickly. Therefore, make sure the low code solution you choose is granular enough. Unfortunately, most low code video embeds that are currently available don’t offer the freedom to customize easily. They demand a fair degree of coding knowledge if you want to customize beyond the pre-defined UIs given. Therefore, ask these questions to check the level of granularity of the platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the video embed offer the freedom to customize various UI aspects like video grid layout, fonts, colors, and text size without coding?&lt;/li&gt;
&lt;li&gt;Can I add my preferred features to create the desired user experience?&lt;/li&gt;
&lt;li&gt;(If the answer to these questions is not affirmative, you may want to explore further&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Advanced Features
&lt;/h2&gt;

&lt;p&gt;A low code video embed platform should not necessarily be low in features. Many CPaaS providers offer low code platforms like a lightweight version having only basic video conferencing features. Therefore, it’s highly recommended to make a list of the features required to meet your business needs. Ensure that the list contains advanced features, such as a breakout room, a waiting lobby, room lock, backdrop blurring, and live streaming to offer a cutting-edge solution. Besides, it’s advisable to check whether the platform supports PSTN integration feature that enables users to join the video meeting through a dial-in or landline number.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Robust Video Meeting Capabilities
&lt;/h2&gt;

&lt;p&gt;Never jump the gun after reading tempting marketing gimmicks; the realities are often hidden in the fine prints. Most CPaaS providers only offer basic low-code video conferencing apps that are typically limited to one on one video calling, or at most, a limited hosting capacity of 50 participants. There are only a few that offer the capacity to do large-scale events or webinars. You must certainly look for a partner that provides both of these capabilities while meeting your niche requirements. Your best bet is a platform that allows you to host at least 1,000 people while also providing essential associated features like lecture mode, raise hand, and many others, allowing it to act as a fully-functional and dependable video conferencing platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Device-Agnostic Experience
&lt;/h2&gt;

&lt;p&gt;Check whether the video embed platform allows building a platform/device-agnostic video meeting app. That’s of crucial importance as people may access video conferencing through web, desktop, mobile, iOS, and Android. Unfortunately, not all platforms are mobile compatible, which can be a hindrance and detract from the overall experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Ease of Use
&lt;/h2&gt;

&lt;p&gt;The goal of a low-code or no-code visual builder platform is to make the app-building process easier by decreasing the amount of coding required. Without the assistance of developers, even a non-technical individual, a.k.a. citizen developer, should be able to create a video calling app. This is because a well-built low-code platform, allows you to build custom apps with just a few clicks, drags and drops, letting you pick your preferred video layout, font, text size, and color along with the integration of other advanced features. Therefore, try out the platform before taking the final call and check how easily you can build a completely custom solution. The key characteristics determining the ease of use in the low code/no code video builders are ease of API integration, single-click deployment, and drag &amp;amp; drop functionality. The absence of any of these three characteristics raises a question mark over ease of use of the platform.&lt;/p&gt;

</description>
      <category>lowcode</category>
      <category>video</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The full-stack CPaaS- a critical choice</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Mon, 11 Jul 2022 09:54:51 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/the-full-stack-cpaas-a-critical-choice-4420</link>
      <guid>https://dev.to/yashsrivastava176/the-full-stack-cpaas-a-critical-choice-4420</guid>
      <description>&lt;p&gt;The millennial and digital-native customer of today no longer likes to be restricted to one or two mediums of communication and clearly votes for businesses that support omnichannel communication. Customer communication is evolving. Having only voice or email capabilities does not suffice as the customers today are inclined towards messaging, video and live chat (omnichannel communication). A recent survey by Walker indicates that by the time 2020 dawns on us, customer experience will overtake price as the top brand differentiator. For organisations that have adopted effective customer experience as a part of their strategy, embedding real-time communications (voice, video, messaging) into their applications is a great way of enhancing and ensuring seamless customer engagement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Role of CPaaS in the omnichannel sphere
&lt;/h2&gt;

&lt;p&gt;Imagine a customer on an e-commerce platform hitting a roadblock having to then exit the app to make a phone call or send an email to the customer service executive. This would result in built-up frustration and is also a waste of precious time. More so if it is a time-based app, as switching the app might result in having to input the information from scratch. An ideal situation would be to provide an in-app facility to the customer to be able to make a voice/video call to the agent.&lt;/p&gt;

&lt;p&gt;Abovesaid is the scenario where &lt;a href="https://www.enablex.io/cpaas/?utm_source=devto"&gt;CPaaS&lt;/a&gt; (Communication Platform as a Service) enables organisations to create an environment extremely hospitable for customers. CPaaS, which is a cloud-based communication platform, allows organisations/developers to integrate communication features like messaging, voice &amp;amp; video into their applications without having to invest in the back-end infrastructure. The CPaaS providers take care of everything including the servers, networking, storage et al. While the organisations only need to manage the applications. This becomes possible through the provision of open software development kits (SDKs) and open application programming interfaces (APIs) that developers can use to embed video, messaging and voice into their applications.&lt;/p&gt;

&lt;p&gt;No wonder why a lot of businesses now are deploying CPaaS to create collaborative and contextual communication and also to ensure differentiated user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full-Stack CPaaS Provider is the key
&lt;/h2&gt;

&lt;p&gt;A full-stack CPaaS provider is a platform that delivers a heavily integrated set of &lt;a href="https://www.enablex.io/cpaas/video-api/?utm_source=devto"&gt;programmable APIs&lt;/a&gt;. These APIs are closely knit together to enable the delivery of customised voice, video or messaging solutions into applications or websites. Having anything less should not call itself a full-stack CPaaS provider. It is therefore critical that organisations work with a CPaaS Provider that has a broad range of communication functionalities.&lt;/p&gt;

&lt;p&gt;Having said that, the soaring demand for CPaaS has resulted in many voice/messaging aggregators to dive-in as CPaaS vendors. However, they often do not exhibit the attributes of a true CPaaS provider that aims to provide omnichannel communications to organisations by offering a comprehensive set of communication platforms (voice, video and messaging).&lt;/p&gt;

&lt;p&gt;Here are some reasons why the latter might not match up to your expectations when compared with a true full-stack provider:&lt;/p&gt;

&lt;h3&gt;
  
  
  - Need for an all-encompassing solution
&lt;/h3&gt;

&lt;p&gt;It is possible an organisation might want to start off with one of the three categories – voice, video and messaging. However, once the organisation identifies the advantages of real-time communication, it might come up with a requirement for incorporating the other two as well. In which case, a full-stack provider is your best bet. For e.g. A customer contact centre choosing only voice to begin with might see value in a video chat for a more interactive communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  - Need to integrate new components
&lt;/h3&gt;

&lt;p&gt;Vendors that are not full-stack providers might not be able to offer seamless integration of all components. For example, if you opt for only messaging first and later decide to embed voice capabilities as well, a full-stack CPaaS provider will provide you with an effortless integration of platforms whereas the former might struggle since they have not designed the products themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  - An increase in overhead
&lt;/h3&gt;

&lt;p&gt;There might even arise a scenario where the integration of these disparate platforms will become the organisation’s responsibility that might not possess the necessary capability. Moreover, it defeats the purpose of hiring a vendor if the organisation is required to integrate services into existing platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  - Lack of Expertise
&lt;/h3&gt;

&lt;p&gt;The vendor’s lack of integration/trouble-shooting expertise might result in errors and might disrupt the communication cycle thereby increasing customer discontent. This is because you might be trying to synchronise components that were never meant to fit together and were not designed in collaboration with each other.&lt;/p&gt;

&lt;p&gt;A full-stack service provider will take care of all the aforementioned requirements by creating all its components in complete harmony with each other. Hence, even if you start with just one of them, integrating the rest at a later stage is seamless. Also, you pay for what you use and never for the whole package unless you opt for the latter. With its open SDKs and APIs, it gives the freedom to the developers to design the applications as per requirement.&lt;/p&gt;

&lt;p&gt;While on the lookout for a CPaaS vendor, you may also want to consider the role of intelligence in today’s communication. Voice, video, messaging being the fundamentals of communications, some CPaaS providers are now moving towards a broad range of communication APIs that support AI/IOT/VR capabilities too. Choose one that can provide your organisation with a distinct edge over the competitors.&lt;/p&gt;

&lt;p&gt;EnableX is one of the few CPaaS providers offering full-stack CPaaS platform in Asia and beyond with voice, video, messaging and advanced features such as recording, AR and translation. With EnableX’s robust APIs, organisations can begin with one communication functionality (eg Voice chat) and easily add messaging and video chat as they enhance their applications and workflow to be omnichannel. This gives any organisation the trust and confidence that they will not have to select a second or third platform provider as their needs expand or change. Experience EnableX &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cpaas</category>
      <category>javascript</category>
      <category>programming</category>
      <category>webrtc</category>
    </item>
    <item>
      <title>Recording WebRTC-Enabled Sessions: Server-side or Client-side?</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Mon, 11 Jul 2022 09:43:02 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/recording-webrtc-enabled-sessions-server-side-or-client-side-56ij</link>
      <guid>https://dev.to/yashsrivastava176/recording-webrtc-enabled-sessions-server-side-or-client-side-56ij</guid>
      <description>&lt;p&gt;WebRTC is an open-source project which makes it possible to add real-time communication features (e.g. live video calls) directly into browser applications and websites. Often used by different industries such as banking &amp;amp; finance, healthcare, and education, it’s a set of &lt;a href="https://www.enablex.io/cpaas/video-api/?utm_source=devto"&gt;JavaScript APIs&lt;/a&gt; for easy integration without having to deal with the inherent complexities of requiring downloads or plugins to use them. However, there are a few capabilities that are not natively available in the WebRTC stack such as recording. To embed the recording function, many developers would typically use one of the following methods depending on the technology stack used for hosting the WebRTC application and the skillsets of the developers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full-stack developers who are building applications using the native browser API tend to wrap one of the many browser-side screen recording plugins in their application. This works as a prototyping solution. At best, it is a way to circumvent the problem rather than providing a clean and robust solution that is tightly integrated into the end-user application.&lt;/li&gt;
&lt;li&gt;Mobile application developers building native mobile applications on top of the &lt;a href="https://www.enablex.io/insights/the-most-comprehensive-guide-on-webrtc/?utm_source=devto"&gt;WebRTC&lt;/a&gt; stack have few choices to record the session. They would often run another recording application in the background to record the session. These quick fixes and workaround solutions are prone to cyber hacks and numerous usability issues.&lt;/li&gt;
&lt;li&gt;Developers could also leverage WebRTC or &lt;a href="https://www.enablex.io/cpaas/?utm_source=devto"&gt;CPaaS&lt;/a&gt; providers. However, there are not many such service providers that offer APIs that help in recording. For those who do, the features and architecture for recording video sessions differ. In general, there are two broad mechanisms – server-side recording and client-side recording. Let’s look at them in more detail &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Server-side or Client-side recording
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Server-side recording
&lt;/h3&gt;

&lt;p&gt;For server-side recording, the media is routed via a media server instead of directly between the browsers. In this case, the WebRTC session is terminated over the severs on both ends with the media routed to the receiving end. The decoded media is then simultaneously sent to post-processing and recording. Service providers with server-side recording APIs allow the developers to do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.enablex.io/cpaas/features/?utm_source=devto"&gt;Recording video/audio stream&lt;/a&gt; for each participant in the WebRTC session. These sessions could either be one-to-one or multi-party.&lt;/li&gt;
&lt;li&gt;Mixing and transcoding all participants’ streams into a single composite video file.&lt;/li&gt;
&lt;li&gt;Providing lay-outing API to manage the recording content layout.&lt;/li&gt;
&lt;li&gt;Additionally, there can be additional features such as integrating chat with recording, &lt;a href="https://www.enablex.io/insights/video-api-and-sdk-recording-and-video-watermarking/?utm_source=devto"&gt;watermarking&lt;/a&gt;, etc. which are often required for recreating the session as it happened and for copyrighting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Client-side recording
&lt;/h3&gt;

&lt;p&gt;For client-side recording, videos are recorded locally, and then processed before uploading to the servers. In this case, an additional client endpoint is needed to connect to the WebRTC session. This end-point is expected to install a software binary containing the recording software image. The software could either be offered as a docker image or a simple ISO. One distinctive disadvantage is that you can’t control the client’s endpoint and its performance greatly varies according to the endpoint specifications. Large scale sessions require a high-end machine with a fast disk I/O access rate and a fast CPU.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what’s best?
&lt;/h2&gt;

&lt;p&gt;When deciding whether to go for application-level recording or the recording capability offered by a WebRTC platform provider (i.e. Server-side or client-side recording), several factors need to be considered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supporting Endpoints
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Browsers: You need to find the relevant screen recording plugins suitable for the specific browser. If you need it to be on all browsers, which happens in most cases, you will end up having multiple plugins for each of the browsers.&lt;/li&gt;
&lt;li&gt;Mobile App: If you are developing native mobile or hybrid applications (i.e. REACT native etc) then it is recommended to go for a platform provider&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Size of the Session
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;- Multiparty Sessions&lt;/strong&gt;&lt;br&gt;
In a multiparty session, the probability of users not having enough bandwidth to receive all of the participants’ video streams, is high.  In realistic cases, some of the participants’ video quality will be below.  As a result, video recording quality, if done solely at the client end will also have lower quality. For such cases, it is recommended to go for a service provider offering server-side recording&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- One-to-one Sessions&lt;/strong&gt;&lt;br&gt;
Since bandwidth may not be a challenge here, you can choose client-side or server-side recording depending on whether you prefer installing a recording server at your end and dealing with all recording management issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Concurrent Sessions&lt;/strong&gt;&lt;br&gt;
For multiple concurrent sessions, load balancing is required. In such cases, it is recommended to go for server-side recording to avoid dealing with the complexity of load balancing and recording management in your application layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session Recording is a “Must-Have” Requirement
&lt;/h3&gt;

&lt;p&gt;If it is required that the session must be recorded for legal or business process rules, it is recommended to go for server-side recording as it is least prone to errors.&lt;/p&gt;

&lt;p&gt;In summary, you should carefully weigh all the above options before settling down on the final solution when adding recording capability to your WebRTC-enabled application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;Try our APIs&lt;/a&gt; Now!&lt;/p&gt;

</description>
      <category>webrtc</category>
      <category>recording</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Co-browsing: Redefine Your Contact Centre Operations</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Fri, 08 Jul 2022 11:57:58 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/co-browsing-redefine-your-contact-centre-operations-idl</link>
      <guid>https://dev.to/yashsrivastava176/co-browsing-redefine-your-contact-centre-operations-idl</guid>
      <description>&lt;p&gt;Customer is the king’ is the proverbial cliché in marketing, yet it stands the test of time even in the digital era when users can desert your site even at the slightest inconvenience. When you have a frustrated customer stuck in front of the screen, their issue must be resolved immediately. That’s where co-browsing can make all the difference by offering initial handholding and guidance to help assuage irritated customers.&lt;/p&gt;

&lt;p&gt;The timely help can dramatically improve customer satisfaction. With co-browsing, the customer-satisfaction rating increased to 78% from 47% for web self-service, says an Abardeen report.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Co-browsing?
&lt;/h2&gt;

&lt;p&gt;As the name implies, co-browsing solutions allow participants joining a &lt;a href="https://www.enablex.io/cpaas/video-api/?utm_source=devto"&gt;video call&lt;/a&gt; to browse together with a website or webpage with a remote participant. That way both participants can see what the other person is doing on the screen. Since a co-browsing session is simultaneous and synchronous, it can have useful industry applications, especially in the contact centre and space domains. It lets agents work collaboratively, side by side with the customer, to troubleshoot and fix their problems on the spot.&lt;/p&gt;

&lt;p&gt;However, between co-browsing and screen sharing, customer care representatives prefer co-browsing because the experience cannot be replicated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Co-Browsing Solutions Matter In The Online-First World
&lt;/h2&gt;

&lt;p&gt;In this era driven by virtual connect, co-browsing features in &lt;a href="https://www.enablex.io/cpaas/video-api/?utm_source=devto"&gt;video calling&lt;/a&gt; can be a game-changer. Here are the following five co-browsing advantages that can transform customer contact centre operations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Onboarding New Customers&lt;/strong&gt;&lt;br&gt;
The importance of onboarding customers can never be overemphasised as it’s the first real contact with your brand. It can make the entire onboarding process hassle-free while saving a lot of time that can be usually wasted in miscommunication and confusion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Augmenting Conversion And Sales&lt;/strong&gt;&lt;br&gt;
Your customer executives or sales advisors can engage with customers at the right moment to navigate them effectively during a complex transaction process that would have otherwise resulted in cart- abandonment, resulting in fewer drop-offs. Thus, both conversion and sales improve.&lt;/p&gt;

&lt;p&gt;With a powerful tool like co-browsing by their side, sales reps can give a feature demo depending on the customers’ needs, which can be much more persuasive than a live chat or a phone call.&lt;/p&gt;

&lt;p&gt;An Aberdeen Group report says that collaborative browsing solutions help increase 10% year-on-year sales growth, compared to the 6.2% growth for firms not using this tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Technical Support&lt;/strong&gt;&lt;br&gt;
Not only a powerful sales aid but it also offers the best way to troubleshoot issues, especially when a customer is not tech-savvy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Personalising Customer Experience&lt;/strong&gt;&lt;br&gt;
Traditional tools like chatbots and voice calling are helpful, but they’re no substitute for the human touch. With new-age tools like co-browsing, the lack of personal touch can be mitigated to a great extent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Improving First-Call Resolution (FCR) Rate&lt;/strong&gt;&lt;br&gt;
Customer demands have changed with changing times. They’re not ready to wait indefinitely to resolve their issues but expect to be addressed in the first call only. That’s why First Call Resolution Rate is a vital call centre metric. Enterprises can reduce the friction between customers and brands by capitalising on co-browsing, resulting in increased FCR and customer satisfaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Co-browsing: 4 Effective Use Cases For Different Industries
&lt;/h3&gt;

&lt;p&gt;Here’s how it can help in four different industries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sales:&lt;/strong&gt; Product demo, cross-selling or up-selling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Financial Services (Banking and Insurance):&lt;/strong&gt; processing of loan requests and servicing, on-boarding new accounts, filling online forms, application submission and processing, verification and processing coverage claims&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecommerce:&lt;/strong&gt; Payment cart processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; Technical and Remote Support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Co-browsing: Re-defining Customer Experience With EnableX Low Code Video Embed
&lt;/h3&gt;

&lt;p&gt;With EnableX, developers can add the co-browsing feature quickly to their applications – both web and mobile. Using our visual builder that helps a developer generate a single line iFrame code, developers can easily add such collaboration features to their Android and iOS apps as well as websites.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does Co-browsing Work?
&lt;/h2&gt;

&lt;p&gt;A certain level of preparation is required to enable the co-browsing feature on the website or web pages. You need to make your site or webpage ready for co-browsing before starting the session. It can be easily done by inviting remote participants to join an in-app co-browsing session by sending them a unique URL with Query String Parameters.&lt;/p&gt;

&lt;p&gt;Once a remote participant joins by clicking on the link, both users are ready for a fruitful co-browsing session. Also, you are not required to install any third-party software for this purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  To Conclude
&lt;/h2&gt;

&lt;p&gt;Co-browsing, of course, is not a cure-all for all problems plaguing contact centre operations, and nor should it be viewed as such. However, it can undoubtedly empower customer support agents to address pressing customers’ concerns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;p&gt;To know more about how you can set up a co-browsing session, click &lt;a href="https://www.enablex.io/developer/video/low-code-video-embed/video-embed-features/co-browsing-with-video-embed/?utm_source=devto"&gt;Co-Browsing with Video Embed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Experience the power of co-browsing with EnableX Video Embed: Start your &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;free trial&lt;/a&gt; now.&lt;/p&gt;

</description>
      <category>cobrowsing</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>videocall</category>
    </item>
    <item>
      <title>WebRTC video performance compared to Zoom</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Fri, 08 Jul 2022 11:00:43 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/webrtc-video-performance-compared-to-zoom-5e7a</link>
      <guid>https://dev.to/yashsrivastava176/webrtc-video-performance-compared-to-zoom-5e7a</guid>
      <description>&lt;p&gt;Research is clear that video calls make for a more efficient workforce, particularly those that work remotely. According to Gartner, by 2024, only 25% of meetings will take place in person, down from 60% today&lt;/p&gt;

&lt;p&gt;However, using video calls today can be frustrating, with black frames, choppy audio and frequent network disconnects. More often than not, we end up spending precious time trying to switch from video to audio, switch from mobile to WiFi, or moving closer to the router.&lt;/p&gt;

&lt;p&gt;To find out which meeting solution works best under poor network conditions, we performed benchmark tests, pitting the leaders of &lt;a href="https://www.enablex.io/cpaas/video-api/?utm_source=devto"&gt;WebRTC API browser-based video calls&lt;/a&gt; against the Zoom desktop app, Gartner’s 2020 Magic Quadrant leader for Meeting Solutions.&lt;/p&gt;

&lt;p&gt;Also read: &lt;a href="https://www.enablex.io/insights/the-most-comprehensive-guide-on-webrtc/"&gt;The Most Comprehensive Guide On WebRTC&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Factors Critical To Video Quality : WebRTC Vs Zoom
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Packet loss
&lt;/h3&gt;

&lt;p&gt;To understand the factors affecting the quality of a video call, we need to know that speed test is not the same as packet loss. In layman’s terms, packet loss represents gaps in data transmitted over the internet.&lt;/p&gt;

&lt;p&gt;WebRTC video stream uses the User Datagram Protocol network stream. When packets go missing on the Internet, the most important video frame, the I-frame cannot be reconstructed by the receiver. Missing video frames result in frozen or jerky video call experience.&lt;/p&gt;

&lt;p&gt;Unlike streaming a video from Netflix, video meetings are broadcast in real-time. When watching Netflix, missing packets are retransmitted until one receives a full buffer of error free video frames before streaming starts. This latency will make real-time video meetings impossible. In sum, video solutions will face the issue of packet loss and the ability to resume back to full video resolution quickly is critical.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Bandwidth
&lt;/h3&gt;

&lt;p&gt;The second factor is the bandwidth. Upload bandwidth is required to publish your video stream and download bandwidth is needed to subscribe to another participant’s video stream. The more participants you have in a video conference, the greater the download bandwidth you need.&lt;/p&gt;

&lt;p&gt;When upload bandwidth is insufficient, most video conferencing apps will mute the publishing video of the affected participants, leaving only audio capabilities, until upload bandwidth is fully restored.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. CPU availability
&lt;/h3&gt;

&lt;p&gt;WebRTC requires your computer’s CPU to transcode video. The higher the video’s resolution, the greater the CPU power required. The more participants you have in a video call, the more CPU power is needed to decode the videos for all participants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark Network Congestion Test: WebRTC Vs Zoom
&lt;/h2&gt;

&lt;p&gt;We conducted the basic 1-1 video call with leading WebRTC video chat API providers and then also with Zoom desktop App&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2pAmVAw_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpbzaigwqpvdbjo87zjk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2pAmVAw_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpbzaigwqpvdbjo87zjk.PNG" alt="Image description" width="880" height="479"&gt;&lt;/a&gt;&lt;br&gt;
The publishing bandwidth for one of the WebRTC participants is throttled at different bitrates ranging from 100kbps, 200kbps, 250kbps and 300kbps.&lt;/p&gt;

&lt;p&gt;We then measured the time (T1) taken for the video to resume streaming normally, at more than 1 frame per second (&amp;gt;1fps). The bitrate and resolution may still be ramping up after this time until full adaptation. We also measured the time (T2) taken for full adaption or full resolution after bandwidth congestion is removed.&lt;/p&gt;

&lt;p&gt;To measure the duration for which the video is muted or frozen, we used a camera video source with a real-time stop-watch counter accurate to one second. This methodology will clearly identify precisely when video stream froze (0 fps) and when it resumed to partial adaptation (greater than 1fps).&lt;/p&gt;

&lt;p&gt;To measure when the video recovered to (full adaption) full resolution and full framerate we used chrome://WebRTC-internals for the browser base 1-1 video call and the Zoom app video statistics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aFCOLWGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5kqjqe5hl4pkczbvyb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aFCOLWGJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5kqjqe5hl4pkczbvyb7.png" alt="Image description" width="617" height="343"&gt;&lt;/a&gt;&lt;br&gt;
The raw results are tabularised for two different WebRTC CPaaS providers and the Zoom app below.&lt;/p&gt;

&lt;p&gt;During the period when network bandwidth is throttled, a 0fps means that video freezing was evident during the test duration. A range 10fps-25fps means the framerate is inconsistent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DS2eRwz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqasc3nzuqbuq5i2gqfw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DS2eRwz_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqasc3nzuqbuq5i2gqfw.PNG" alt="Image description" width="880" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Observations : WebRTC Vs Zoom
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The Zoom App froze the publishing video completely when the network bandwidth dropped below 300kbps while WebRTC A continued to publish at partial video adaptation at 200kbps and 250kbps bandwidths.&lt;/li&gt;
&lt;li&gt;Both Zoom app and WebRTC froze the video when throttled below 100kbps. However, the initial recovery time by Zoom is shorter, taking less than 10 seconds compared, to WebRTC needing over 40 seconds. The recovery to full adaptation for Zoom is longer (needing 80 seconds), compared to the 41 seconds that WebRTC A needed.&lt;/li&gt;
&lt;li&gt;WebRTC delivers acceptable smooth video quality at 300kbps bandwidth and even below that, whereas the Zoom app struggles to deliver a video frame every few seconds at 300kbps and the video froze occasionally during the throttled period.&lt;/li&gt;
&lt;li&gt;The Zoom app excelled at providing acceptable video quality (&amp;gt;1fps) almost immediately after the bandwidth is unthrottled.&lt;/li&gt;
&lt;li&gt;All the tests conducted show a high-quality freeze frame when partial video adaption is not available. We did not observe any black frames.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In summary the WebRTC video experience above 100kbps is considerably better than the Zoom App. Zoom shows a better video recovery time for low bandwidth condition (&amp;lt;100kbps).&lt;/p&gt;

&lt;p&gt;Beyond video quality, the strength of WebRTC is the lightweight SDK toolkits provided by numerous CPaaS providers to easily integrate existing application for video and voice calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimer : WebRTC Vs Zoom
&lt;/h2&gt;

&lt;p&gt;This is not meant to be an exhaustive comparison of either Zoom’s media stack nor WebRTC. It is a simple test to evaluate their performance under poor network conditions. Poor network conditions for WebRTC may be due to UDP packet loss and low CPU availability.&lt;/p&gt;

&lt;p&gt;We did not perform an empirical evaluation of the audio quality but audio was present for all providers during the period when the bandwidth congested.&lt;/p&gt;

&lt;p&gt;To limit the upload bandwidth for 30 seconds, we used traffic control (tc) utility that is available from the operating system.&lt;/p&gt;

&lt;p&gt;The tests are all conducted with the same two virtual machines running ubuntu 18.04 with chrome browsers version 78 and above for  Zoom &amp;amp; WebRTC app version 3.5.352596.0119.&lt;/p&gt;

&lt;p&gt;We have not taken into consideration the location of the WebRTC media servers in the above tests. For completeness and comparison between WebRTC providers, we measured the RTT of the media server to the local test machines as approximately 70ms and 270ms for WebRTC provider A and B respectively. This may account for the slightly poorer performance of WebRTC B compared to WebRTC A.&lt;/p&gt;

&lt;p&gt;Source : (1) 2019 Magic Quadrant for Meeting Solutions by Gartner.&lt;/p&gt;

&lt;p&gt;To try it out, simply &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;sign up here for free&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webrtc</category>
      <category>zoom</category>
      <category>video</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Learn How to Use EnableX Visual Builder To Generate Video Call iFrame Code</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Thu, 07 Jul 2022 10:16:01 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/learn-how-to-use-enablex-visual-builder-to-generate-video-call-iframe-code-2om4</link>
      <guid>https://dev.to/yashsrivastava176/learn-how-to-use-enablex-visual-builder-to-generate-video-call-iframe-code-2om4</guid>
      <description>&lt;p&gt;EnableX Visual Builder offers the easiest way to quickly add video calling to your website using an iFrame code. Once you select the required features, text size, font, colour that you want to see in your video calling, you receive a single line of iFrame code that you need to embed on website and mobile app.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Step-by-Step Guide
&lt;/h2&gt;

&lt;p&gt;For the sake of simplicity, this tutorial will walk you through the process on how to generate a low code iFrame embed using the EnableX Visual Builder. &lt;/p&gt;

&lt;p&gt;Here is how you can do it step by step: &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create Project
&lt;/h3&gt;

&lt;p&gt;A. &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;Sign Up&lt;/a&gt; to create an account on the EnableX Portal. Once you are in the portal dashboard, press Add Project button. You are directed to your Project Dashboard where you can press the Create Project button to start creating a video call project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XUT2nt86--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k767duojkp5rrbi8zma2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XUT2nt86--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k767duojkp5rrbi8zma2.png" alt="Image description" width="768" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B.Next, fill in the mandatory project details like &lt;strong&gt;Project Name, Application&lt;/strong&gt; and &lt;strong&gt;Description **fields.  Now, enable Video provided under **Capabilities&lt;/strong&gt;, and Press the &lt;strong&gt;Create Project&lt;/strong&gt; button.   &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Fields marked with (*) are mandatory.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YfRbOHth--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pb8vlqpfrzxia4bxfprj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YfRbOHth--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pb8vlqpfrzxia4bxfprj.png" alt="Image description" width="768" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C. It throws a pop-up informing APP KEY and App ID are ready. Now, press the &lt;strong&gt;Get Started&lt;/strong&gt; button on the Pop-Up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gfh6w5gm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/56zumy1yjeko0x5h4103.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gfh6w5gm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/56zumy1yjeko0x5h4103.jpg" alt="Image description" width="768" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Select Pre-built Template
&lt;/h3&gt;

&lt;p&gt;A. Choose the ‘I Prefer Less Code’ option and click the &lt;strong&gt;Start Building&lt;/strong&gt; button.  It heads you to Low-Code Video Embed page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IPFAWbSp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qckb13vemykjzdgjrik.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IPFAWbSp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qckb13vemykjzdgjrik.jpg" alt="Image description" width="768" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;B. Now, choose the relevant template per your use case requirement. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---07PQj72--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8wqgza84ikottw583jm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---07PQj72--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8wqgza84ikottw583jm.png" alt="Image description" width="768" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, if you select the Virtual Classroom template, you are directed on the page where you can review the Virtual Classroom UI template and features. You can also add or delete any feature if you want using this Visual Builder tool.    &lt;/p&gt;

&lt;p&gt;Now, click the **Next **button provided at the bottom right part. It directs you to Setup Sub-domain page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DQ7WnjT8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqvqnlxzqmpxd5emb82m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DQ7WnjT8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqvqnlxzqmpxd5emb82m.png" alt="Image description" width="768" height="450"&gt;&lt;/a&gt;&lt;br&gt;
C. Set subdomain and whitelisted domains&lt;/p&gt;

&lt;p&gt;Now, you need to specify your subdomain, which will be hosted on the EnableX domain. You can select a sub-domain in the &lt;strong&gt;Set Your Sub–Domain&lt;/strong&gt; field. Once, you select the preferred sub-domain, click the **Next **button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_7-LfxAI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nlnp6fw9upyu52c6ecwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_7-LfxAI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nlnp6fw9upyu52c6ecwm.png" alt="Image description" width="768" height="450"&gt;&lt;/a&gt;&lt;br&gt;
_* After selecting the sub-domain, press the Check Availability button. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whitelisted domains are list of allowed domains that you trust. You can do this later as well _&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This directs you to the &lt;strong&gt;Edit Template&lt;/strong&gt; page where you can customise it at the granular level of UI, features and capabilities. It has five tabs to perform different functions: &lt;strong&gt;On-screen Layout&lt;/strong&gt;, &lt;strong&gt;Toolbar Display Settings&lt;/strong&gt;, &lt;strong&gt;Feature Selection, Moderator Settings, Accessories&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Customise Your UI with Visual Builder
&lt;/h3&gt;

&lt;p&gt;These UI templates are preloaded with relevant features based on the use case, but you can easily customise them further. Else, you can skip this step.&lt;/p&gt;

&lt;p&gt;A. Go to the On-Screen Layout tab, select your preferred room layout, such as Room Size, Participant’s &amp;amp; Moderator’s View.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ag21OIJn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5f6izhlmcid87b71e7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ag21OIJn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5f6izhlmcid87b71e7f.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At EnableX, we can provide up to 100 participants’ room size. However, the Visual Builder gives you the option to choose up to 50 participants. If you need to extend your room size, please &lt;a href="https://www.enablex.io/contact-us/?utm_source=devto"&gt;contact our&lt;/a&gt; sales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;B. Now, come to the Toolbar Display Settings tab and select the features you want to show on your toolbar. You can choose Meeting Room Name, Duration, Participants’ Number, Full-Screen options. It also gives you the option to keep the toolbar either fixed or movable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uFuAcgmr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qowvcciinf0x11tzh2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uFuAcgmr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qowvcciinf0x11tzh2i.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;br&gt;
C. Next, come to the &lt;strong&gt;Feature Selection&lt;/strong&gt; tab, which provides you with the option to choose basic, collaborative and other advanced features. You can select collaborative features, such as recording, screen share, chat or whiteboard that you need in your video calling.&lt;/p&gt;

&lt;p&gt;In addition, you also get many premium features, such as Co-browsing, Live Stream, Virtual Background. You can also select a preferred Video Grid layout like Gallery or Leader view or both.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_BCdke-Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ufgiz81khtkjh4odvc8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_BCdke-Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ufgiz81khtkjh4odvc8y.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;* Only up to five features can be displayed on the toolbar. You have the option to decide which five features you want to display on the toolbar and which one will be hidden under (…).&lt;/p&gt;

&lt;p&gt;D. Head to the &lt;strong&gt;Moderator Settings&lt;/strong&gt; tab, you get plenty of options for moderator controls. It has all the basic features like such as Floor Access Control, Lobby, Breakout Room and Room Lock features. Based on your requirement, you can enable/disable the Administrator setting as shown in the picture given below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GXgh5H_Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yfv3jhwjn5ccmn7zcn09.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GXgh5H_Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yfv3jhwjn5ccmn7zcn09.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;br&gt;
If you don’t want to display Exit button, disable the &lt;strong&gt;Display Exit Button&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;**&lt;em&gt;Exit/Sign Out URL:&lt;/em&gt;&lt;/em&gt;* State the URL prefixed by “https://” that you want the participants to receive after they Sign out/Exit or disconnect from the session.&lt;br&gt;
*Basic Terminologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Floor Access Control:&lt;/strong&gt; Temporary permission to be a part of the video meeting. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lobby:&lt;/strong&gt; Allows you to let participants wait. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breakout Room:&lt;/strong&gt; Create a room of different groups where participants can discuss. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Room lock:&lt;/strong&gt; Keep uninvited participants away from the meeting room.
E.  Once you’re done with the &lt;strong&gt;Moderators Settings&lt;/strong&gt;, move to the &lt;strong&gt;Accessories&lt;/strong&gt; tab, you reach now closer to being done.  This section is all about aesthetics, look and feel.  Here, you can select the preferred Design, Text and Filters. You can Play with different features and see how they look.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zD9jHlgu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eln03upzhgfvp2isc3gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zD9jHlgu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eln03upzhgfvp2isc3gg.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Design&lt;/strong&gt; tab allows choosing colour, toolbar icons. Play with different options.  See the image below. You can customise the background, Toolbar and can even change the Exit Button colour. Toolbar Icons allows you to select Line Icon or Solid Icon. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l66RUxb6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czhzlx5lfdx3q1qskx8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l66RUxb6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czhzlx5lfdx3q1qskx8x.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;br&gt;
Whereas, on the **Text **tab, you can select the font size of chat text, top bar display and Meeting Room name text size.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KPICCqmQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwcgu9we2jyyzpp38356.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KPICCqmQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwcgu9we2jyyzpp38356.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;br&gt;
Now, you can go to the &lt;strong&gt;Filters&lt;/strong&gt; tab and enable the Background Blurring option if you want to allow for blurring your video background.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--atDFL206--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sk387sf75uttb914z5en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--atDFL206--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sk387sf75uttb914z5en.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Get Code and Create Rooms
&lt;/h3&gt;

&lt;p&gt;You are directed to the Low-Code Video Embed page. Now, under the Get Your Code Snippets, you have three options:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UK5nIgvG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/trl3hnbe6r4mf8si3g9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UK5nIgvG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/trl3hnbe6r4mf8si3g9k.png" alt="Image description" width="768" height="429"&gt;&lt;/a&gt;&lt;br&gt;
A. The first option is ‘I am good with 1 Meeting Room, Give me single virtual room code”. This is suitable if your requirement is limited to just one meeting room and you are just testing for now.&lt;/p&gt;

&lt;p&gt;B. If you are satisfied with the video call, you can start creating more permanent rooms using our APIs. To know more about creating more permanent room, read this blog: &lt;a href="https://www.enablex.io/developer/video/low-code-video-embed/create-meeting-room-using-rest-api/"&gt;https://www.enablex.io/developer/video/low-code-video-embed/create-meeting-room-using-rest-api/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C. In case you know how many concurrent rooms you need to support your use case, you can generate iFrame code for these rooms without coding. Select the third option ‘I would need a fixed number of meeting rooms. Please provide me with all the codes’.Here is how you can do this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you select this option, it opens a new box below where you can enter required inputs. &lt;/li&gt;
&lt;li&gt;Press the &lt;strong&gt;Get Code&lt;/strong&gt; button. A dropdown named ‘Get Your Code Snippets” opens. Next, enter different fields with relevant inputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WW0U9h1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpgpseavjct6573iv9cc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WW0U9h1V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpgpseavjct6573iv9cc.png" alt="Image description" width="768" height="468"&gt;&lt;/a&gt;&lt;br&gt;
Congrats! Your iFrame code is generated. Copy the iFrame codes to the HTML block of your website. You can now copy individual Rooms code snippets. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V9uel2G---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mi8d31dwphfru1pyxbch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V9uel2G---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mi8d31dwphfru1pyxbch.png" alt="Image description" width="768" height="326"&gt;&lt;/a&gt;&lt;br&gt;
Or, you can also copy all Meeting Rooms codes by clicking on the &lt;strong&gt;Copy All&lt;/strong&gt; button provided at the top right part of the page.   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i-RszI83--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t61a8dyggxcevfshbwo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i-RszI83--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t61a8dyggxcevfshbwo9.png" alt="Image description" width="768" height="494"&gt;&lt;/a&gt;&lt;br&gt;
Now, your project is setup, and you can go live. However, you can still configure some more advanced features if you want. It’s purely optional.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Configure Add-on Features (Optional)
&lt;/h3&gt;

&lt;p&gt;A. Go to Manage Video Embed and click the Configure button. Use this section to configure features, automate app workflow and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w5emYM_I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jgxeyxpvuimiwukkuptg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w5emYM_I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jgxeyxpvuimiwukkuptg.png" alt="Image description" width="768" height="200"&gt;&lt;/a&gt;&lt;br&gt;
B. Now, you reach the Low Code Video Embed Page. It gives you eight advanced options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ICl5hzYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/085l3vqhodn5vq7ei2pb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ICl5hzYv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/085l3vqhodn5vq7ei2pb.png" alt="Image description" width="768" height="433"&gt;&lt;/a&gt;&lt;br&gt;
Here it is to be noted that this is purely optional and required only if you are looking for advanced features and capabilities.  &lt;/p&gt;

&lt;p&gt;You can know more about these different options by separately clicking on each tab.  &lt;/p&gt;

&lt;p&gt;For example, when you click on the Features tab, you get three advanced features: Live Streaming URL, Virtual Backgrounds, Co-Browsing URLs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YfnWq3G1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pj406loslbouhvywx18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YfnWq3G1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pj406loslbouhvywx18.png" alt="Image description" width="768" height="329"&gt;&lt;/a&gt;&lt;br&gt;
C. To know more about each of them, just click the dropdown icon. You can upload an image or image URL as Virtual Background and click the **Save **button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kf3-84sz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/meqqbdrbq6l01fgvn1fb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kf3-84sz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/meqqbdrbq6l01fgvn1fb.png" alt="Image description" width="768" height="494"&gt;&lt;/a&gt;&lt;br&gt;
Hey, by now you must have realised that it’s super easy to build a meeting app—all it needs is few clicks, drags &amp;amp; drops, and you are done.   &lt;/p&gt;

&lt;p&gt;You are not required to code at any stage, it’s so easy. Even if you are an absolute beginner, you can learn how to generate an iFrame code using EnableX Visual Builder. &lt;/p&gt;

&lt;p&gt;The advantage of &lt;a href="https://www.enablex.io/cpaas/video-embed/?utm_source=devto"&gt;EnableX Visual Builder&lt;/a&gt; is it doesn’t require the use of a third-party plugin.&lt;/p&gt;

&lt;p&gt;If you have any questions, feel free to leave them in the comments below. We’ll be happy to respond. &lt;/p&gt;

&lt;p&gt;Build Something Exciting! &lt;/p&gt;

</description>
      <category>iframe</category>
      <category>visualbuilder</category>
      <category>videocall</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Creating a Production-Ready WebRTC App for Video Calls: 5 Considerations for Developers</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Thu, 07 Jul 2022 07:33:12 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/creating-a-production-ready-webrtc-app-for-video-calls-5-considerations-for-developers-2946</link>
      <guid>https://dev.to/yashsrivastava176/creating-a-production-ready-webrtc-app-for-video-calls-5-considerations-for-developers-2946</guid>
      <description>&lt;p&gt;Live video calling is revolutionizing the way we interact with people across the globe. But video calls aren’t just about live video. The ability to integrate communication into the workflow to achieve specific goals — to make it contextual to daily work — is crucial, and &lt;a href="https://www.enablex.io/insights/the-most-comprehensive-guide-on-webrtc/?utm_source=devto"&gt;WebRTC&lt;/a&gt; is one proven platform to help achieve those goals.&lt;/p&gt;

&lt;p&gt;Unlike Skype, which is a stand-alone communication platform, WebRTC is an open-source technology, and it allows for adding real-time communication features such as &lt;a href="https://www.enablex.io/cpaas/video-api/?utm_source=devto"&gt;live video calling&lt;/a&gt; directly into browser applications and websites. It is a set of JavaScript APIs for easy integration, without having to deal with the inherent complexities of requiring downloads or plugins for use.&lt;/p&gt;

&lt;p&gt;Before you tackle using WebRTC on your own, there are a few questions to consider and issues to understand, especially when deploying large-scale video call apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do I Need A Media Server?
&lt;/h2&gt;

&lt;p&gt;A media server is not required if you only need to connect to two or three participants in a video call — but that assumes they are on a high-speed, uncongested network. Issues such as distribution and latency all kick in once you move from a one-to-one video session to more than two participants or anticipate large-scale webinars or broadcasting. And when you want to add in features such as recording, transcoding, and connecting calls to PSTN, the burden increases.&lt;/p&gt;

&lt;p&gt;This is because WebRTC is built on a peer-to-peer (mesh) topology. Each participant in a session is connected directly to the other participants. When the number of participants increases, maintaining direct connections (including coding and decoding) between all participants becomes CPU-intensive and unsustainable (see diagram below). As a result, the quality of the video call degrades (in the form of frozen video and sound problems).&lt;/p&gt;

&lt;p&gt;Server-based topologies like Selective Forwarding Unit (SFU) or multi-point control (MCU) can help address these limitations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kggFx-zd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ngnb8bk47j5drq0j8d7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kggFx-zd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ngnb8bk47j5drq0j8d7a.png" alt="Image description" width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-based topologies for scalability
&lt;/h3&gt;

&lt;p&gt;SFU-based topology is computationally less demanding. It does not require transcoding and mixing, making it more scalable and economical. Each participant sends their video stream to the server. The server then forwards those streams (in packets) to the other participants (the other subscribers’ browsers). This reduces the bandwidth requirement, as it minimizes the uplink bandwidth needed from each participant. Furthermore, with a server, developing other functions like transcoding, recording, and Session Initiation Protocol) (SIP) integration becomes simpler (which will be discussed below).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oKqRoiJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7jjxcgxvw7b3ctp5s1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oKqRoiJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7jjxcgxvw7b3ctp5s1o.png" alt="Image description" width="300" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus Tip:&lt;/strong&gt; Plan for the long term: even if your current requirement is only 1-to-1 calling, make sure your implementation can scale easily in the future. There is no QoS guarantee with the WebRTC stack and a TURN server is required for peer discovery in WebRTC when the users are on a restricted network.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Optimize Bandwidth?
&lt;/h2&gt;

&lt;p&gt;Let’s say you decided to go with an SFU. You might want to introduce simulcast as well. In a perfect scenario where bandwidth is not an issue, you’d have all participants on high-quality 720p video resolution, which requires 1.5Mpbs per participant. In the example below, each participant in the session sends out 1.5Mbps and receives three streams of 1.5Mbps. In a four-party call, the media server will need to receive 6Mbps and send out 18Mbps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9-iYr6bS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ykopp1rasy61ksnwhghn.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9-iYr6bS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ykopp1rasy61ksnwhghn.PNG" alt="Image description" width="453" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Realistically, sustained high bandwidth for each participant is unlikely — even more so with an increase in the number of participants. In a multiple-bandwidth scenario, without simulcast, the SFU will receive feedback from each participant about their network connection and will stream at the lowest bitrate to ensure all participants in the session can view the content. The obvious problem with this is that one participant’s stream can lower quality for all participants.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simulcast-Optimized Video Quality
&lt;/h3&gt;

&lt;p&gt;Simulcast, on the other hand, is a mechanism by which a device sends a video stream that contains multiple bitrates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MqQi7PMY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rmy8bfzap0j0lw92n87x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MqQi7PMY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rmy8bfzap0j0lw92n87x.png" alt="Image description" width="300" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With simulcast, a user/client will encode their video into multiple different bitrates. These video streams are then received by the SFU, and the SFU can pick which stream to send to which participant, based on subscribers’ available bandwidth. This is extremely useful in a broadcast scenario. Each participant can consume whichever bitrate is best suited for them.&lt;/p&gt;

&lt;p&gt;Using the above example, with simulcast the amount of bandwidth needed from the media server would be just  8.4Mbps outgoing and 8.8Mbps incoming (assuming two participants are on a smaller window, and thus only need 300kbps of bandwidth). As you can see, a simulcast environment improves the effectiveness of bandwidth consumption and the quality of group calls:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bxG5qyUU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r48m3olrfrmms11s6x5.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bxG5qyUU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4r48m3olrfrmms11s6x5.PNG" alt="Image description" width="662" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus Tip:&lt;/strong&gt; For large-scale calls, you don’t have to “squeeze” everyone onto the window. Instead, you can just display the last few active participants on the screen. We call this Active Talker. Together with simulcast, you get more realistic and efficient user experience. Active Talker is not a feature available in WebRTC.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Connect To VoIP/PSTN?
&lt;/h2&gt;

&lt;p&gt;While web browsers and native apps tend to be the primary focus of modern communication, we cannot ignore users with a VoIP-based endpoint or mobile or landline connection over PSTN. Therefore, it’s imperative for users to be able to dial into an active WebRTC-based session from a phone or have their phone ring when invited to join.&lt;/p&gt;

&lt;h3&gt;
  
  
  SIP Signaling for WebRTC Apps
&lt;/h3&gt;

&lt;p&gt;To do this, you need a gateway or switch that can speak the protocol used by VoIP phones everywhere: SIP. Although WebRTC uses the same underlying protocols that VoIP uses, including  Real-time Transport Protocol (RTP), Real-time Control Protocol (RTCP), Secure Real-time Transport Protocol (SRTP), and Session Description Protocol (SDP), it has no native support for SIP-based signalling. Instead, choosing how to signal for call establishment is left to the developer. As a result, connecting WebRTC to &lt;a href="https://www.enablex.io/cpaas/voice-api/?utm_source=devto"&gt;PSTN/VoIP&lt;/a&gt; endpoints requires a WebRTC/SIP gateway. So you have two choices: either develop in-house or employ a gateway. This requires enough understanding of both WebRTC and SIP protocols to make the two work together cohesively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus Tip:&lt;/strong&gt; To connect to a PSTN line you may also need to deal with legality issues. For example, you cannot legally mix VoIP and PSTN traffic for VoIP calls originating in the Indian subcontinent.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Can I Add Recording As Part Of My Workflow?
&lt;/h2&gt;

&lt;p&gt;Both client-side recording and server-side recording techniques help you work around the challenges of recording with mesh networks. JavaScript coders tend to favor client-side recording, but it comes with limitations. For instance, videos are recorded locally and stored for later use, so you have no visibility into how much available storage you need. And because WebRTC media is pushed over UDP transport, recorded video quality may be suboptimal if there is packet loss on the transport channel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Server-side Recording
&lt;/h3&gt;

&lt;p&gt;With server-side recording, media isn’t sent from browser to browser. Instead, it is sent directly over media servers. When the media is ready to be transmitted, the WebRTC session is initiated with the server as a session broker. The media is routed to the receiving end via the server and, at the same time, the decoded media is sent for recording and post-processing. Recording processing includes combining multiple media inputs from all participants into a single media file, changing the format for playback, and compressing the file size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus Tip:&lt;/strong&gt; Recording media is just one step. You need to also think about archiving, processing metadata, and how, when, and where the playback takes place. Don’t forget to incorporate access security, too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is My Media Secure?
&lt;/h2&gt;

&lt;p&gt;WebRTC is inherently safer in several ways. Because it does not use plug-ins, it eliminates one possible vector of attack through malicious plug-ins or malware. In addition, browser patches are deployed quickly and regularly. WebRTC also mandates all media be end-to-end encrypted and that applications be HTTPS-compliant.&lt;/p&gt;

&lt;h3&gt;
  
  
  Added Security
&lt;/h3&gt;

&lt;p&gt;WebRTC sends encrypted media over secure Datagram Transport Layer Security (DTLS) channels and only permits sending encrypted RTP streams via SRTP. However, WebRTC’s signalling layer should be encrypted, as well as media servers. For additional security, you might want to consider hosting your media servers on-premises. This is a great option for organizations seeking maximum control and privacy of their data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus Tip:&lt;/strong&gt;  Make sure you’re aware of relevant regulations and compliance requirements when developing your apps. For example, healthcare organizations require Health Insurance Portability and Accountability Act (HIPAA) compliance for patient personal data privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  DIY or CPaaS?
&lt;/h2&gt;

&lt;p&gt;While source code for WebRTC is free and easily available to developers, creating your own application can be challenging. There are many considerations, such as sourcing for media and signalling servers, integration, and security. There is no QoS guarantee in the WebRTC stack, and a TURN server is required for peer discovery when users are on a restricted network.&lt;/p&gt;

&lt;p&gt;Currently, there are not many WebRTC experts available worldwide, making a CPaaS provider a more viable alternative. One such provider is EnableX. Built on a carrier-grade platform, EnableX offers developers all the necessary toolkits to develop engaging communication experiences, from one-to-one chats to large-scale broadcasts and webinars, without needing to build backend infrastructure and interfaces.&lt;/p&gt;

&lt;p&gt;A feature-rich, scalable and secure platform, EnableX offers recording, Active Talker, translation, pre/post-call analysis capabilities, and more. The platform is continuously optimized for the highest video quality.&lt;/p&gt;

&lt;p&gt;EnableX is a great option for those who are looking to reduce their time to market and their upfront development costs while maintaining a large degree of control over solutions design and development. &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;Try our APIs&lt;/a&gt; Now!&lt;/p&gt;

</description>
      <category>webrtc</category>
      <category>webdev</category>
      <category>videocall</category>
      <category>javascript</category>
    </item>
    <item>
      <title>EnableX Video API And SDK: Video Call Recording And Watermarking</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Wed, 06 Jul 2022 12:35:26 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/enablex-video-api-and-sdk-video-call-recording-and-watermarking-1md2</link>
      <guid>https://dev.to/yashsrivastava176/enablex-video-api-and-sdk-video-call-recording-and-watermarking-1md2</guid>
      <description>&lt;p&gt;EnableX powerful Video API and SDK‘s call recording and watermarking enables you to record, store and brand your video calling sessions so that you can play them back anytime, anywhere. Organizations need recordings of video conversations for various purposes including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To adhere to industry regulations, company policies and country-specific laws&lt;/li&gt;
&lt;li&gt;Let your customers access their recordings at any time, from anywhere&lt;/li&gt;
&lt;li&gt;For employee training and re-skilling in new roles&lt;/li&gt;
&lt;li&gt;Generating additional revenue via on-demand access to recordings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  EnableX Video Call Recording
&lt;/h2&gt;

&lt;p&gt;This feature is available as a standard feature on the &lt;a href="https://www.enablex.io/cpaas/video-api"&gt;Video API &amp;amp; SDK&lt;/a&gt; platform, which can be configured for auto-recording or a developer can also invoke APIs to start the recording on-demand. Let’s learn more about auto and on-demand video call recording:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Auto-Recording&lt;/strong&gt;&lt;br&gt;
You can configure a meeting room with { settings: { auto_recording: true }} during &lt;a href="https://www.enablex.io/developer/video-api/server-api/rooms-route/#create-room"&gt;Room Creation&lt;/a&gt; to automatically start recording a video call session. The recording can be stopped anytime by invoking the &lt;a href="https://www.enablex.io/developer/video-api/client-api/web-toolkit/recording/#on-demand-recording"&gt;stopRecord()&lt;/a&gt; method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- On-Demand Recording&lt;/strong&gt;&lt;br&gt;
Using the EnxRoom.startRecord() method, one can start recording the video session. With EnxRoom.stopRecord() method, the session can be stopped.&lt;/p&gt;

&lt;p&gt;There is no limit to the number of times one can start/stop recording, which is a handy feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Video Recording Files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Individual participant (Stream)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Users’ stream are recorded individually and can be made available for download in the .MKV format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Transcoded Re-playable Session&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are the files created as single composite video file from individual participant’s streams, which are available for download in the .MP4 format&lt;/p&gt;

&lt;p&gt;Here it is to be noted that individual session recordings are available for download immediately post-session. However, it can take up to 45 minutes to transcribe and create a single, playable MP4 file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Video Recording Delivery
&lt;/h2&gt;

&lt;p&gt;Besides, with EnableX Video Recording Delivery Service, recorded video sessions can be uploaded on to your preferred server location. We currently support file transfer to the following Services / Host Servers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FTP / SFTP&lt;/li&gt;
&lt;li&gt;SCP&lt;/li&gt;
&lt;li&gt;AWS S3 bucket&lt;/li&gt;
&lt;li&gt;Google Drive&lt;/li&gt;
&lt;li&gt;Azure Blob Storage
The recording feature is currently available for both web and mobile applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To know more about how to set up video recording delivery, click here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetching Video Call Recording
&lt;/h2&gt;

&lt;p&gt;Here are the following four ways to access video call recordings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Server API to get the file details &amp;amp; fetch the recordings&lt;/li&gt;
&lt;li&gt;Delivered to your FTP / SFTP Server automatically&lt;/li&gt;
&lt;li&gt;Download through Portal
Get notified through notification URL whenever video chat recording is ready to be downloaded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Video Watermarking&lt;/strong&gt;&lt;br&gt;
Another feature with EnableX is you can add a watermark to your recorded video files by uploading an image file on the platform. It helps not only in branding but also prevents unauthorised use of your recorded videos.&lt;/p&gt;

&lt;p&gt;To know more about how to enable video watermarking on recorded files, &lt;a href="https://www.enablex.io/developer/video-api/client-api/web-toolkit/recording/"&gt;click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To Conclude&lt;br&gt;
A flexible and scalable recording capability is essential for video calling applications. At EnableX, we’ve built the most feature-rich and complete solution to help businesses.&lt;/p&gt;

&lt;p&gt;Learn More&lt;br&gt;
For more information, see our documentation.&lt;/p&gt;

&lt;p&gt;Experience the power of EnableX Video Call with  Recording/Watermarking APIs &amp;amp; SDKs: Start your &lt;a href="https://portal.enablex.io/cpaas/trial-sign-up"&gt;free trial&lt;/a&gt; now.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>videocallrecording</category>
      <category>watermarking</category>
      <category>video</category>
    </item>
    <item>
      <title>How To Develop A WebRTC-Based Audio/Video Communication With No Code</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Wed, 06 Jul 2022 12:13:10 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/how-to-develop-a-webrtc-based-audiovideo-communication-with-no-code-30k9</link>
      <guid>https://dev.to/yashsrivastava176/how-to-develop-a-webrtc-based-audiovideo-communication-with-no-code-30k9</guid>
      <description>&lt;p&gt;WebRTC protocol has revolutionised the way real-time communications are designed, developed and deployed. Most real-time communications solutions are being created on top of the WebRTC framework.&lt;/p&gt;

&lt;p&gt;WebRTC-based audio/video solutions can be challenging to build. But there is good news for you. It lets you create these solutions without coding them.&lt;/p&gt;

&lt;p&gt;In this post, you’ll know various possibilities for developing such a solution to build a feature-rich solution quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is WebRTC And How Does This Work?
&lt;/h2&gt;

&lt;p&gt;WebRTC is a free, open-source framework developed in 2011 by Google to facilitate peer-to-peer data transfer without plugins, native applications or third-party proprietary software. It allows adding real-time communications capabilities to your application and is supported by all major browsers.&lt;/p&gt;

&lt;p&gt;When developing a WebRTC-based application, a developer needs to consider the entire workflow of the application when connecting to remote users, and this is where things can be complicated. &lt;/p&gt;

&lt;p&gt;Here are some broad scenarios that need to be taken into account while embarking on the path of building a power-packed audio-video real-time communication:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--98R65P15--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5epf62utxpuzh7lu054.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--98R65P15--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i5epf62utxpuzh7lu054.PNG" alt="Image description" width="880" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  EnableX Low Code Video Embed And Visual Builder
&lt;/h2&gt;

&lt;p&gt;Developing applications that run on multiple platforms requires knowledge of the skills involved in cross-platform development, such as web, mobile, and WebRTC. The reason is building such applications can be difficult, &lt;a href="https://www.enablex.io/cpaas/"&gt;platform-as-a-service (PaaS)&lt;/a&gt; providers can provide low-code or no-code solutions to facilitate the process.  &lt;/p&gt;

&lt;p&gt;EnableX Low Code Video Embed solution and Visual Builder is currently the most advanced video/audio WebRTC based communication platform.&lt;/p&gt;

&lt;p&gt;Some of the salient features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screen sharing/annotation allows participants to annotate over a screen share.
&lt;/li&gt;
&lt;li&gt;Two-way annotation during a live video session
&lt;/li&gt;
&lt;li&gt;Audio join in / audio calling to a phone number from the video room &lt;/li&gt;
&lt;li&gt;UIkit for mobile frameworks allows you to develop video-based apps in no time for mobile frameworks
&lt;/li&gt;
&lt;li&gt;Co-browsing&lt;/li&gt;
&lt;li&gt; Picture-in-Picture mode for screen sharing allows you to view other participants while you are surfing other websites&lt;/li&gt;
&lt;li&gt;Multiple layouts for video meeting rooms&lt;/li&gt;
&lt;li&gt;Customisation/personalisation of audio/video rooms &lt;/li&gt;
&lt;li&gt;Visual builder –configure your UI
&lt;/li&gt;
&lt;li&gt;Customized backgrounds&lt;/li&gt;
&lt;li&gt;Multiple layouts for recording
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.enablex.io/insights/video-api-and-sdk-recording-and-video-watermarking/"&gt;Live recording&lt;/a&gt;/ Live streaming/ Multiple live streaming/ Transcoding/&lt;a href="https://www.enablex.io/insights/video-api-and-sdk-recording-and-video-watermarking/"&gt;Water marking&lt;/a&gt;/ encrypted recording
&lt;/li&gt;
&lt;li&gt;Whiteboarding&lt;/li&gt;
&lt;li&gt;Language personalisation
&lt;/li&gt;
&lt;li&gt;IP zoning
I hope you’ll have a fair idea of the different scenarios by now. To gain hands-on experience on how to use Low Code Video Embed solution to build a real-time audio/video solution, try out EnableX &lt;a href="https://www.enablex.io/cpaas/video-embed/"&gt;Low Code Video Embed&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can try our Free &lt;a href="https://www.enablex.io/cpaas/video-api"&gt;Video APIs&lt;/a&gt; Video Conferencing Platform with a Live Video Conference in a small group of 6 people for 15 minutes. &lt;a href="https://try.enablex.io/"&gt;Click here to try!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build something exciting!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How To Create A Video Chat App Using EnableX UIKit – iOS Framework</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Tue, 05 Jul 2022 12:01:28 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/how-to-create-a-video-chat-app-using-enablex-uikit-ios-framework-2emk</link>
      <guid>https://dev.to/yashsrivastava176/how-to-create-a-video-chat-app-using-enablex-uikit-ios-framework-2emk</guid>
      <description>&lt;p&gt;The popularity of real-time video calls around the world has exploded big-time. This exponential growth has been sparked by a rising number of use cases of live video streaming.&lt;/p&gt;

&lt;p&gt;So, if you’re a developer looking to capitalise on the growing market for real-time video streaming, this post is exactly what you need.&lt;/p&gt;

&lt;p&gt;Here’s a detailed step-by-step guide on how to create a video chat app with Low Code iOS Native UI using EnableX UIKit.&lt;/p&gt;

&lt;p&gt;After reading this post, you’ll be able to build a powerful real-time video chat app all by yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Will Get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A real time video call app that will allow you to live stream a video call or a virtual event to popular streaming platforms like YouTube, Vimeo or Facebook Live (Meta)&lt;/li&gt;
&lt;li&gt;Smooth sync with all popular devices and compatibility with iOS and Android platforms&lt;/li&gt;
&lt;li&gt;Multiple developer environment support that includes ReactNative / React JS / Flutter / Native Android and IOS etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After reading the post, you can add these features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.enablex.io/insights/enablex-low-code-video-embed/?utm_source=devto"&gt;Screen sharing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.enablex.io/insights/live-video-assistance-with-annotation-for-field-support-using-enablex-apis/?utm_source=devto"&gt;Annotation on remote video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Seamless switch between video and audio under normal network conditions&lt;/li&gt;
&lt;li&gt;Auto – Reconnect in the event of intermediate network loss&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Are We Using EnableX Low Code Video to Create A Video Chat App?
&lt;/h2&gt;

&lt;p&gt;Creating a real-time multiparty video call app along with the capability to Live Stream the session is not an easy task because it involves several steps along the way that are complex, such as UI/UX coding, mobile development, video stack integration, security, and so on.&lt;/p&gt;

&lt;p&gt;Try EnableX &lt;a href="https://www.enablex.io/cpaas/video-embed/?utm_source=devto"&gt;Low Code Video Embed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same functionalities will help you quickly build a native mobile UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is UIKit Framework?
&lt;/h2&gt;

&lt;p&gt;The UIKit framework is used for developing apps for iPhones and iPads. It provides the window and views architecture for implementing the UI interface, along with the required event-handling infrastructure for delivering the multi-touch feature and other types of inputs for your app. The framework’s main run loop is used for managing interactions between the users, the system and the app.&lt;/p&gt;

&lt;p&gt;The framework also offers support on the following fronts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animation&lt;/li&gt;
&lt;li&gt;Document&lt;/li&gt;
&lt;li&gt;Drawing and Printing&lt;/li&gt;
&lt;li&gt;Information about current devices&lt;/li&gt;
&lt;li&gt;Text Management&lt;/li&gt;
&lt;li&gt;Search and Accessibility&lt;/li&gt;
&lt;li&gt;App extension support and resource management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is EnableX UIkit Framework?
&lt;/h2&gt;

&lt;p&gt;The EnableX UIkit framework provides fully customizable native UI for mobile devices, with ready-to-go Video APIs and SDK required for integration of video sessions that are powered by the EnableX platform.&lt;/p&gt;

&lt;p&gt;The EnableX UIKit framework for mobile platforms, such as phones and tablets, allows developers to easily integrate the video conference UI.&lt;/p&gt;

&lt;p&gt;The UIKit framework provides 100% native experience of UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.enablex.io/developer/video/solutions/video-ui-kit/?utm_source=devto"&gt;Video UI Kit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Use EnableX UIkit – iOS Framework
&lt;/h2&gt;

&lt;p&gt;The EnableX UIKit-iOS framework is easy to use. Before we discuss the steps, let’s take a look at the prerequisites you need.&lt;/p&gt;

&lt;p&gt;What You Need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EnableX developer account (click Here)&lt;/li&gt;
&lt;li&gt;Xcode 11.0 or a later version&lt;/li&gt;
&lt;li&gt;An iOS device with a minimum 11.0 iOS&lt;/li&gt;
&lt;li&gt;A basic understanding of iOS development&lt;/li&gt;
&lt;li&gt;CocoaPods&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A valid token to join the room&lt;br&gt;
*To create the EnableX Room and generate a token, read this post: How to create the EnableX Room and token)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Camera permission&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mic permission&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Getting Camera And Mic Permission In iOS&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get the camera permission, use this sample code:&lt;/p&gt;

&lt;p&gt;Private Func getPrivacyAccess(){&lt;/p&gt;

&lt;p&gt;Let vStatus = AVCaptureDevice.authorizationStatus(For: .video)&lt;/p&gt;

&lt;p&gt;If(vStatus == AVAuthorizationStatus.notDetermined){&lt;/p&gt;

&lt;p&gt;AVCaptureDevice.requestAccess(For: .video, completionHandler: { (granted: Bool) In&lt;/p&gt;

&lt;p&gt;})&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Let aStatus = AVCaptureDevice.authorizationStatus(For: .audio)&lt;/p&gt;

&lt;p&gt;If(aStatus == AVAuthorizationStatus.notDetermined){&lt;/p&gt;

&lt;p&gt;AVCaptureDevice.requestAccess(For: .audio, completionHandler: { (granted: Bool) In&lt;/p&gt;

&lt;p&gt;})&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Add &lt;strong&gt;NSCameraUsageDescription And NSMicrophoneUsageDescription&lt;/strong&gt; in your app-&amp;gt; info.plist&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adding EnableX UIKit – IOS Framework&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add the UIKit framework, go to your project directory.&lt;/p&gt;

&lt;p&gt;Now, you need to configure the pod library.&lt;/p&gt;

&lt;p&gt;To initiate the pod library, use the following command in the terminal:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;‘Pod Init’&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, open your pod file and add the required library as stated below:&lt;/p&gt;

&lt;p&gt;**Pod ‘EnxRTCiOS’&lt;/p&gt;

&lt;p&gt;Pod ‘Socket.IO-Client-Swift’, ‘~&amp;gt; 15.0.0’**&lt;/p&gt;

&lt;p&gt;Next, install the pod file through the command &lt;strong&gt;‘Pod Install’&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The pod file installation is over your required dependency library has been installed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KoOJFIQh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rma662bdkm9287uq0yy1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KoOJFIQh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rma662bdkm9287uq0yy1.png" alt="Image description" width="768" height="440"&gt;&lt;/a&gt;&lt;br&gt;
Open your project.xcworkspace, drag and drop Enx_UIKit_iOS.framework to your project.&lt;/p&gt;

&lt;p&gt;Now, click here to download Enx_UIKit_iOTS.framework.&lt;/p&gt;

&lt;p&gt;After manually adding the &lt;strong&gt;Enx_UIKit_iOS.Framework&lt;/strong&gt;, go to -&amp;gt; Target -&amp;gt; Framework, Library and Embedded Content and select Embed &amp;amp; Sign Up for your &lt;strong&gt;Enx_UIKit_iOS.Framework&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wrgJi8KC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/svp001j8a181v0izynju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wrgJi8KC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/svp001j8a181v0izynju.png" alt="Image description" width="768" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You are done with the manual setup.&lt;/p&gt;

&lt;p&gt;Next, to install the pod &lt;strong&gt;Enx_UIKit_iOS.Framework&lt;/strong&gt;, follow the first two steps as mentioned above.&lt;/p&gt;

&lt;p&gt;After that, open your pod file and add the required library as given below:&lt;/p&gt;

&lt;p&gt;‘pod Enx_UIKit_iOS’&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After adding the **Enx_UIKit_iOS.Framework&lt;/em&gt;* through the pod, you’re not required to add the following dependencies:&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pod ‘EnxRTCiOS’&lt;/li&gt;
&lt;li&gt;pod ‘Socket.IO-Client-Swift’, ‘~&amp;gt; 15.0.0’
**
To install your pod file, here is the sample code shown below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jyskqXif--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/923venmkneq0jq61u0ie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jyskqXif--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/923venmkneq0jq61u0ie.png" alt="Image description" width="768" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How To Install Pod&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your project directory through the terminal and hit the below-given command:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;‘Pod Install’&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your setup is done the setup either manually or direct through POD.&lt;/p&gt;

&lt;p&gt;*Note: The Enx_UIKit_iOS framework don’t work on simulator.&lt;/p&gt;

&lt;p&gt;Next, go to your class and import the Enx_UIKit_iOS framework.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Swift&lt;/p&gt;

&lt;p&gt;Import Enx_UIKit_iOS&lt;/p&gt;

&lt;p&gt;Objective- c&lt;/p&gt;

&lt;p&gt;@Import Enx_UIKit_iOS;&lt;/p&gt;

&lt;p&gt;@Class Enx_UIKit_iOS;&lt;/p&gt;

&lt;p&gt;@Interface yourmainclass: UIViewController&lt;/p&gt;

&lt;p&gt;Now, your library has been imported to your project.&lt;/p&gt;

&lt;p&gt;Here is how you can initiate and use:&lt;/p&gt;

&lt;p&gt;Swift&lt;/p&gt;

&lt;p&gt;//Initiate the EnxVideoViewClass&lt;/p&gt;

&lt;p&gt;let enxViewer = EnxVideoViewClass(token: token, delegate: Self)&lt;/p&gt;

&lt;p&gt;//Add this to your view&lt;/p&gt;

&lt;p&gt;view.addSubview(enxViewer)&lt;/p&gt;

&lt;p&gt;//Set the frame&lt;/p&gt;

&lt;p&gt;enxViewer.frame = Self.view.bounds&lt;/p&gt;

&lt;p&gt;//Set the constraint to auto manage UI if the orientation changes&lt;/p&gt;

&lt;p&gt;enxViewer.autoresizingMask = [.flexibleWidth, .flexibleHeight]&lt;/p&gt;

&lt;p&gt;Objective-C&lt;/p&gt;

&lt;p&gt;//Initiate the EnxVideoViewClass&lt;/p&gt;

&lt;p&gt;EnxVideoViewClass *videoView = [[EnxVideoViewClass alloc] initWithToken:@”token” delegate:Self];&lt;/p&gt;

&lt;p&gt;//Add it to your view&lt;/p&gt;

&lt;p&gt;[Self.view addSubview:videoView];&lt;/p&gt;

&lt;p&gt;//Set the frame&lt;/p&gt;

&lt;p&gt;videoView.frame = Self.view.bounds;&lt;/p&gt;

&lt;p&gt;//Set the constraint to auto manage UI if the orientation changes&lt;/p&gt;

&lt;p&gt;videoView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight);&lt;/p&gt;

&lt;p&gt;A user needs to implement Delegate for receiving callback.&lt;/p&gt;

&lt;p&gt;Here, we have given two callback options for users to clear instances or for any other purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disconnect: Callback Response For Disconnect&lt;/strong&gt;&lt;br&gt;
func disconnect(response: [ If Any])&lt;br&gt;
The callback response Disconnect carries information about the cause of disconnection.&lt;br&gt;
&lt;strong&gt;Error: Callback Response For Connection Error&lt;/strong&gt;&lt;br&gt;
func connectError(reason: [Any]?)&lt;br&gt;
Here, the Reason will carry information about the cause of the error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When EnableX UI Kit Framework Starts Loading:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sjjflCMq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vcq79a0stbqtci47ysce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sjjflCMq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vcq79a0stbqtci47ysce.png" alt="Image description" width="768" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the UI starts customizing, it will look like the following frame:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kna55mTi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jmnpat73l3dg4cfph1nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kna55mTi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jmnpat73l3dg4cfph1nc.png" alt="Image description" width="768" height="367"&gt;&lt;/a&gt;&lt;br&gt;
When the connection is established between both sides of a call:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ljtd2_aQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wt9j0m8d2s7or8kd10x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ljtd2_aQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wt9j0m8d2s7or8kd10x.png" alt="Image description" width="768" height="367"&gt;&lt;/a&gt;&lt;br&gt;
You’re now ready to go live!&lt;/p&gt;

&lt;p&gt;So, there you go. Now that you know how to create a video chat app, go ahead and enjoy streaming your feed.&lt;/p&gt;

&lt;p&gt;You can also check out other similar resources and surprise everyone around you by building more cool stuff!&lt;/p&gt;

</description>
      <category>videochat</category>
      <category>uikit</category>
      <category>webdev</category>
      <category>ios</category>
    </item>
    <item>
      <title>How to Build an iOS Video Call App with Few Lines of Code</title>
      <dc:creator>Yash Srivastava</dc:creator>
      <pubDate>Tue, 05 Jul 2022 10:34:48 +0000</pubDate>
      <link>https://dev.to/yashsrivastava176/how-to-build-an-ios-video-call-app-with-few-lines-of-code-4lfc</link>
      <guid>https://dev.to/yashsrivastava176/how-to-build-an-ios-video-call-app-with-few-lines-of-code-4lfc</guid>
      <description>&lt;p&gt;As digital communication is growing rapidly, app-to-app calling stands out as an exciting thing to try out. While it feels tempting to quickly add an audio/video calling feature into your iOS app, it’s not an easy job. That’s because building it from scratch involves plenty of coding and complex integration.  &lt;/p&gt;

&lt;p&gt;That’s where the EnableX CallKit framework comes into the picture. It makes the process quite simple and easy, and you do not need to invest much time and energy in writing unending lines of code!&lt;/p&gt;

&lt;p&gt;This detailed tutorial on ‘How to Build an iOS Video Call App’ takes a look at how to leverage the WebRTC–based EnableX Video framework and the EnableX CallKit to enable Audio &amp;amp; Video features with a native dialer interface on your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is EnableX Calling UI Framework?
&lt;/h2&gt;

&lt;p&gt;It’s a framework that helps developers to enable audio and video features in the app with just a few lines of code, that’s it! The framework consists of two parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;EnableX UIKit – Built on top of the native UI components&lt;/li&gt;
&lt;li&gt;EnableX iOS Audio/Video calling framework.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  EnableX CallKit Framework: The Problem It Solves
&lt;/h2&gt;

&lt;p&gt;Before we dive in, let’s first go over a few things that you need to know.  Earlier, we had introduced iOS SDK so that you could build an iOS Video Call App with audio/video features. But it still required the creation of a Calling UI by the developers. In addition, all calling-related events also needed coding. The bottom line is that it still required plenty of coding from the developer’s side.&lt;/p&gt;

&lt;p&gt;To make it easy &amp;amp; fast, EnableX introduced UIKit. Once it’s added to a project, it automatically installs required iOS SDKs, and automatically handles all the UI and calling-related events. It also helps create 100% native UI. So, with this feature, a developer can add the audio/video feature to an app with just a few lines of code. The UIKit enables a live video chat and also manages all calling-related events. Now, the question is, when you enter the room and want to add other participants/users to join the session, they need to be informed. This can be done by creating events to send notifications to end-users (or participants). But for that, a calling UI is required at their end, otherwise, they can’t join a call. It’s an essential feature for a seamless audio or video call experience. However, it again demands a lot of coding.   &lt;/p&gt;

&lt;p&gt;Apple’s CallKit tried to solve this issue by taking care of the UI part, but the problem of managing notification-related events still persisted.  &lt;/p&gt;

&lt;p&gt;The EnableX introduces the CallKit framework to take care of these issues. It intelligently replicates all native classes of CallKit framework. It wraps all classes into a single unified class, and also internally manages calling-related events. Thanks to the EnableX CallKit, a developer now needs to write just 4-5 lines of code instead of the usual 800-1,000 lines.&lt;/p&gt;

&lt;p&gt;*The notifications can be handled by APNS or any third-party notification provider service.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable VoIP service on your certificate if you want to open CallKit through notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; To try out this code, use iPhone with iOS 12.0 or a higher version.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; CallKit is not supported on simulators.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites for Building iOS Video Call App
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Basic-to-intermediate level understanding of Swift/objective-C and Xcode is required.
&lt;/li&gt;
&lt;li&gt;The Voice-Over IP feature needs to be enabled in the application under the background mode.
&lt;/li&gt;
&lt;li&gt;To visit the tutorial, create an &lt;strong&gt;&lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;EnableX Developer Account&lt;/a&gt;&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Xcode 10 or higher version is needed. &lt;/li&gt;
&lt;li&gt;You’ll need iOS  12 or a higher version for installing EnableX CallKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s now take a step-by-step look at how to build a simple and seamless app-to-app calling mechanism. Let’s start with installing the EnableX CallKit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use CocoaPods to install the project files and other dependencies.&lt;/li&gt;
&lt;li&gt;To install Cocoa Pods, visit &lt;a href="https://guides.cocoapods.org/using/getting-started.html#getting-started"&gt;Cocoa Pods ‘Getting Started’&lt;/a&gt; webpage.&lt;/li&gt;
&lt;li&gt;Open your project podfile and add pod ‘Enx_CallKit_iOS’. &lt;/li&gt;
&lt;li&gt;In the terminal, go to your project directory and type ‘pod install’. &lt;/li&gt;
&lt;li&gt;Reopen your project in Xcode using the new *.xcworkspace file.
That’s it, you’ve installed! But before moving ahead, there are a few basic things about the EnableX CallKit framework that you need to know.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understanding EnableX Classes
&lt;/h2&gt;

&lt;p&gt;Let’s check out what EnableX Classes are and what they’re for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;EnxRtc:&lt;/strong&gt; It offers developers a way to connect with a meeting room and join in. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EnxRoom:&lt;/strong&gt; It handles various room-related functions to communicate with EnableX media, such as the endpoint connected to the EnableX meeting room, publishing self-streaming, and subscribing to remote streams.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EnxStream:&lt;/strong&gt; It manages all media stream-related functions, such as initiating, configuring, and transporting streams to EnableX media servers. It is also used to receive stream endpoints that need to be played. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EnxPlayerView:&lt;/strong&gt; It displays video streams on the EnxPlayerview.
If you want to know more about it, check out the &lt;a href="https://developer.enablex.io/video-api/client-api/ios-toolkit/?utm_source=devto"&gt;EnableX Official Developer Documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  EnableX CallKit Framework Behaviors &amp;amp; Callbacks
&lt;/h2&gt;

&lt;p&gt;The first step is to import Enx_CallKit_iOS. After that, create an object of EnxCallKit class.&lt;/p&gt;

&lt;p&gt;For example: &lt;/p&gt;

&lt;p&gt;** var callManager = EnxCallKit(self)**  &lt;/p&gt;

&lt;p&gt;First of all, you need to pass an instance of the class where you’ll receive event callbacks. You can open the EnableX CallKit UI after receiving push notifications on your app.&lt;/p&gt;

&lt;p&gt;For example: &lt;/p&gt;

&lt;p&gt;let backGroundTaskIndet = UIApplication.shared.beginBackgroundTask(expirationHandler: nil) &lt;/p&gt;

&lt;p&gt;callManager.reportIncomingCall(uuid: UUID(), callerName: “Caller Name”, hasVideo: true/False){ _ in&lt;/p&gt;

&lt;p&gt;UIApplication.shared.endBackgroundTask(backGroundTaskIndet)}&lt;/p&gt;

&lt;p&gt;Users need to add a background task before the Calling UI loads. Once the UI loading is over, the background task should be closed. The reason behind this is simple: when an app opens in another app, the former app also remains open in the background.&lt;/p&gt;

&lt;p&gt;To end the call, use the following API:&lt;/p&gt;

&lt;p&gt;callManager.endCall()&lt;/p&gt;

&lt;p&gt;After the user receives the call, EnableX CallKit starts notifying the behaviour of the user.&lt;/p&gt;

&lt;p&gt;For example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call Answered: func callAnswer():when you receive the call &lt;/li&gt;
&lt;li&gt;Call Rejected:   func callReject():  when you reject the call&lt;/li&gt;
&lt;li&gt;Call Timeout:    func callTimeOut(): when you don’t respond to the call within 45seconds &lt;/li&gt;
&lt;li&gt;Call Ended:    func callEnd(): when you end the call &lt;/li&gt;
&lt;li&gt;Call Hold:    func callHold(): when you put the call on hold
To join the EnableX room after receiving the call via CallKit, you must create an Access Token.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Generate Access Token
&lt;/h2&gt;

&lt;p&gt;Every user needs a unique Access Token to connect to a room. This step is usually done by &lt;a href="https://openapi.enablex.io/video/v1/api-docs/#/Rooms"&gt;Rest API’s Call&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;To generate the Access Token and Room ID, you use the link provided below:  &lt;a href="https://openapi.enablex.io/video/v1/api-docs/#/Rooms"&gt;https://openapi.enablex.io/video/v1/api-docs/#/Rooms&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;To join the EnableX room, a user must have the Access Token from the EnableX server and EnableX iOS SDK.  &lt;/p&gt;

&lt;p&gt;This token can be generated by using EnableX UIKit or EnableX audio/video framework:&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;With EnableX UIKit Framework *&lt;/em&gt;&lt;br&gt;
 Install the EnableX UIKit through the pod ‘Enx_UIKit_iOS’.  &lt;/p&gt;

&lt;p&gt;Follow the steps as shown below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Install the EnableX UIKit Using Pod &lt;/p&gt;

&lt;p&gt;Add this to your pod file: &lt;/p&gt;

&lt;p&gt;pod ‘Enx_UIKit_iOS’.  &lt;/p&gt;

&lt;p&gt;Then, install the pod. EnableX UIKit SDK is now integrated. You can use it in your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Import UIKit in Your Controller Where You Want to Open Your Video Class &lt;/p&gt;

&lt;p&gt;Import ‘Enx_UIKit_iOS’. Then, initiate the EnxVideoViewClass. &lt;/p&gt;

&lt;p&gt;For example: &lt;/p&gt;

&lt;p&gt;let enxViewer = EnxVideoViewClass(token: “a valid room token”, delegate: self)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Add the Following Object to Your View  &lt;/p&gt;

&lt;p&gt;view.addSubview(enxViewer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Set the Frame&lt;br&gt;
enxViewer.frame = self.view.bounds&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Set Constraints to Auto–Adjust UI When Orientation Changes&lt;br&gt;&lt;br&gt;
enxViewer.autoresizingMask = [.flexibleWidth, .flexibleHeight]&lt;/p&gt;

&lt;p&gt;The video integration is now complete. You’ll receive a callback when a user gets disconnected or if there’s any error while joining the room:&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When the room is disconnected:&lt;br&gt;
** func disconnect (response: [Any]?) &lt;br&gt;
**&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Error while connecting:** func connectError (reason: [Any]?)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using EnableX Audio/Video Framework
**
Install EnableX iOS SDK through Pod. Add this to your pod file: pod ‘EnxRTCiOS’, and then install the Pod.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EnableX iOS SDK is now integrated and you can use it on your app. Here’s how to join the room:&lt;/p&gt;

&lt;p&gt;func joinCall(_ token : String){&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set Video Size
**
    let videoSize : NSDictionary =  [“minWidth” : 320 , “minHeight” : 180 , “maxWidth” : 1280, “maxHeight” :720]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setup Room Configuration
** 
    let roomInfo : [String : Any] = [“allow_reconnect” :true , “number_of_attempts” :  3 ,”timeout_interval” : 20,”activeviews” : “view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local Stream Configuration &lt;br&gt;
       let localStreamInfo : NSDictionary = [“video” : true ,“audio” : true  ,“data” :true ,“name” :“Jay”,“type” : “public”,“audio_only” : false , “videoSize” : videoSize]&lt;/p&gt;

&lt;p&gt;Join EnableX room. This method will return the local stream instance.&lt;/p&gt;

&lt;p&gt;guard let steam = self.objectJoin.joinRoom(token, delegate: self, publishStreamInfo: (localStreamInfo as! [AnyHashable : Any]), roomInfo: roomInfo, advanceOptions: nil) else{ &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;            return
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        self.localStream = steam

        self.localStream.delegate = self as EnxStreamDelegate 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Once users join the EnableX room, they’ll get notified through EnxRoomDelegate as shown below. You’ll receive the following callback:&lt;/p&gt;

&lt;p&gt;func room(room: EnxRoom?, didConnect roomMetadata: [AnyHashable : Any]?)&lt;/p&gt;

&lt;p&gt;If a user fails to join the room due to any other reason, you’ll receive the following callback:&lt;br&gt;
func room(room: EnxRoom?, didError reason: [Any]?)&lt;/p&gt;

&lt;p&gt;Once a user publishes a local stream and subscribes to a remote stream, they’ll get a list of Active Talker updates. To get the complete Active Talker view:&lt;/p&gt;

&lt;p&gt;func room(_ room: EnxRoom?, didActiveTalkerView view: UIView?)&lt;/p&gt;

&lt;p&gt;To get the list of Active Talkers (EnxStream for all Talkers in the conference)&lt;/p&gt;

&lt;p&gt;func room(room: EnxRoom?, didActiveTalkerList Data: [Any]?)&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When A User Gets Disconnected 
**
func didRoomDisconnect(_ response: [Any]?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To know more about EnableX iOS SDK and APIs, check out this link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uUVFpSPV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c0w6wz6691fd6zr1gahy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uUVFpSPV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c0w6wz6691fd6zr1gahy.jpg" alt="Image description" width="609" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calling UI Screen (Audio/Video Framework)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GB7d9cdH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8o1aun7iu5k0rebq2lp1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GB7d9cdH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8o1aun7iu5k0rebq2lp1.jpg" alt="Image description" width="759" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(From left to right) &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When the call starts.
&lt;/li&gt;
&lt;li&gt;When the screen unlocks. &lt;/li&gt;
&lt;li&gt;After the call is received by the end-user, the native dialer interface (for audio-only call).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Calling UI Screen (UIKit)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OVa9wrm0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khfi0damuijo1f8g3gup.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OVa9wrm0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/khfi0damuijo1f8g3gup.jpg" alt="Image description" width="760" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When you join using UIKit.&lt;/li&gt;
&lt;li&gt;When you’re waiting for other users to join the call.&lt;/li&gt;
&lt;li&gt;When a user joins the room.&lt;/li&gt;
&lt;li&gt;When multiple users join the room.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Final Words
&lt;/h3&gt;

&lt;p&gt;The era of time-consuming and energy-sapping coding is gone, thanks to the EnableX CallKit framework!  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://portal.enablex.io/cpaas/trial-sign-up/?utm_source=devto"&gt;Sign Up&lt;/a&gt; Now to build your very own iOS Video Call App with EnableX CallKit Framework in no time! &lt;/p&gt;

&lt;p&gt;Let’s Build Something Exciting!&lt;/p&gt;

</description>
      <category>ios</category>
      <category>videocallapp</category>
      <category>uikit</category>
      <category>callkit</category>
    </item>
  </channel>
</rss>
