<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Video SDK Blog</title>
        <link>https://docs.videosdk.live/tutorials</link>
        <description>Video SDK Blog</description>
        <lastBuildDate>Mon, 08 Apr 2024 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Understanding Usage Quota Limits on VideoSDK Plans]]></title>
            <link>https://docs.videosdk.live/tutorials/quota-limit-and-plan</link>
            <guid>https://docs.videosdk.live/tutorials/quota-limit-and-plan</guid>
            <pubDate>Mon, 08 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore VideoSDK quota limits and subscription plans. Learn how to optimize usage and choose the right plan for your video development needs.]]></description>
            <content:encoded><![CDATA[<p>In this documentation, you will find detailed information about the quotas associated with each plan, including usage limits for various features and functionalities. Understanding these quotas will help you optimize your usage, selecting the best pricing plan and make the most of your VideoSDK experience.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="how-videosdk-limits-concurrent-usage-quota">How VideoSDK limits concurrent usage quota<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#how-videosdk-limits-concurrent-usage-quota" class="hash-link" aria-label="Direct link to How VideoSDK limits concurrent usage quota" title="Direct link to How VideoSDK limits concurrent usage quota">​</a></h2>
<p>VideoSDK's approach to limiting usage focuses on concurrent usage rather than overall usage. Concurrent usage refers to the number of participants or requests that can be hosted or processed simultaneously.</p>
<p>For example, if there's a limit of 50 concurrent participants per organization, users can run multiple calls (sessions) simultaneously, with a maximum of 50 participants across all sessions combined.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="how-to-view-my-current-plans-quota-limits">How to view my current plan’s quota limits?<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#how-to-view-my-current-plans-quota-limits" class="hash-link" aria-label="Direct link to How to view my current plan’s quota limits?" title="Direct link to How to view my current plan’s quota limits?">​</a></h2>
<p>To view the current quota limits on your organization, simply navigate to the <a href="https://app.videosdk.live/" target="_blank" rel="noopener noreferrer">VideoSDK Dashboard</a>, go to your Profile section, and click on the Billing tab.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="free-plan">Free Plan<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#free-plan" class="hash-link" aria-label="Direct link to Free Plan" title="Direct link to Free Plan">​</a></h2>
<p>Since, we’ve designed Free Plan for developers who are just exploring, we’ve kept the limits that would get you started without a hitch.</p>
<p>Organisations on Free Plan have the following limits on concurrent usage:</p>
<table><thead><tr><th>Feature</th><th>Concurrent Limit</th></tr></thead><tbody><tr><td>Participants in Video Calls</td><td>50 concurrent participants</td></tr><tr><td>Viewers in Live Streams</td><td>100 concurrent viewers</td></tr><tr><td>Recording Request</td><td>1 concurrent request at a time</td></tr><tr><td>HLS Encoding Request</td><td>1 concurrent request at a time</td></tr><tr><td>RTMP-Out Request</td><td>1 concurrent request at a time</td></tr></tbody></table>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="how-to-increase-my-limits">How to increase my limits?<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#how-to-increase-my-limits" class="hash-link" aria-label="Direct link to How to increase my limits?" title="Direct link to How to increase my limits?">​</a></h3>
<p>To increase your limits, simply upgrade your plan by providing billing details and credit card information.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="pay-as-you-go-plan">Pay-as-you-Go Plan<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#pay-as-you-go-plan" class="hash-link" aria-label="Direct link to Pay-as-you-Go Plan" title="Direct link to Pay-as-you-Go Plan">​</a></h2>
<p>We've increased participant limits for this paid plan. This way, it won't significantly impact users heavily involved in production or integration.</p>
<p>Organisations on Pay-as-you-Go have the following limits on concurrent usage:</p>
<table><thead><tr><th>Feature</th><th>Concurrent Limit</th></tr></thead><tbody><tr><td>Participants in Video Calls</td><td>100 concurrent participants</td></tr><tr><td>Viewers in Live Streams</td><td>500 concurrent viewers</td></tr><tr><td>Recording Request</td><td>5 concurrent request at a time</td></tr><tr><td>HLS Encoding Request</td><td>5 concurrent request at a time</td></tr><tr><td>RTMP-Out Request</td><td>5 concurrent request at a time</td></tr></tbody></table>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="how-to-increase-my-limits-1">How to increase my limits?<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#how-to-increase-my-limits-1" class="hash-link" aria-label="Direct link to How to increase my limits?" title="Direct link to How to increase my limits?">​</a></h3>
<p>To increase your limits further more, simply get in touch with us. <a href="https://www.videosdk.live/contact" target="_blank" rel="noopener noreferrer">Contact us</a> directly or reach out via email at <a href="mailto:support@videosdk.live" target="_blank" rel="noopener noreferrer">support@videosdk.live</a>, and we'll handle the rest gladly.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="enterprise-plan">Enterprise Plan<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#enterprise-plan" class="hash-link" aria-label="Direct link to Enterprise Plan" title="Direct link to Enterprise Plan">​</a></h2>
<p>For Enterprise users, all limits are tailored to the specific needs. Customised limits ensure optimal performance for your unique requirements.</p>
<p>To get started as an Enterprise user, simply get in touch with us, explain your requirements and use case, and we’ll customise the quota and limits according to your needs.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="examples-to-understand-concurrent-limits">Examples to understand concurrent limits<a href="https://docs.videosdk.live/tutorials/quota-limit-and-plan#examples-to-understand-concurrent-limits" class="hash-link" aria-label="Direct link to Examples to understand concurrent limits" title="Direct link to Examples to understand concurrent limits">​</a></h2>
<p><strong>Example #1</strong></p>
<p>Let's say you're using video callings (RTC) in your organization on the Free Plan. In this scenario, you can concurrently host up to 50 participants. However, the number of calls (sessions) you initiate is unrestricted.</p>
<p>To simplify, you can run multiple sessions simultaneously, but concurrently, you can only accommodate a maximum of 50 participants across all sessions. If a 51st participant attempts to join, they won't be able to access the session until you upgrade your plan to increase your participant limits.</p>
<p><strong>Example #2</strong></p>
<p>Let’s say you're using live streaming in your organization on the Free Plan. In this setup, you can concurrently host up to 100 viewers joining the sessions. While you have the flexibility to host multiple live streaming sessions, the number of viewers joining session concurrently is restricted.</p>
<p><strong>Example #3</strong></p>
<p>Lets say you’re using video callings (RTC) in your organization on the Pay-as-you-Go Plan and you're hosting 5 concurrent calls (sessions), all of which are being recorded. Now, when you initiate the 6th call (session) and request recording, VideoSDK will not process your recording request. Instead, it will throw an error because you've reached your recording request limit.</p>
<p>If you have any questions regarding quota limits and pricing plan, post in our <a href="https://discord.com/invite/Qfm8j4YAUJ" target="_blank" rel="noopener noreferrer">Discord community</a>, <a href="https://www.videosdk.live/contact" target="_blank" rel="noopener noreferrer">contact us</a> directly, or reach out to us on <a href="mailto:support@videosdk.live" target="_blank" rel="noopener noreferrer">support@videosdk.live</a>.</p>]]></content:encoded>
            <category>Videosdk Plans</category>
            <category>Videosdk Quota</category>
            <category>Videosdk Limit</category>
        </item>
        <item>
            <title><![CDATA[Unlock Insights with VideoSDK's Session Analytics Dashboard]]></title>
            <link>https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard</link>
            <guid>https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard</guid>
            <pubDate>Thu, 28 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Unlock valuable insights and optimize your sessions with our comprehensive session analysis tutorial. Explore participant insights, understand call health, and analyze session statistics for enhanced performance indicators.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="unleash-insights-with-videosdks-session-analytics">Unleash Insights with VideoSDK's Session Analytics<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#unleash-insights-with-videosdks-session-analytics" class="hash-link" aria-label="Direct link to Unleash Insights with VideoSDK's Session Analytics" title="Direct link to Unleash Insights with VideoSDK's Session Analytics">​</a></h2>
<p>Welcome to the world of actionable insights and empowered decision-making. VideoSDK's session analytics dashboard is your gateway to understanding, optimizing, and elevating every aspect of your sessions.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="accessing-analytics-made-easy">Accessing Analytics Made Easy<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#accessing-analytics-made-easy" class="hash-link" aria-label="Direct link to Accessing Analytics Made Easy" title="Direct link to Accessing Analytics Made Easy">​</a></h2>
<p>Navigating through session data is a breeze with VideoSDK. Simply head to your session page at <a href="https://app.videosdk.live/meetings/sessions" target="_blank" rel="noopener noreferrer">https://app.videosdk.live/meetings/sessions</a>, where a treasure trove of session information awaits.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="how-to-access-analytics">How to Access Analytics?<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#how-to-access-analytics" class="hash-link" aria-label="Direct link to How to Access Analytics?" title="Direct link to How to Access Analytics?">​</a></h3>
<p>Open Session Analytics effortlessly by following these steps:</p>
<ol>
<li><strong>Click on Meeting-ID:</strong>
<ul>
<li>Directly access analytics by clicking on the meeting-ID within the session table.</li>
</ul>
</li>
<li><strong>Hover and Click View Analytics:</strong>
<ul>
<li>Hover over a specific meeting row to reveal the <strong>View Analytics</strong> button in the Actions Column.</li>
<li>Click on <strong>View Analytics</strong> to open the Session Overview sidebar, unlocking a wealth of insights.</li>
</ul>
</li>
</ol>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/access_analytics.png" alt="Access Analytics" class="img_wQsy"></p>
<hr>
<p>There are three tabs available within the session analytics view:</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="1-session-overview"><strong>1. Session Overview</strong><a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#1-session-overview" class="hash-link" aria-label="Direct link to 1-session-overview" title="Direct link to 1-session-overview">​</a></h2>
<p>This tab provides an overview of the session, including its duration and participant details. You can explore individual participant statistics to understand their session performance better.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="2-errors"><strong>2. Errors</strong><a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#2-errors" class="hash-link" aria-label="Direct link to 2-errors" title="Direct link to 2-errors">​</a></h2>
<p>In this tab, you can find information about any errors encountered during the session. It helps you identify and address issues like network problems or technical glitches promptly.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="3-session-stats"><strong>3. Session Stats</strong><a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#3-session-stats" class="hash-link" aria-label="Direct link to 3-session-stats" title="Direct link to 3-session-stats">​</a></h2>
<p>Explore data and metrics sent and received by participants to measure performance of the session in this tab. It offers insights into data exchange among participants, including metrics on jitter, RTT, and packet loss, resolutions, and fps aiding in assessing communication efficiency.</p>
<p>Let's dive deeper into each of these tabs to gain a better understanding of session analytics.</p>
<h1>Session Overview</h1>
<p>The session overview page is your compass in the sea of data. Here's what you'll uncover:</p>
<ul>
<li><strong>Meeting ID:</strong> Unique identifier for the meeting in the format of <code>abcd-efgh-ijkl</code>.</li>
<li><strong>Session ID:</strong> Unique identifier for each session, uniquely identified by its <code>sessionId</code>.</li>
<li><strong>Session Status:</strong> Indicates if the session is ongoing or ended.</li>
<li><strong>Session Initiating Time:</strong> Time taken by the first participant to establish the connection.</li>
<li><strong>Start and End Time:</strong> Marks the start and end of the session.</li>
<li><strong>Total Unique Participants Joined:</strong> Total number of unique participants in the session.</li>
<li><strong>Total Session Duration:</strong> Overall duration of the session from start to end.</li>
<li><strong>Total Participant Minutes:</strong> A sum of all participant duration.</li>
<li><strong>Recording, HLS, RTMP:</strong> Additional services used in the session.</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="participant-table-list">Participant Table List<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#participant-table-list" class="hash-link" aria-label="Direct link to Participant Table List" title="Direct link to Participant Table List">​</a></h3>
<ul>
<li><strong>Participant ID:</strong> Unique identifier for each participant.</li>
<li><strong>Participant Name:</strong> Personalized identification for each participant.</li>
<li><strong>Join Time:</strong> Time taken by the participant to establish connection.</li>
<li><strong>Duration:</strong> Total time spent by this participant in the session.</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="efficient-session-management-with-actions">Efficient Session Management with Actions<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#efficient-session-management-with-actions" class="hash-link" aria-label="Direct link to Efficient Session Management with Actions" title="Direct link to Efficient Session Management with Actions">​</a></h3>
<p>Enhance your session management with streamlined actions:</p>
<ul>
<li><strong>Kick Out Participants:</strong> Effortlessly remove/kickout participants from ongoing sessions.</li>
<li><strong>Detailed Participant Analytics:</strong></li>
<li>Hover over a specific participant row to reveal the <code>View Stats</code> button at the end of the row.</li>
<li>Click on <code>View Stats</code> to open the Participant Overview sidebar.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/view_stats.png" alt="View Stats" class="img_wQsy"></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="explore-participant-insights">Explore Participant Insights<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#explore-participant-insights" class="hash-link" aria-label="Direct link to Explore Participant Insights" title="Direct link to Explore Participant Insights">​</a></h2>
<p>Discover valuable participant data that provides a clear view of engagement and experience:</p>
<ul>
<li><strong>Participant ID:</strong> Unique identifier for each participant.</li>
<li><strong>Participant Name:</strong> Personalized identification for better interaction.</li>
<li><strong>Joined At:</strong> Indicates the precise moment when participant connects to the session.</li>
<li><strong>Left At:</strong> Indicates the precise moment when participant left the session.</li>
<li><strong>Total Duration:</strong> Total duration of participant within that session.</li>
<li><strong>Joining Time:</strong> Time taken by the this participant to establish the connection.</li>
<li><strong>Location:</strong> Approx. geographic location from where the participant joined.</li>
<li><strong>Platform:</strong> Specifies whether participants are using a desktop or mobile device.</li>
<li><strong>Device Info:</strong> Offers details regarding the participant's device.</li>
<li><strong>OS:</strong> Provides information about the participant's OS.</li>
<li><strong>Browser:</strong> Provides specifics about the participant's browser</li>
<li><strong>SDK Version:</strong> Indicates the version of the SDK used by participants.</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="understanding-participant-call-health">Understanding Participant Call Health<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#understanding-participant-call-health" class="hash-link" aria-label="Direct link to Understanding Participant Call Health" title="Direct link to Understanding Participant Call Health">​</a></h3>
<p>We've developed call health to offer a rapid assessment of participant performance during calls. This feature highlights the performance of audio, video, and screen sharing audio-video separately. We've utilized color theory, with green indicating good performance, orange for moderate, and red for poor performance, to enhance clarity. For detailed insights, simply hover over the bars</p>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/participant_call_health.png" alt="Participant Call Health" class="img_wQsy"></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="participant-session-stats">Participant Session Stats<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#participant-session-stats" class="hash-link" aria-label="Direct link to Participant Session Stats" title="Direct link to Participant Session Stats">​</a></h2>
<p>Dive into Participant Session Stats for valuable insights into your session experience! With just a click on <code>View Session Stats</code> at the bottom of the page, unlock a treasure trove of data crucial for understanding audio and video experiences.</p>
<p>Within this section, you can observe quality metrics for the selected participant, comparing them to others. Additionally, the <code>Sessions Stats</code> covers quality stats comparison for every participant. Keep reading to explore more about Session Stats.</p>
<p><strong>Visualizing Session Performance from Both Sides</strong></p>
<p>This section provides a two-sided view of your session's metrics.</p>
<ul>
<li><strong>Left Side: Sender Participant Graph</strong> This section displays graphs representing the metrics sent by the sender participant. Here, you can see how the various factors impacted the data you transmitted.</li>
<li><strong>Right Side: Receiver Participant Graph</strong> On the right side, you'll find a dropdown menu where you can select a specific participant. Choosing a receiver will display graphs showcasing the metrics <strong>received by that participant</strong>. This allows you to compare the sending experience (left side) with the receiving experience (right side) for different participants.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/video_jitter_graph.png" alt="VideoSDK Jitter Graph" class="img_wQsy"></p>
<p><strong>See How Your Session Performed</strong></p>
<p>These metrics give you a clear picture of your session's quality. Understanding them helps you spot any issues and keep things running smoothly. Let's dive into what each metric means!</p>
<p><strong>Jitter:</strong> Imagine your internet connection like a bumpy road. Jitter is how much those bumps cause your signal to bounce around. Less jitter means a smoother ride for your data (audio and video, threshold ≤ 30ms).</p>
<p><strong>RTT (Latency):</strong> This is how long it takes for data to travel between you and the server you're connected to. Think of it like the time it takes for a message to get delivered – a lower RTT means a faster delivery (affects both audio and video, threshold ≤ 300ms).</p>
<p><strong>Bitrate:</strong> This measures the amount of data flowing through your connection per second. Imagine it like the width of a water pipe – a higher bitrate allows for more data to flow, which can be good for high-quality audio/video or fast downloads.</p>
<p><strong>Packet Loss:</strong> Think of data traveling in tiny packets. Packet loss is when some of those packets get dropped along the way. More packet loss means information might be missing, affecting things like audio/video quality or lag in games (threshold ≤ 5%).</p>
<p><strong>Resolution:</strong> This refers to the sharpness and detail of an image or video. Think of it like the number of pixels on your screen – a higher resolution means a crisper picture (<strong>Video Only</strong>).</p>
<p><strong>FPS (Frames Per Second):</strong> This measures how many images (frames) are displayed on your screen every second. Imagine it like a flipbook – a higher FPS creates a smoother and more fluid animation or video experience (<strong>Video Only</strong>).</p>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/video_fps_graph.png" alt="VideoSDK FPS Graph" class="img_wQsy"></p>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/video_resolution_graph.png" alt="VideoSDK Resolution Graph" class="img_wQsy"></p>
<hr>
<h1><strong>Investigate Session Errors</strong></h1>
<p>Get to the root of smoother sessions by addressing errors directly. Use the Errors tab to explore details of errors encountered during your session. Note: Session errors are visible with JS SDK v0.0.82 or higher, React SDK v0.1.85 or higher, and React Native v0.1.6 or newer versions.</p>
<ul>
<li><strong>Participant Name &amp; ID:</strong> Quickly identify the participant associated with each error for swift resolution.</li>
<li><strong>Error Types:</strong> Understand the different types of errors encountered, such as network issues or connection disruptions.</li>
<li><strong>Detailed Descriptions:</strong> Access clear explanations of errors to take actionable steps towards solution.</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/error_new.png" alt="VideoSDK Error Details" class="img_wQsy"></p>
<h1><strong>Analyse Session Stats</strong></h1>
<p>Similar to <code>Participant Session Stats</code>, this tab covers quality statistics sent by individual participants. You can select any participant to compare effectively with others.</p>
<p>Choose a sender participant from the dropdown menu on the left and select a recipient on the right to compare data over different time frames. This allows you to identify and explore issues within specific durations.</p>
<p>This tab covers the same metrics as covered in the <code>participant session stats</code>: Jitter, RTT (Latency), Bitrate, Packet-loss, Resolution (Video only), and FPS (Video only).</p>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/session_stats.png" alt="VideoSDK Session Stats" class="img_wQsy"></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="conclusion">Conclusion<a href="https://docs.videosdk.live/tutorials/videosdk-session-analytics-dashboard#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This tutorial offers a comprehensive overview of Session Analytics, empowering you to maximize its potential. Dive deep into call performance, audio-video quality, participant insights, common errors, and their resolutions through detailed analytics. Your feedback is invaluable in shaping our products to suit your needs better, so please take a moment to leave your thoughts at the bottom of the session overview tab.</p>
<p>Stay tuned for exciting updates in Session Analytics, including a Session Timeline view, enhanced error coverage spanning SDK and infrastructure, and much more. We're committed to continuously improving your experience and providing valuable insights for your sessions.</p>]]></content:encoded>
            <category>Session Analytics</category>
        </item>
        <item>
            <title><![CDATA[How to enable post transcription and summary in VideoSDK]]></title>
            <link>https://docs.videosdk.live/tutorials/transcription-and-summary</link>
            <guid>https://docs.videosdk.live/tutorials/transcription-and-summary</guid>
            <pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore how to enable transcription and summary post recordings using the transcription API to enhance accessibility and usability of recordings.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="overview">Overview<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2>
<p>Transcription API empowers developers to convert spoken language into written text automatically. In this tutorial, we'll delve into how to effectively utilize a Transcription API to transcribe meeting recordings. We'll explore two distinct methods for initiating transcription: enabling transcription via the start recording API and enabling transcription via auto-configuration while creating a meetingId using API.</p>
<p>This feature is currently in BETA.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="prerequisites">Prerequisites<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h2>
<p>Before diving into the Transcription API, ensure you have:</p>
<ul>
<li>Basic knowledge of REST APIs.</li>
<li>Understanding of JSON formatting.</li>
<li>An <a href="https://docs.videosdk.live/react/guide/video-and-audio-calling-api-sdk/authentication-and-token" target="_blank" rel="noopener noreferrer">Auth Token</a> for the Transcription API.</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-1-understand-the-workflow">Step 1: Understand the workflow<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#step-1-understand-the-workflow" class="hash-link" aria-label="Direct link to Step 1: Understand the workflow" title="Direct link to Step 1: Understand the workflow">​</a></h2>
<p>Before enabling transcription and summary features in VideoSDK, it's important to understand the basic workflow. Transcription and summarization occur after recording, meaning that recording is a necessary step before these features can be used. To activate the transcription and summary APIs, you must first start recording using either the Start Recording API or by auto config recording within the Create MeetingId API.
To use transcription, recordings needs to be stored in VideoSDK Cloud</p>
<p><img decoding="async" loading="lazy" src="https://cdn.videosdk.live/website-resources/docs-resources/transcription_workflow.png" alt="transcription_workflow.png" class="img_wQsy"></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-2-choosing-your-method">Step 2: Choosing Your Method<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#step-2-choosing-your-method" class="hash-link" aria-label="Direct link to Step 2: Choosing Your Method" title="Direct link to Step 2: Choosing Your Method">​</a></h2>
<p>There are two primary methods for initiating transcription</p>
<ul>
<li>via the <a href="https://docs.videosdk.live/api-reference/realtime-communication/start-recording#config" target="_blank" rel="noopener noreferrer">start recording API</a></li>
<li>via auto configuration while <a href="https://docs.videosdk.live/api-reference/realtime-communication/create-room#autoStartConfig" target="_blank" rel="noopener noreferrer">creating a meeting API</a></li>
</ul>
<p>Choose the method that best fits your use case.</p>
<h4 class="anchor anchorWithHideOnScrollNavbar_emO8" id="option-1-enabling-transcription-via-recording-api">Option 1: Enabling Transcription via Recording API<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#option-1-enabling-transcription-via-recording-api" class="hash-link" aria-label="Direct link to Option 1: Enabling Transcription via Recording API" title="Direct link to Option 1: Enabling Transcription via Recording API">​</a></h4>
<p>In this method, transcription is enabled by including a transcription object with the property enabled set to true in the start recording API request. Below is an example implementation in Node.js:</p>
<p>Request</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> fetch </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"node-fetch"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> options </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token literal-property property">method</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"POST"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token literal-property property">headers</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">Authorization</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"YOUR_TOKEN"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string-property property">"Content-Type"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"application/json"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token literal-property property">body</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(100, 102, 149)">JSON</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">stringify</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">roomId</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"room-id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">transcription</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token literal-property property">summary</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> url </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">https://api.videosdk.live/v2/recordings/start</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> response </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">fetch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> options</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> data </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">json</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Response</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token string" style="color:rgb(206, 145, 120)">"Recording started successfully"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Replace <strong><code>room-id</code></strong> with the ID of your meeting or room and <strong><code>YOUR_TOKEN</code> with your auth token</strong>.</p>
<p>Additionally, you can enable summary feature by setting the <strong><code>enabled</code></strong> property to <strong><code>true</code></strong> within the summary object.</p>
<h4 class="anchor anchorWithHideOnScrollNavbar_emO8" id="option-2-enabling-transcription-via-auto-configuration-while-creating-meeting-using-api">Option 2: Enabling Transcription via Auto Configuration while creating meeting using API<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#option-2-enabling-transcription-via-auto-configuration-while-creating-meeting-using-api" class="hash-link" aria-label="Direct link to Option 2: Enabling Transcription via Auto Configuration while creating meeting using API" title="Direct link to Option 2: Enabling Transcription via Auto Configuration while creating meeting using API">​</a></h4>
<p>If you prefer transcription to be enabled by default when creating a meeting, you can configure this during the meeting creation process. Here's an example implementation in Node.js:</p>
<p>Request</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> fetch </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'node-fetch'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> options </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token literal-property property">method</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"POST"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token literal-property property">headers</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		</span><span class="token string-property property">"Authorization"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"$YOUR_TOKEN"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		</span><span class="token string-property property">"Content-Type"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"application/json"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token literal-property property">body</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(100, 102, 149)">JSON</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">stringify</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">				</span><span class="token string-property property">"autoStartConfig"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">					</span><span class="token string-property property">"recording"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">						</span><span class="token string-property property">"transcription"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">							</span><span class="token string-property property">"enabled"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              </span><span class="token string-property property">"summary"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"enabled"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">						  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">					</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">				</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">			</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> url</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">https://api.videosdk.live/v2/rooms</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> response </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">fetch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> options</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> data </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">json</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Response</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">"roomId"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"abc-xyzw-lmno"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">"disabled"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">"createdAt"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"2024-02-27T04:49:11.024Z"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">"updatedAt"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"2024-02-27T04:49:11.024Z"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">"id"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"623d49c760a18e699abcc8a4"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token string-property property">"links"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string-property property">"get_room"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://api.videosdk.live/v2/rooms/abc-xyzw-lmno"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string-property property">"get_session"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://api.videosdk.live/v2/sessions/"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Replace <strong><code>"YOUR_TOKEN"</code></strong> with your authentication token and set the summary object's <strong><code>enabled</code></strong> property to <strong><code>true</code></strong> if you wish to utilize the summary feature.</p>
<p>In this method, recording will automatically start with transcription enabled when initiating a session with a specified Meeting ID or Room ID.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-3-conducting-a-meeting">Step 3: Conducting a Meeting<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#step-3-conducting-a-meeting" class="hash-link" aria-label="Direct link to Step 3: Conducting a Meeting" title="Direct link to Step 3: Conducting a Meeting">​</a></h2>
<p>You can initiate a meeting using any of our SDKs (Prebuilt, React, React Native, JS, Flutter, Android, iOS).</p>
<ul>
<li>Option 1: If you opt to enable transcription via the recording API, pass the transcription object as described in Step 2. The recording will commence with the transcription feature enabled.</li>
<li>Option 2: If you prefer enabling the transcription feature during meeting creation using the API, the recording will automatically begin with transcription enabled when initiating your meeting.</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-4-retrieving-transcription-and-summary">Step 4: Retrieving Transcription and Summary<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#step-4-retrieving-transcription-and-summary" class="hash-link" aria-label="Direct link to Step 4: Retrieving Transcription and Summary" title="Direct link to Step 4: Retrieving Transcription and Summary">​</a></h2>
<p>After the recording concludes and transcription was enabled for that recording or meeting, you can retrieve the transcription and summary using the API.</p>
<p>To retrieve the transcription of a meeting, make a GET request to the Transcription API endpoint with the meeting ID. Below is an example using Node.js:</p>
<p>Request</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> fetch </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"node-fetch"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> options </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token literal-property property">method</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"GET"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token literal-property property">headers</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">Authorization</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"$YOUR_TOKEN"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string-property property">"Content-Type"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"application/json"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> roomId </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"room-id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> url </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">https://api.videosdk.live/ai/v1/post-transcriptions?roomId=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">roomId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> response </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">fetch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> options</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> data </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">json</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Response</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string-property property">"pageInfo"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string-property property">"currentPage"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string-property property">"perPage"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">20</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string-property property">"lastPage"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token string-property property">"total"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(181, 206, 168)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token string-property property">"transcriptions"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"id"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"transcription-id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"status"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"completed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">						</span><span class="token string-property property">"roomId"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"room-id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">						</span><span class="token string-property property">"sessionId"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"session-id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"recordingId"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"recording-id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"filePath"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/encoded/videos/dummy.mp4"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"transcriptionFilePaths"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"json"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/transcriptions/dummy/dummy.json"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"srt"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/transcriptions/dummy/dummy.srt"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"txt"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/transcriptions/dummy/dummy.txt"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"tsv"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/transcriptions/dummy/dummy.tsv"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"vtt"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/transcriptions/dummy/dummy.vtt"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"summarizedFilePaths"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                </span><span class="token string-property property">"txt"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"https://cdn.videosdk.live/transcriptions/dummy/dummy-summary.txt"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"userStorage"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"start"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"2024-02-27T16:00:36.828Z"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token string-property property">"end"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"2024-02-27T16:01:46.939Z"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Replace <strong><code>'YOUR_AUTH_TOKEN'</code></strong> with your authentication token and <strong><code>'room-id'</code></strong> with the ID of your meeting or room.</p>
<p>Here, you will receive <code>transcriptionFilePaths</code> object containing paths of the transcribed files with various formats such as json, srt, txt, tsv, vtt.</p>
<p>Additionally, if you have enabled summary feature, you will receive a <code>summarizedFilePaths</code> object containing path of the summarized text file.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="conclusion">Conclusion<a href="https://docs.videosdk.live/tutorials/transcription-and-summary#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>In this tutorial, you've learned how to enable transcription for meetings using the Transcription API. By following the steps outlined above, you can easily integrate transcription capabilities into your applications and retrieve transcribed text and summaries for your meetings. Transcription can greatly enhance the accessibility and usability of your meeting recordings, making them more searchable and comprehensible. Experiment with these methods and explore further possibilities to unlock the full potential of transcription in your applications and enhance the efficiency and productivity of your meetings.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Twilio to Video SDK Migration Guide]]></title>
            <link>https://docs.videosdk.live/tutorials/twilio-to-videosdk-migration-guide</link>
            <guid>https://docs.videosdk.live/tutorials/twilio-to-videosdk-migration-guide</guid>
            <pubDate>Fri, 08 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore a smooth transition from VideoSDK to Twilio for enhanced video capabilities. Discover the seamless migration process and unlock a new level of video communication with our comprehensive guide..]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="greetings-twilio-developers"><strong>Greetings, Twilio Developers!</strong><a href="https://docs.videosdk.live/tutorials/twilio-to-videosdk-migration-guide#greetings-twilio-developers" class="hash-link" aria-label="Direct link to greetings-twilio-developers" title="Direct link to greetings-twilio-developers">​</a></h2>
<p>We're thrilled to welcome you on your journey from Twilio Video to VideoSDK! As you begin your migration, prepare to embrace a world of exciting possibilities.</p>
<p>VideoSDK offers a global infrastructure for seamless video and audio communication around the world, while its unwavering commitment to classic call quality provides reliability, scalability, and robust security. Bring your projects to life with a variety of features including audio, video, screen sharing, chat, and participatory moderation.</p>
<p>The Video SDK integrates seamlessly into your existing workflow with the ease of <a href="https://docs.videosdk.live/api-reference/realtime-communication/intro" target="_blank" rel="noopener noreferrer">REST API</a> and <a href="https://docs.videosdk.live/api-reference/realtime-communication/user-webhooks" target="_blank" rel="noopener noreferrer">Webhooks</a>, ensuring a smooth transition while maintaining flexibility and extensibility.</p>
<p>Please explore the resources in this guide and feel free to contact our support team with any questions or concerns.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="migration-guide"><strong>Migration Guide</strong><a href="https://docs.videosdk.live/tutorials/twilio-to-videosdk-migration-guide#migration-guide" class="hash-link" aria-label="Direct link to migration-guide" title="Direct link to migration-guide">​</a></h3>
<p>We are committed to making this migration process as easy and efficient as possible. This step-by-step guide will serve as your roadmap, providing comprehensive instructions and valuable insights to ensure a successful transition.</p>
<!-- -->
<div id="tailwind"><div class="grid grid-cols-4 gap-6 my-6"><a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk"><div class="col-span-1 sdkcard flex flex-col items-center justify-center py-6 rounded-md"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><g clip-path="url(#clip0_47_2)"><path fill="#fff" d="M12.804 7.34a.67.67 0 00.49-.206.67.67 0 00.206-.491.67.67 0 00-.205-.491.67.67 0 00-.491-.206.641.641 0 00-.483.206.686.686 0 00-.196.49c0 .191.066.355.196.492a.641.641 0 00.483.205zm7.535 0c.19 0 .352-.07.482-.206a.685.685 0 00.197-.491.685.685 0 00-.197-.491.641.641 0 00-.482-.206.67.67 0 00-.49.206.67.67 0 00-.206.49c0 .191.068.355.205.492a.67.67 0 00.491.205zm-14.5 3.285c.5 0 .929.179 1.286.536.357.357.536.785.536 1.285v7.679c0 .512-.176.946-.527 1.304a1.745 1.745 0 01-1.295.535c-.512 0-.946-.178-1.303-.535A1.774 1.774 0 014 20.125v-7.679c0-.5.179-.928.536-1.285a1.774 1.774 0 011.303-.536zm18.929.34v11.892c0 .548-.19 1.012-.572 1.393-.38.381-.839.571-1.375.571h-1.339v4.054c0 .512-.178.946-.536 1.304a1.774 1.774 0 01-1.303.535c-.512 0-.947-.178-1.304-.535a1.774 1.774 0 01-.535-1.304v-4.054h-2.465v4.054c0 .512-.178.946-.535 1.304a1.775 1.775 0 01-1.304.535c-.5 0-.929-.178-1.286-.535a1.774 1.774 0 01-.535-1.304l-.018-4.054h-1.322c-.547 0-1.012-.19-1.393-.571a1.895 1.895 0 01-.571-1.393V10.964h16.393zm-4.143-7.233a7.853 7.853 0 013.054 2.741 6.922 6.922 0 011.142 3.848H8.304c0-1.392.38-2.675 1.142-3.848.762-1.172 1.786-2.086 3.072-2.74l-1.268-2.34c-.083-.155-.054-.274.09-.357.154-.072.273-.036.356.107L12.982 3.5a8.779 8.779 0 013.59-.75c1.261 0 2.458.25 3.589.75l1.285-2.357c.084-.143.203-.179.358-.107.142.083.172.202.089.357l-1.268 2.34zm8.518 8.714v7.679c0 .512-.179.946-.536 1.304a1.774 1.774 0 01-1.303.535c-.5 0-.929-.178-1.286-.535a1.774 1.774 0 01-.536-1.304v-7.679c0-.511.179-.943.536-1.294a1.768 1.768 0 011.286-.527c.512 0 .946.176 1.303.527.357.351.536.783.536 1.294z"></path></g><defs><clipPath id="clip0_47_2"><path fill="#fff" d="M0 0H32V32H0z"></path></clipPath></defs></svg><div class="mt-3"><p class="text-base mb-0 text-white-100">Android</p></div></div></a><a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk"><div class="col-span-1 sdkcard flex flex-col items-center justify-center py-6 rounded-md"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><g clip-path="url(#clip0_47_5)"><path fill="#fff" d="M20.323 31c-.926 0-1.75-.313-2.545-.611-.68-.26-1.322-.502-1.931-.502-.54 0-1.157.231-1.81.474-.79.292-1.684.626-2.655.626-1.597 0-3.028-.914-4.382-2.79-.057-.08-5.57-8.175-2.891-14.186 1.466-3.292 3.58-4.963 6.28-4.963 1.425 0 2.74.447 3.795.807.592.201 1.15.39 1.444.39.348 0 .906-.203 1.493-.421.98-.36 2.203-.811 3.605-.811 2.032 0 3.872.938 5.625 2.869a.638.638 0 01.079.738.641.641 0 01-.175.196c-1.848 1.347-2.785 2.904-2.785 4.63 0 2.14 1.056 3.71 3.525 5.248a.628.628 0 01.242.793C24.916 28.681 22.784 31 20.323 31zM15.687 8.687c-.151 0-.304-.01-.454-.028a.628.628 0 01-.553-.602c-.167-4.227 3.415-6.815 6.063-7.055a.638.638 0 01.68.517c.292 1.627-.254 3.415-1.5 4.906-1.185 1.417-2.769 2.262-4.235 2.262z"></path></g><defs><clipPath id="clip0_47_5"><path fill="#fff" d="M0 0H32V32H0z"></path></clipPath></defs></svg><div class="mt-3"><p class="text-base mb-0 text-white-100">iOS</p></div></div></a><a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition"><div class="col-span-1 sdkcard flex flex-col items-center justify-center py-6 rounded-md"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><g clip-path="url(#clip0_49_15)"><mask id="mask0_49_15" style="mask-type:alpha" width="32" height="32" x="0" y="0" maskUnits="userSpaceOnUse"><path fill="#C4C4C4" d="M0 0H32V32H0z"></path></mask><g mask="url(#mask0_49_15)"><path fill="#fff" fill-rule="evenodd" d="M22.756 2.002a5.06 5.06 0 00-1.679.254c-1.138.36-2.33 1.06-3.554 2.028-.48.38-.964.814-1.45 1.275a21.78 21.78 0 00-1.417-1.243c-1.223-.968-2.412-1.669-3.548-2.027-1.135-.358-2.265-.37-3.192.152-.928.522-1.483 1.48-1.732 2.616-.249 1.136-.222 2.49.028 4.005.087.526.211 1.078.352 1.64-.53.157-1.045.321-1.522.503-1.441.548-2.633 1.203-3.501 1.983-.869.78-1.43 1.727-1.43 2.766 0 1.04.561 1.985 1.43 2.765.868.78 2.06 1.437 3.5 1.985.511.194 1.064.369 1.635.534a21.293 21.293 0 00-.485 2.158c-.25 1.516-.277 2.87-.027 4.01.25 1.138.804 2.1 1.737 2.625.932.524 2.067.511 3.205.152 1.138-.36 2.329-1.058 3.553-2.027.475-.376.955-.805 1.437-1.261.483.458.966.89 1.443 1.268 1.223.968 2.414 1.667 3.549 2.025 1.135.359 2.265.37 3.193-.152.928-.521 1.481-1.479 1.73-2.615.25-1.137.222-2.489-.028-4.004a21.261 21.261 0 00-.487-2.164c.59-.17 1.16-.35 1.686-.55 1.44-.547 2.633-1.204 3.501-1.984.868-.78 1.429-1.725 1.429-2.765 0-1.039-.56-1.986-1.429-2.766-.868-.78-2.06-1.435-3.501-1.983a21.221 21.221 0 00-1.546-.51c.143-.565.269-1.121.356-1.65.25-1.517.277-2.872.027-4.01-.25-1.14-.806-2.101-1.738-2.626a3.297 3.297 0 00-1.525-.407zm-.064 1.378c.34.009.63.088.879.227.496.28.863.823 1.059 1.717.196.894.189 2.101-.042 3.502-.08.48-.194.988-.325 1.509a33.077 33.077 0 00-4.642-.726 32.811 32.811 0 00-2.554-3.058c.456-.435.91-.84 1.354-1.192 1.13-.895 2.2-1.504 3.093-1.786.447-.141.838-.202 1.178-.193zm-13.196.004c.343-.01.734.052 1.182.193.896.283 1.968.892 3.1 1.788.433.344.877.742 1.325 1.166a32.89 32.89 0 00-2.574 3.085 32.95 32.95 0 00-4.622.73 19.09 19.09 0 01-.323-1.5c-.231-1.402-.237-2.61-.04-3.506.196-.897.566-1.444 1.067-1.726.25-.14.543-.22.885-.23zm6.6 4.141c.566.6 1.133 1.257 1.695 1.964a41.343 41.343 0 00-1.68-.036c-.578 0-1.148.014-1.71.037a30.694 30.694 0 011.695-1.965zm.016 3.295c.945 0 1.867.038 2.764.102a38.35 38.35 0 011.794 2.746c.504.851.961 1.701 1.377 2.54-.42.85-.885 1.712-1.396 2.575-.45.76-.921 1.48-1.4 2.176a38.738 38.738 0 01-6.351-.006 38.507 38.507 0 01-1.376-2.144c-.51-.86-.973-1.72-1.392-2.569a38.24 38.24 0 011.399-2.584 38.315 38.315 0 011.786-2.731 38.792 38.792 0 012.795-.105zm4.554.271c1.146.14 2.222.333 3.224.565-.297.948-.663 1.94-1.107 2.962a40.554 40.554 0 00-.909-1.627 40.622 40.622 0 00-1.208-1.9zm-9.183.01a40.537 40.537 0 00-1.181 1.864c-.327.55-.631 1.1-.922 1.647a29.949 29.949 0 01-1.1-2.944 30.605 30.605 0 013.203-.566zm13.782.914c.494.146.97.297 1.406.463 1.328.505 2.38 1.103 3.06 1.715.681.612.976 1.196.976 1.761 0 .566-.295 1.15-.976 1.762-.68.611-1.732 1.21-3.06 1.715-.485.184-1.018.351-1.572.51a33.01 33.01 0 00-1.501-3.7 32.248 32.248 0 001.668-4.226zm-18.33.007a32.19 32.19 0 001.646 4.182 32.998 32.998 0 00-1.509 3.723 19.703 19.703 0 01-1.52-.496c-1.328-.506-2.378-1.104-3.06-1.715-.68-.612-.976-1.196-.976-1.762 0-.566.296-1.149.977-1.76.68-.613 1.731-1.21 3.06-1.716.43-.163.897-.313 1.382-.456zm9.177.822c-1.912 0-3.477 1.524-3.477 3.386 0 1.86 1.565 3.384 3.477 3.384s3.477-1.523 3.477-3.384c0-1.862-1.565-3.386-3.477-3.386zm-6.716 4.987c.292.55.597 1.102.925 1.655.257.433.519.854.785 1.268a30.48 30.48 0 01-2.655-.475c.265-.79.582-1.61.945-2.448zm13.405 0c.364.84.681 1.661.948 2.454-.837.189-1.727.348-2.664.473.27-.419.536-.845.796-1.284.326-.549.629-1.097.92-1.643zM8.05 21.594c1.258.29 2.622.513 4.069.658a33.576 33.576 0 002.984 3.65c-.453.43-.902.833-1.34 1.18-1.131.896-2.203 1.504-3.096 1.785-.893.282-1.56.245-2.056-.034-.497-.279-.862-.822-1.058-1.716-.196-.894-.19-2.1.04-3.502.106-.635.262-1.315.457-2.021zm16.1.005c.197.71.354 1.393.46 2.032.23 1.402.237 2.61.04 3.507-.196.896-.563 1.445-1.064 1.727-.502.282-1.174.318-2.07.036-.896-.283-1.968-.892-3.1-1.788-.442-.35-.893-.757-1.35-1.19a33.498 33.498 0 003.005-3.668 32.785 32.785 0 004.08-.656zm-10.217.792a40.94 40.94 0 002.179.064c.716 0 1.416-.024 2.108-.06a31.347 31.347 0 01-2.145 2.532 31.47 31.47 0 01-2.142-2.536z" clip-rule="evenodd"></path></g></g><defs><clipPath id="clip0_49_15"><path fill="#fff" d="M0 0H32V32H0z"></path></clipPath></defs></svg><div class="mt-3"><p class="text-base mb-0 text-white-100">React</p></div></div></a><a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk"><div class="col-span-1 sdkcard flex flex-col items-center justify-center py-6 rounded-md"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><g clip-path="url(#clip0_47_8)"><g clip-path="url(#clip1_47_8)"><path fill="#fff" d="M2 2H30V30H2z"></path><path fill="#161616" d="M17.606 15.397h-2.719v7.22c0 1.787-.613 2.286-1.679 2.286-.5 0-.95-.085-1.3-.206l-.283 2.114c.5.172 1.266.275 1.866.275 2.448 0 4.115-1.15 4.115-4.45v-7.24zm5.928-.272c-2.632 0-4.297 1.495-4.297 3.471 0 1.702 1.283 2.768 3.148 3.455 1.349.481 1.882.91 1.882 1.615 0 .774-.616 1.272-1.782 1.272-1.083 0-2.066-.361-2.732-.722l-.516 2.147c.633.362 1.816.723 3.098.723 3.081 0 4.513-1.65 4.513-3.592 0-1.65-.916-2.715-2.897-3.472-1.466-.584-2.082-.91-2.082-1.65 0-.584.533-1.116 1.632-1.116 1.082 0 1.826.364 2.26.587l.65-2.174c-.68-.299-1.595-.544-2.877-.544z"></path></g></g><defs><clipPath id="clip0_47_8"><path fill="#fff" d="M0 0H32V32H0z"></path></clipPath><clipPath id="clip1_47_8"><rect width="28" height="28" x="2" y="2" fill="#fff" rx="2"></rect></clipPath></defs></svg><div class="mt-3"><p class="text-base mb-0 text-white-100">Javascript</p></div></div></a></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="feature-map-comparison"><strong>Feature Map Comparison</strong><a href="https://docs.videosdk.live/tutorials/twilio-to-videosdk-migration-guide#feature-map-comparison" class="hash-link" aria-label="Direct link to feature-map-comparison" title="Direct link to feature-map-comparison">​</a></h3>
<p>VideoSDK not only matches but surpasses Twilio Video with additional features. This migration is not just a transfer; It's an upgrade to a world of enhanced possibilities. Elevate your applications effortlessly!</p>
<div class="theme-admonition theme-admonition-info admonition_LMjb alert alert--info"><div class="admonitionHeading_GGQ4"><span class="admonitionIcon_ifdW"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_pGk6"><p>Select the appropriate icon ✅ to access the documentation, denoted by an (a), applicable across all platforms.</p></div></div>
<!-- -->
<div id="tailwind"><div class="max-w-screen-lg mt-10 mb-8"><table class="min-w-full"><thead class="bg-transparent"><tr class="bg-transparent"><th></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">Twilio JS</span></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">Twilio iOS</span></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">Twilio Android</span></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">Twilio agnostic</span></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">VideoSDK JS</span></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">VideoSDK Android</span></th><th class="vertical-cell p-2 py-3"><span class=" inline-flex m-0 p-0 text-base text-white">VideoSDK iOS</span></th></tr></thead><tbody><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Auth</td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/tutorials/user-identity-access-tokens" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/authentication-and-token" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/server-setup" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Install</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#1-get-the-programmable-video-javascript-sdk" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#1-get-the-programmable-video-ios-sdk" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#1-get-the-programmable-video-android-sdk" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/javascript-sdk" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/integrate-sdk" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/ios-sdk" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Join</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#connect-to-a-room" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#connect-to-a-room" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#connect-to-a-room" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/setup-call/join-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/setup-call/join-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/setup-call/join-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Start audio / speaker</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/api/sdk-reference/initMeeting#micenabled" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/api/sdk-reference/initMeeting#micenabled" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/api/sdk-reference/initMeeting#micenabled" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Start Video</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/api/sdk-reference/initMeeting#webcamenabled" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/api/sdk-reference/initMeeting#webcamenabled" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/api/sdk-reference/initMeeting#webcamenabled" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Mute mic</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#mute-your-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Unmute mic</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#unmute-your-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Enable Webcam</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#mute-your-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/on-off-camera" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/on-off-camera" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/on-off-camera" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Disable webcam</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#unmute-your-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#set-up-local-media" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/on-off-camera" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/on-off-camera" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/on-off-camera" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Render Video</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#display-a-remote-participants-video" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#working-with-remote-participants" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#working-with-remote-participants" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/render-media/display-audio-video" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/render-media/display-video/render-participant" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/render-media/display-video" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Screen Share</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/screen-capture-chrome" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-v4-screen-capture" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-screen-capture" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/screen-share" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/screen-share" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/native-ios-screen-share" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Microphone Devices</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://github.com/twilio/video-quickstart-js/blob/master/examples/mediadevices/src/helpers.js" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-v5-configuring-audio-video-inputs-and-outputs" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-configuring-audio-video-inputs-and-outputs" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/change-input-device#changing-audio-input-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/change-input-output-device#changing-inputoutput-audio-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/mute-unmute-mic" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Speaker Devices</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://github.com/twilio/video-quickstart-js/blob/master/examples/mediadevices/src/helpers.js" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-v5-configuring-audio-video-inputs-and-outputs" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-configuring-audio-video-inputs-and-outputs" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/change-audio-ouptut-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/change-input-output-device#changing-inputoutput-audio-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/change-input-output-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Video Devices</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://github.com/twilio/video-quickstart-js/blob/master/examples/mediadevices/src/helpers.js" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-v5-configuring-audio-video-inputs-and-outputs" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-configuring-audio-video-inputs-and-outputs" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/handling-media/change-input-device#changing-camera-input-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/handling-media/change-input-output-device#changing-camera-input-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/handling-media/change-input-output-device" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Leave / End</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/javascript-getting-started#disconnect-from-a-room" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#disconnect-from-a-room" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#disconnect-from-a-room" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/setup-call/leave-end-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/setup-call/leave-end-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/setup-call/leave-end-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Recording</td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/tutorials/understanding-video-recordings-and-compositions" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/recording-and-live-streaming/record-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/recording-and-live-streaming/record-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/recording/record-meeting" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">RTMP</td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/recording-and-live-streaming/rtmp-livestream" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/recording-and-live-streaming/rtmp-livestream" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/live-streaming/rtmp-livestream" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">HLS</td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/interactive-live-streaming/integrate-hls/overview" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/interactive-live-streaming/integrate-hls/overview" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/live-streaming/interactive-livestream" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Noise Cancellation</td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/noise-cancellation" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/api/sdk-reference/custom-track/custom-audio-track" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/api/sdk-reference/custom-tracks#custom-audio-track---android" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/api/sdk-reference/custom-tracks#custom-audio-track" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Reconnections</td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/reconnection-states-and-events" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/ios-getting-started#room-reconnection" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/android-getting-started#room-reconnection" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/api/sdk-reference/meeting-class/events#meeting-state-changed" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/api/sdk-reference/meeting-class/meeting-event-listener-class#onmeetingstatechanged" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/api/sdk-reference/meeting-class/events#onmeetingstatechanged" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Picture-in-picture</td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://github.com/twilio/twilio-video-app-ios" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/render-media/picture-in-picture" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><div class="rounded-full bg-red-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><path fill="#fff" d="M13.59 12.076l-1.514 1.514-3.281-3.281-3.281 3.281L4 12.076l3.28-3.281L4 5.515 5.514 4l3.28 3.281 3.282-3.28 1.513 1.513-3.28 3.28 3.28 3.282z"></path></svg></div></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Quality of Service</td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/using-network-quality-api" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/iavascript/guide/video-and-audio-calling-api-sdk/render-media/understanding-call-quality" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/render-media/understanding-call-quality" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/ios/guide/video-and-audio-calling-api-sdk/render-media/understanding-call-quality" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">REST APIs</td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/api" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/api-reference/realtime-communication/intro" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/api-reference/realtime-communication/intro" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/api-reference/realtime-communication/intro" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr><tr class="bg-transparent"><td class="px-2 py-2 whitespace-nowrap">Webhooks</td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><span class="inline-flex">(a)</span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://www.twilio.com/docs/video/api/status-callbacks" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/api-reference/realtime-communication/user-webhooks" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/api-reference/realtime-communication/user-webhooks" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td><td class="p-2"><div class="flex flex-col items-center justify-center"><a href="https://docs.videosdk.live/api-reference/realtime-communication/user-webhooks" target="_blank" rel="noopener noreferrer"><div class="rounded-full bg-green-500 flex items-center p-0.5"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 18 18"><g clip-path="url(#clip0_29_6)"><path fill="#fff" d="M6.96 13.59L2.5 9.13l1.34-1.34 3.12 3.12L13.87 4l1.34 1.34-8.25 8.25z"></path></g><defs><clipPath id="clip0_29_6"><path fill="#fff" d="M0 0H12.711V9.59H0z" transform="translate(2.5 4)"></path></clipPath></defs></svg></div></a><span class="inline-flex"></span></div></td></tr></tbody></table></div></div>
<p>We are excited to welcome you to the VideoSDK community and look forward to empowering your projects with the future of video communication.</p>
<!-- -->
<div id="tailwind"><div class="mt-12"><p class="mt-7 flex flex-col md:flex-row text-lg gap-5 justify-center items-center">Got a Question?<!-- --> <a target="_blank" href="https://www.videosdk.live/alternative/twilio-vs-videosdk#talk-to-expert" class="px-2 py-1 gap-3 rounded-lg bg-gray-750 border-class flex justify-center max-w-max text-white-100">Talk to our Migration Expert</a></p></div></div>]]></content:encoded>
            <category>Migration Guide</category>
            <category>Twilio</category>
            <category>Overview</category>
        </item>
        <item>
            <title><![CDATA[iOS - Migration Guide From Twilio Video to Video SDK]]></title>
            <link>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk</link>
            <guid>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk</guid>
            <pubDate>Thu, 07 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the seamless transition from Twilio to Video SDK for iOS with our comprehensive migration guide. Elevate your video communication with expert insights and step-by-step instructions.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="overview">Overview<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2>
<p>This migration guide provides a seamless transition from Twilio to VideoSDK, offering a simplified and intuitive comparison of key elements. Whether you're already familiar with Twilio or new to both platforms, this guide ensures a smooth migration process.</p>
<p>We're here to help you switch from Twilio to VideoSDK. We'll use the Twilio Quickstart sample app as a starting point. You can find the code for the sample app here: <a href="https://github.com/twilio/video-quickstart-ios" target="_blank" rel="noopener noreferrer">https://github.com/twilio/video-quickstart-ios</a></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="concept">Concept<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#concept" class="hash-link" aria-label="Direct link to Concept" title="Direct link to Concept">​</a></h2>
<ol>
<li><strong>Meeting / Room:</strong>
<ul>
<li>This is like a virtual place where people can have real-time conversations using voice, video, and screen sharing.</li>
<li>Think of it as a virtual room where participants interact.</li>
<li>Each meeting or room has a unique ID (meetingId or roomId).</li>
</ul>
</li>
<li><strong>Participant:</strong>
<ul>
<li>Both VideoSDK and Twilio Video includes the concepts of <strong>Participant.</strong></li>
<li>There are two types:<!-- -->
<ul>
<li><strong>Local Participant:</strong> This is you on your device. You control your own audio and video.</li>
<li><strong>Remote Participant:</strong> This is someone else in the meeting. They receive your audio and video and can send their own.</li>
</ul>
</li>
</ul>
</li>
<li><strong>MediaStream &amp; Track:</strong>
<ul>
<li><strong>MediaStream:</strong> Think of it as a bundle of audio and video tracks that are shared in real-time between participants.</li>
<li><strong>Track:</strong> This is like a continuous flow of audio or video. For example, your video feed from the camera is a video track, and the audio from the microphone is an audio track.</li>
</ul>
</li>
<li><strong>Session:</strong>
<ul>
<li>A session is like a specific instance of an ongoing meeting or room.</li>
<li>Imagine a meeting happening right now as a session.</li>
<li>Each session has its own ID (sessionId).</li>
</ul>
</li>
</ol>
<p>If you want to learn about this concept in depth you can refer this guide <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/concept-and-architecture" target="_blank" rel="noopener noreferrer">Concept and Architecture</a></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="videosdk-setup">VideoSDK Setup<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#videosdk-setup" class="hash-link" aria-label="Direct link to VideoSDK Setup" title="Direct link to VideoSDK Setup">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="api-key">API Key<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#api-key" class="hash-link" aria-label="Direct link to API Key" title="Direct link to API Key">​</a></h3>
<p>In Twilio you have to create API key manually(using CLI or from Dashboard), in VideoSDK the default API key is automatically created in <a href="https://app.videosdk.live/" target="_blank" rel="noopener noreferrer">VideoSDK dashboard</a>.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="token">Token<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#token" class="hash-link" aria-label="Direct link to Token" title="Direct link to Token">​</a></h3>
<p>In Twilio, you can generate a token using CLI or the Twilio helper library in the backend environment.</p>
<p>For VideoSDK, there are two ways to generate a token. You can <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token#1-generating-token-from-dashboard" target="_blank" rel="noopener noreferrer">generate it from the VideoSDK Dashboard</a> or <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token#2-generating-token-in-your-backend" target="_blank" rel="noopener noreferrer">in your backend</a>.</p>
<p>In Twilio, you need to provide a different token for each participant, which can be complex during development. In VideoSDK, it is optional to specify the same token for different participants. You can also restrict a specific token for a specific meetingID or participantID.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="room-creation">Room Creation<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#room-creation" class="hash-link" aria-label="Direct link to Room Creation" title="Direct link to Room Creation">​</a></h2>
<p>Before integration, create a room using the <a href="https://docs.videosdk.live/api-reference/realtime-communication/create-room" target="_blank" rel="noopener noreferrer">REST API Rooms resource</a>. Refer to the docs for details.</p>
<div class="language-jsx codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-jsx codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">cURL </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">XPOST</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">https</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">api</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">v2</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">rooms</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> \\</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Authorization: $VIDEOSDK_TOKEN'</span><span class="token plain"> \\</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Content-Type: application/json'</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-1--integrate-video-sdk">Step 1 : Integrate Video SDK<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#step-1--integrate-video-sdk" class="hash-link" aria-label="Direct link to Step 1 : Integrate Video SDK" title="Direct link to Step 1 : Integrate Video SDK">​</a></h2>
<p>There is two ways to implement the VideoSDK dependency into your application:</p>
<ol>
<li>
<p><strong>SPM (Swift Package Manager):</strong></p>
<ul>
<li>Select <strong>File</strong> → <strong>Add Package</strong> Dependencies and search below url and press <strong>Add Package</strong> button.</li>
</ul>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token literal-property property">https</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">github</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">com</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">videosdk</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">videosdk</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">rtc</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">ios</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">spm</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p><strong>Cocoa pods:</strong></p>
<ul>
<li>You can add the dependency in the podfile.</li>
</ul>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">use_frameworks</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">target </span><span class="token string" style="color:rgb(206, 145, 120)">'VideoSDK_Example'</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">do</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token comment" style="color:rgb(106, 153, 85)">// write below line for adding the dependency of VideoSDK</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	pod </span><span class="token string" style="color:rgb(206, 145, 120)">'VideoSDKRTC'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter">git</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'https://github.com/videosdk-live/videosdk-rtc-ios-sdk.git'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">end</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>run <code>pod install</code> command in terminal at location of the application to install the dependency in the application.</p>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-2--connect-to-a-room">Step 2 : Connect to a room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#step-2--connect-to-a-room" class="hash-link" aria-label="Direct link to Step 2 : Connect to a room" title="Direct link to Step 2 : Connect to a room">​</a></h2>
<ul>
<li>In Twilio, You can initiate a connection to a video room using&nbsp;<code>TwilioVideoSDK.connect()</code>. This method sets up a connection by specifying the connection options and delegate of the meeting.</li>
<li>In VideoSDK, the process begins with setting up the SDK by initializing it and providing authentication through a token. After that you can initialize the meeting with required params such as&nbsp;<code>meetingId</code>, <code>participantId</code>, <code>participantName</code>,&nbsp; <code>micEnabled</code>,&nbsp; <code>webcamEnabled</code> and&nbsp;more. To join the meeting/room, you can simply call the&nbsp;<code>meeting.join()</code>&nbsp;method.</li>
</ul>
<!-- -->
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">@IBAction func </span><span class="token function" style="color:rgb(220, 220, 170)">createARoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">sender</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> AnyObject</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> connectOptions </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">ConnectOptions</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">token</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> accessToken</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">builder</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">in</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        builder</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">roomName </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"my-room"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    room </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> TwilioVideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">connect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">options</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> connectOptions</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">delegate</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: RoomDelegate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">roomDidConnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Did connect to Room"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> localParticipant </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Local identity \(localParticipant.identity)"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// Set the delegate of the local particiant to receive callbacks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">delegate </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">var</span><span class="token plain"> </span><span class="token literal-property property">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">override func </span><span class="token function" style="color:rgb(220, 220, 170)">viewDidLoad</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">super</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">viewDidLoad</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// Configure authentication token got earlier</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">config</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">token</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(100, 102, 149)">VIDEOSDK_ACCESS_TOKEN</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// create a new meeting instance</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    meeting </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">initMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">meetingId</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> meetingId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// required</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">participantName</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> participantName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// required</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">micEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">flag</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">to</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">enable</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">mic</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// optional, default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">webcamEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">flag</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">to</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">enalbe</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">camera</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// optional, default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token comment" style="color:rgb(106, 153, 85)">// join</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">join</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-3--handle-connected-participants">Step 3 : Handle Connected Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#step-3--handle-connected-participants" class="hash-link" aria-label="Direct link to Step 3 : Handle Connected Participants" title="Direct link to Step 3 : Handle Connected Participants">​</a></h2>
<ul>
<li>In both Twilio and VideoSDK, you can utilise event listeners attached to the room or meeting object to capture crucial moments during a video conference. This listener include the meeting being connected or disconnected and participants joining or leaving the meeting events.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: RoomDelegate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">roomDidConnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">participantDidConnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">participantDidDisconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">roomDidDisconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">error</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Error</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">?</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: - MeetingEventListener [RoomDelegate]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">extension YourViewController</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> MeetingEventListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// [roomDidConnect]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// [roomDidDisconnect]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// [participantDidConnect]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// [participantDidDisconnect]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h4 class="anchor anchorWithHideOnScrollNavbar_emO8" id="mapping-twilios-events-to-videosdk">Mapping Twilio’s events to VideoSDK<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#mapping-twilios-events-to-videosdk" class="hash-link" aria-label="Direct link to Mapping Twilio’s events to VideoSDK" title="Direct link to Mapping Twilio’s events to VideoSDK">​</a></h4>
<p>Below is a list of all Twilio events used in this demo and VideoSDK’s equivalents.</p>
<table><thead><tr><th>Twilio Events</th><th>VideoSDK Events</th></tr></thead><tbody><tr><td>roomDidConnect()</td><td><a href="https://docs.videosdk.live/ios/api/sdk-reference/meeting-class/events#onmeetingjoined" target="_blank" rel="noopener noreferrer">onMeetingJoined()</a></td></tr><tr><td>roomDidDisconnect()</td><td><a href="https://docs.videosdk.live/ios/api/sdk-reference/meeting-class/events#onmeetingleft" target="_blank" rel="noopener noreferrer">onMeetingLeft()</a></td></tr><tr><td>participantDidConnect()</td><td><a href="https://docs.videosdk.live/ios/api/sdk-reference/meeting-class/events#onparticipantjoined" target="_blank" rel="noopener noreferrer">onParticipantJoined()</a></td></tr><tr><td>participantDidDisconnect</td><td><a href="https://docs.videosdk.live/ios/api/sdk-reference/meeting-class/events#onparticipantleft" target="_blank" rel="noopener noreferrer">onParticipantLeft()</a></td></tr></tbody></table>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-4--set-up-local-media">Step 4 : Set up local media<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#step-4--set-up-local-media" class="hash-link" aria-label="Direct link to Step 4 : Set up local media" title="Direct link to Step 4 : Set up local media">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="capture-local-media">Capture local media<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#capture-local-media" class="hash-link" aria-label="Direct link to Capture local media" title="Direct link to Capture local media">​</a></h3>
<ul>
<li>In Twilio, to capture local participant's audio data, you need to provide track for audio and video while connecting the meeting.</li>
<li>In VideoSDK, capturing tracks for a local participant is more straightforward. The iOS SDK automatically captures both audio and video when you set&nbsp;<code>micEnabled</code>&nbsp;and&nbsp;<code>webCamEnabled</code>to&nbsp;<code>true</code>&nbsp;in the&nbsp;<code>initMeeting()</code>&nbsp;method. There's no need for explicit track creation; the SDK handles it automatically based on the provided configuration.</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="render-local-participants-video">Render local participant’s video<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#render-local-participants-video" class="hash-link" aria-label="Direct link to Render local participant’s video" title="Direct link to Render local participant’s video">​</a></h3>
<ul>
<li>Twilio provides a&nbsp;<code>LocalVideoTrack</code>&nbsp;component to display participants' video feeds.<!-- -->
<ul>
<li>To display the video from the local participant, you have to link the&nbsp;<code>LocalVideoTrack</code>&nbsp;to the&nbsp;<code>TVIVideoView</code>&nbsp;using the&nbsp;<code>addRenderer</code>&nbsp;method:&nbsp;<code>videoTrack.addRenderer(renderer)</code>.</li>
</ul>
</li>
<li>Similarly, VideoSDK offers a&nbsp;VideoView&nbsp;component to display participants' video stream.<!-- -->
<ul>
<li>To display the local participant's video, you have to add the track to the&nbsp;<code>RTCMTLVideoView</code>&nbsp;using the&nbsp;add&nbsp;method:&nbsp;<code>videotrack.add(videoView)</code>.</li>
<li>When you want to stop displaying the local participant's video in the&nbsp;<code>RTCMTLVideoView</code>, you can remove the track using&nbsp;<code>videotrack.remove(videoView)</code>&nbsp;method.</li>
</ul>
</li>
<li>In Twilio ,&nbsp;<code>LocalVideoTrack</code>&nbsp;is used to render a local participant’s video. However, VideoSDK have events&nbsp;<code>onStreamEnabled</code>&nbsp;and&nbsp;<code>onStreamDisabled</code>&nbsp;in&nbsp;<code>ParticipantEventListener</code>&nbsp;from which you can get track of audio, video.<!-- -->
<ul>
<li>onStreamEnabled()&nbsp;-&nbsp;<code>onStreamEnabled()</code>&nbsp;is a callback which gets triggered whenever a participant's video, audio or screen share stream is enabled.</li>
<li>onStreamDisabled()&nbsp;-&nbsp;<code>onStreamDisabled()</code>&nbsp;is a callback which gets triggered whenever a participant's video, audio or screen share stream is disabled.</li>
</ul>
</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// Use CameraSource to produce video from the device's front camera.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> camera </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">CameraSource</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">delegate</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> videoTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">LocalVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">source</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> camera</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// VideoView is a VideoRenderer and can be added to any VideoTrack.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> renderer </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">VideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">frame</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> view</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">bounds</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> camera </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">TVICameraCapturer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">source</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">frontCamera</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> videoTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">TVILocalVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">capturer</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> camera</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// TVIVideoView is a TVIVideoRenderer and can be added to any TVIVideoTrack.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> renderer </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">TVIVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">frame</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> view</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">bounds</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// Add renderer to the video track</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    videoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addRenderer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">renderer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localVideoTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> videoTrack</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">camera </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> camera</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addSubview</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">renderer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Couldn't create CameraCapturer or LocalVideoTrack"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: - ParticipantEventListener</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">extension YourViewController</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> ParticipantEventListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">/// Participant has enabled mic, video or screenshare</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamEnabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> MediaStream</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> forParticipant participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">state</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">value</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token parameter">video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token comment" style="color:rgb(106, 153, 85)">// show stream in cell</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> cell </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">cellForParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                cell</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">updateView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">forStream</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">/// Participant has disabled mic, video or screenshare</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamDisabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> MediaStream</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> forParticipant participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		</span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">state</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">value</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token parameter">video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	        </span><span class="token comment" style="color:rgb(106, 153, 85)">// hide stream in cell</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> cell </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">cellForParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	            cell</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">updateView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">forStream</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-5--working-with-remote-participants">Step 5 : Working with Remote Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#step-5--working-with-remote-participants" class="hash-link" aria-label="Direct link to Step 5 : Working with Remote Participants" title="Direct link to Step 5 : Working with Remote Participants">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="get-connected-participants">Get Connected Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#get-connected-participants" class="hash-link" aria-label="Direct link to Get Connected Participants" title="Direct link to Get Connected Participants">​</a></h3>
<ul>
<li>In Twilio, you can get the all the connected remote participants through <code>remoteParticipants</code> property of <code>Room</code> class.</li>
<li>Similarly, In VideoSDK you can get all the connected participant using &nbsp;<code>participants</code>&nbsp;property of&nbsp;<code>Meeting</code>&nbsp;class.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: RoomDelegate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">roomDidConnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">//...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// Connected participants already in the room</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Number of connected Participants \(room.remoteParticipants.count)"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// Set the delegate of the remote participants to receive callbacks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">for</span><span class="token plain"> remoteParticipant </span><span class="token keyword" style="color:rgb(86, 156, 214)">in</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">remoteParticipants </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        remoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">delegate </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// Get the first participant from the meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> participant </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">first</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"(participant.displayName) is in the room."</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="display-a-remote-participants-video">Display a Remote Participant's Video<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#display-a-remote-participants-video" class="hash-link" aria-label="Direct link to Display a Remote Participant's Video" title="Direct link to Display a Remote Participant's Video">​</a></h3>
<ul>
<li>In Twilio, you receive events&nbsp;<code>didSubscribeToVideoTrack</code> whenever a remote participant enabled their webcam. These events notify you when a participant starts sharing their video.</li>
<li>Similarly, in VideoSDK, you have&nbsp;<code>onStreamEnabled</code>&nbsp;and&nbsp;<code>onStreamDisabled</code>&nbsp;events. These events serve a similar purpose for both local and remote participants, triggered whenever participant enabled or disabled their webcam respectively.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: RemoteParticipantDelegate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">/*</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)"> * In the Participant Delegate, we can respond when the Participant adds a Video</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)"> * Track by rendering it on screen.</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)"> */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">didSubscribeToVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">videoTrack</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteVideoTrack</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">                              </span><span class="token parameter literal-property property">publication</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteVideoTrackPublication</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">                              </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Participant \(participant.identity) added a video track."</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> remoteView </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> VideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">init</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">frame</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> self</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token parameter">view</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token parameter">bounds</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">                                       </span><span class="token parameter literal-property property">delegate</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        videoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addRenderer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">remoteView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addSubview</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">remoteView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">remoteView </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> remoteView</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: VideoViewDelegate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// Lastly, we can subscribe to important events on the VideoView</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">videoViewDimensionsDidChange</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">view</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> VideoView</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">dimensions</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> CMVideoDimensions</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"The dimensions of the video track changed to: \(dimensions.width)x\(dimensions.height)"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setNeedsLayout</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: - MeetingEventListener</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">extension YourViewController</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> MeetingEventListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token comment" style="color:rgb(106, 153, 85)">// add listener</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">     </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: - ParticipantEventListener</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">extension YourViewController</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> ParticipantEventListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">/// Participant has enabled mic, video or screenshare</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamEnabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> MediaStream</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> forParticipant participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">state</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">value</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token parameter">video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token comment" style="color:rgb(106, 153, 85)">// show stream in cell</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> cell </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">cellForParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                cell</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">updateView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">forStream</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> cell </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">cellForParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                cell</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">updateView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">forStream</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">/// Participant has disabled mic, video or screenshare</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamDisabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> MediaStream</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> forParticipant participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">state</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">value</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token parameter">video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	          </span><span class="token comment" style="color:rgb(106, 153, 85)">// hide stream in cell</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	          </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> cell </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">cellForParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	              cell</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">updateView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">forStream</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> cell </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> self</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">cellForParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">                cell</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">updateView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">forStream</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="disconnect-from-a-room">Disconnect from a Room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#disconnect-from-a-room" class="hash-link" aria-label="Direct link to Disconnect from a Room" title="Direct link to Disconnect from a Room">​</a></h3>
<ul>
<li>In Twilio, you have the ability to disconnect from a room in which you are currently participating. Other Participants will receive a&nbsp;<code>participantDisconnected</code>&nbsp;event.</li>
<li>In VideoSDK, you can also disconnect from a room you are currently participating in. Other Participants will receive a&nbsp;<code>onParticipantLeft</code>&nbsp;event, while the local participant will receive a&nbsp;<code>onMeetingLeft</code>&nbsp;event.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// To disconnect from a Room, we call:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">room</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">disconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// This results in a callback to RoomDelegate#roomDidDisconnect(room: Room, error: Error?)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: RoomDelegate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">func </span><span class="token function" style="color:rgb(220, 220, 170)">roomDidDisconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">error</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Error</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">?</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">print</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"Disconnected from room \(room.name)"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// MARK: - MeetingEventListener [RoomDelegate]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">extension YourViewController</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> MeetingEventListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// event after meeting?.end()</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token comment" style="color:rgb(106, 153, 85)">// event after meeting?.leave()</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    func </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">_ participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To leave the meeting without removing all the participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// you need to call leave() of the Meeting class.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">leave</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To leave the meeting by removing all the participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// you need to call end() of the Meeting class.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">end</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="conclusion">Conclusion<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>As you conclude this migration journey, you've successfully adapted your application from Twilio to VideoSDK.</p>
<p>Feel free to explore the developed project's codebase for a hands-on understanding of VideoSDK integration. As you transition, VideoSDK empowers your application with robust real-time communication features, providing a foundation for future scalability and innovation.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="contact-us">Contact Us<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-ios-sdk#contact-us" class="hash-link" aria-label="Direct link to Contact Us" title="Direct link to Contact Us">​</a></h2>
<p>For any further assistance, questions, or community engagement, we welcome you to join our <a href="https://discord.com/invite/Gpmj6eCq5u" target="_blank" rel="noopener noreferrer">Discord channel</a>. Connect with fellow developers, share insights, and stay updated on the latest developments.</p>
<p>If you require developer support or need personalized assistance, you can schedule a session with our team through our <a href="https://bookings.videosdk.live/#/customer/discovery" target="_blank" rel="noopener noreferrer">Developer Support portal</a>. We are here to ensure a smooth integration and address any queries you may have. Your success with VideoSDK is our priority.</p>]]></content:encoded>
            <category>Migration Guide</category>
            <category>Twilio</category>
            <category>iOS</category>
        </item>
        <item>
            <title><![CDATA[JavaScript - Migration Guide From Twilio Video to Video SDK]]></title>
            <link>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk</link>
            <guid>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk</guid>
            <pubDate>Thu, 07 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the seamless transition from Twilio to Video SDK for javascript with our comprehensive migration guide. Elevate your video communication with expert insights and step-by-step instructions.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="overview">Overview<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2>
<p><strong>Welcome to your smooth transition to VideoSDK with JavaScript!</strong></p>
<p>This comprehensive guide empowers you to seamlessly migrate from Twilio to VideoSDK in Javascript. We understand that adapting to new technology can be challenging, which is why we've designed this guide to be clear, concise, and informative.</p>
<p>We've created a straightforward comparison of Twilio and VideoSDK elements, making it easy to identify key differences and understand their corresponding counterparts. Whether you're a seasoned Twilio user or new to both platforms, this guide caters to your level of expertise, ensuring a smooth learning curve.</p>
<p>This migration guide provides a seamless transition from Twilio to VideoSDK, offering a simplified and intuitive comparison of key elements. Whether you're already familiar with Twilio or new to both platforms, this guide ensures a smooth migration process.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="getting-started">Getting Started<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started">​</a></h2>
<p>To facilitate the transition, we'll leverage the familiar Twilio Quickstart sample app as a starting point. You can find the code for the app readily available here:<a href="https://github.com/twilio/video-quickstart-js" target="_blank" rel="noopener noreferrer">https://github.com/twilio/video-quickstart-js</a></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="concept">Concept<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#concept" class="hash-link" aria-label="Direct link to Concept" title="Direct link to Concept">​</a></h2>
<ol>
<li><strong>Meeting / Room:</strong>
<ul>
<li>This is like a virtual place where people can have real-time conversations using voice, video, and screen sharing.</li>
<li>Think of it as a virtual room where participants interact.</li>
<li>Each meeting or room has a unique ID (meetingId or roomId).</li>
</ul>
</li>
<li><strong>Participant:</strong>
<ul>
<li>Both VideoSDK and Twilio Video includes the concepts of <strong>Participant.</strong></li>
<li>There are two types:<!-- -->
<ul>
<li><strong>Local Participant:</strong> This is you on your device. You control your own audio and video.</li>
<li><strong>Remote Participant:</strong> This is someone else in the meeting. They receive your audio and video and can send their own.</li>
</ul>
</li>
</ul>
</li>
<li><strong>MediaStream &amp; Track:</strong>
<ul>
<li><strong>MediaStream:</strong> Think of it as a bundle of audio and video tracks that are shared in real-time between participants.</li>
<li><strong>Track:</strong> This is like a continuous flow of audio or video. For example, your video feed from the camera is a video track, and the audio from the microphone is an audio track.</li>
</ul>
</li>
<li><strong>Session:</strong>
<ul>
<li>A session is like a specific instance of an ongoing meeting or room.</li>
<li>Imagine a meeting happening right now as a session.</li>
<li>Each session has its own ID (sessionId).</li>
</ul>
</li>
</ol>
<p>If you want to learn about this concept in depth you can refer this guide <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/concept-and-architecture" target="_blank" rel="noopener noreferrer">Concept and Architecture</a></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="videosdk-setup">VideoSDK Setup<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#videosdk-setup" class="hash-link" aria-label="Direct link to VideoSDK Setup" title="Direct link to VideoSDK Setup">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="api-key">API Key<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#api-key" class="hash-link" aria-label="Direct link to API Key" title="Direct link to API Key">​</a></h3>
<p>In Twilio you have to create API key manually(using CLI or from Dashboard), in VideoSDK the default API key is automatically created in <a href="https://app.videosdk.live/" target="_blank" rel="noopener noreferrer">VideoSDK dashboard</a>.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="token">Token<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#token" class="hash-link" aria-label="Direct link to Token" title="Direct link to Token">​</a></h3>
<p>In Twilio, you can generate a token using CLI or the Twilio helper library in the backend environment.</p>
<p>For VideoSDK, there are two ways to generate a token. You can <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token#1-generating-token-from-dashboard" target="_blank" rel="noopener noreferrer">generate it from the VideoSDK Dashboard</a> or <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token#2-generating-token-in-your-backend" target="_blank" rel="noopener noreferrer">in your backend</a>.</p>
<p>In Twilio, you need to provide a different token for each participant, which can be complex during development. In VideoSDK, it is optional to specify the same token for different participants. You can also restrict a specific token for a specific meetingID or participantID.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="installation">Installation<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2>
<p>You can install the VidoeSDK library using <a href="https://www.npmjs.com/" target="_blank" rel="noopener noreferrer">NPM</a>.</p>
<!-- -->
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_v5XY">Yarn</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">npm install @videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">js</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">sdk</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem__kUE" hidden=""><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">yarn add @videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">js</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">sdk</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<p>You can also include it in your application using our CDN.</p>
<div class="language-jsx codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-jsx codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;</span><span class="token tag" style="color:rgb(78, 201, 176)">script</span><span class="token tag" style="color:rgb(78, 201, 176)"> </span><span class="token tag attr-name" style="color:rgb(156, 220, 254)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(212, 212, 212)">=</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag attr-value" style="color:rgb(206, 145, 120)">&lt;https://sdk.videosdk.live/js-sdk/0.2.6/videosdk.js&gt;</span><span class="token tag attr-value punctuation" style="color:rgb(212, 212, 212)">"</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&lt;/</span><span class="token tag" style="color:rgb(78, 201, 176)">script</span><span class="token tag punctuation" style="color:rgb(212, 212, 212)">&gt;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Using this method, VideoSDK will set a browser global:</p>
<div class="language-jsx codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-jsx codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token maybe-class-name">VideoSDK</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token dom variable" style="color:rgb(156, 220, 254)">window</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access maybe-class-name">VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="room-creation">Room Creation<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#room-creation" class="hash-link" aria-label="Direct link to Room Creation" title="Direct link to Room Creation">​</a></h2>
<p>Before integration, create a room using the <a href="https://docs.videosdk.live/api-reference/realtime-communication/create-room" target="_blank" rel="noopener noreferrer">REST API Rooms resource</a>. Refer to the docs for details.</p>
<div class="language-jsx codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-jsx codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">cURL </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">XPOST</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">https</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">api</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">v2</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">rooms</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> \\</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Authorization: $VIDEOSDK_TOKEN'</span><span class="token plain"> \\</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Content-Type: application/json'</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-1--connect-to-a-room">Step 1 : Connect to a Room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#step-1--connect-to-a-room" class="hash-link" aria-label="Direct link to Step 1 : Connect to a Room" title="Direct link to Step 1 : Connect to a Room">​</a></h2>
<ul>
<li>In Twilio, you can connect to a room using the <code>video.connect()</code> method, which accepts the <code>token</code> and <code>connectOptions</code> as parameters.</li>
<li>In VideoSDK, you need to first configure the token using <code>VideoSDK.config('TOKEN')</code>, and then initialize VideoSDK using the <code>initMeeting</code> method, which accepts parameters such as the meetingId and participant name. You can refer to other parameters from this <a href="https://docs.videosdk.live/javascript/api/sdk-reference/initMeeting#initmeeting" target="_blank" rel="noopener noreferrer">reference</a>.</li>
<li>When joining and leaving a room, the Twilio Local Participant receives the <code>connected</code> and <code>disconnected</code> events of the room.</li>
<li>On the other hand, the VideoSDK Local Participant receives the <code>meeting-joined</code> and <code>meeting-left</code> events of the meeting when joining and leaving the room.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> video </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> Twilio</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">initializeMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">connect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"$TOKEN"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><span class="token literal-property property">name</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"my-new-room"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">then</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Successfully joined a Room: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">room</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"connected"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Local Participant Joined Successfully</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"disconnected"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Local Participant Left the Room</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Unable to connect to Room: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">error</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">message</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> meeting </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Declare global variable</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">initializeMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  window</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">config</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"$TOKEN"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> meetingId </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"abcd-efgh-ijkl"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// You can replace the meetingId</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> window</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">initMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">meetingId</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> meetingId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// required</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">name</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"The Migrator"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// required</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">micEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// optional, default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token literal-property property">webcamEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// optional, default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">join</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"meeting-joined"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Local Participant Joined Successfully</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"meeting-left"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Local Participant Left the Room</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-2--render-local-participant">Step 2 : Render Local Participant<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#step-2--render-local-participant" class="hash-link" aria-label="Direct link to Step 2 : Render Local Participant" title="Direct link to Step 2 : Render Local Participant">​</a></h2>
<ul>
<li>In Twilio and VideoSDK, you can access the localParticipant by using <code>room.localParticipant</code> and <code>meeting.localParticipant</code> respectively.</li>
<li>To get the MediaStream in VideoSDK, listen for the <code>stream-enabled</code> event of the Participant class and set the audio and video tracks accordingly.</li>
<li>In the code snippet below, we have defined the magic functions <code>createVideoElement</code>, <code>createAudioElement</code>, and <code>setTrack</code> to help render the Local and Remote Participants easily.</li>
<li>VideoSDK automatically detaches the MediaStream Tracks when you leave the meeting. Additionally, you can pause and resume the participant stream using the <a href="https://docs.videosdk.live/javascript/api/sdk-reference/stream-class/methods#pause" target="_blank" rel="noopener noreferrer">pause()</a> and <a href="https://docs.videosdk.live/javascript/api/sdk-reference/stream-class/methods#resume" target="_blank" rel="noopener noreferrer">resume()</a> methods of the <a href="https://docs.videosdk.live/javascript/api/sdk-reference/stream-class/introduction" target="_blank" rel="noopener noreferrer">Stream</a> Class.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">setupParticipantContainer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> identity</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> sid </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Add a container for the Participant's media.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> $container </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">$</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">&lt;div class="participant" data-identity="</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">identity</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string string" style="color:rgb(206, 145, 120)">" id="</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">sid</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string string" style="color:rgb(206, 145, 120)">"&gt;</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token template-string string" style="color:rgb(206, 145, 120)">    &lt;audio autoplay </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token template-string interpolation">      participant </span><span class="token template-string interpolation operator" style="color:rgb(212, 212, 212)">===</span><span class="token template-string interpolation"> room</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">localParticipant </span><span class="token template-string interpolation operator" style="color:rgb(212, 212, 212)">?</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation string" style="color:rgb(206, 145, 120)">"muted"</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation operator" style="color:rgb(212, 212, 212)">:</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation string" style="color:rgb(206, 145, 120)">""</span><span class="token template-string interpolation"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token template-string interpolation">    </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string string" style="color:rgb(206, 145, 120)"> style="opacity: 0"&gt;&lt;/audio&gt;</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token template-string string" style="color:rgb(206, 145, 120)">    &lt;video autoplay muted playsinline style="opacity: 0"&gt;&lt;/video&gt;</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token template-string string" style="color:rgb(206, 145, 120)">  &lt;/div&gt;</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Add the Participant's container to the DOM.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  $participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">append</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">$container</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">participantConnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Set up the Participant's media container.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">setupParticipantContainer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Handle the TrackPublications already published by the Participant.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">tracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">trackPublished</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Handle theTrackPublications that will be published by the Participant later.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"trackPublished"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">trackPublished</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">trackPublished</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// If the TrackPublication is already subscribed to, then attach the Track to the DOM.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">attachTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Once the TrackPublication is subscribed to, attach the Track to the DOM.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"subscribed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">attachTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Once the TrackPublication is unsubscribed from, detach the Track from the DOM.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"unsubscribed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">detachTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">attachTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Attach the Participant's Track to the thumbnail.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> $media </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">$</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">div#</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">participant</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">sid</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string string" style="color:rgb(206, 145, 120)"> &gt; </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">track</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">kind</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> $participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  $media</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">css</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"opacity"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">""</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">attach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">$media</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// If the attached Track is a VideoTrack that is published by the active</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Participant, then attach it to the main video as well.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> participant </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> activeParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">attach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">$activeVideo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    $activeVideo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">css</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"opacity"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">""</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">detachTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Detach the Participant's Track from the thumbnail.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> $media </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">$</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">div#</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">participant</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">sid</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string string" style="color:rgb(206, 145, 120)"> &gt; </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">track</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">kind</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> $participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> mediaEl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> $media</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  $media</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">css</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"opacity"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"0"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">detach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">mediaEl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  mediaEl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">srcObject </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// If the detached Track is a VideoTrack that is published by the active</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Participant, then detach it from the main video as well.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> participant </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> activeParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> activeVideoEl </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> $activeVideo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">get</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">detach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">activeVideoEl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    activeVideoEl</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">srcObject </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    $activeVideo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">css</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"opacity"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"0"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">initializeMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Handle the LocalParticipant's media.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// participantConnected(room.localParticipant, room);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// creating local participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">createLocalParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// setting local participant stream</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"stream-enabled"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">setTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// creating video element</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">createVideoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">pId</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> name</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> videoFrame </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">createElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"div"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoFrame</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">f-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">pId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//create video</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> videoElement </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">createElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">classList</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">add</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"video-frame"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">v-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">pId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"playsinline"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"width"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"300"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoFrame</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">appendChild</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">videoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> displayName </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">createElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"div"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  displayName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">innerHTML </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">Name : </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoFrame</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">appendChild</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">displayName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> videoFrame</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// creating audio element</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">createAudioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">pId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> audioElement </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">createElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"audio"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"autoPlay"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"false"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"playsInline"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"true"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"controls"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"false"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setAttribute</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"id"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">a-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">pId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">style</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">display </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"none"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// creating local participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">createLocalParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> localParticipant </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">createVideoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">displayName</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  videoContainer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">appendChild</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// setting media track</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">setTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">stream</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> audioElement</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> participant</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> isLocal</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    isWebCamOn </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> mediaStream </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> videoElm </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getElementById</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">v-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">participant</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    videoElm</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">srcObject </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    videoElm</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">play</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">catch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"videoElem.current.play() failed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"audio"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">isLocal</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      isMicOn </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> mediaStream </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">srcObject </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      audioElement</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">play</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">catch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"audioElem.play() failed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-3--handle-connected-participants">Step 3 : Handle Connected Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#step-3--handle-connected-participants" class="hash-link" aria-label="Direct link to Step 3 : Handle Connected Participants" title="Direct link to Step 3 : Handle Connected Participants">​</a></h2>
<ul>
<li>To receive notifications when a remote participant joins or leaves a call in Twilio, you can use the <code>participantConnected</code> and <code>participantDisconnected</code> events of the room.</li>
<li>Similarly, in VideoSDK, you can use the <code>participant-joined</code> and <code>participant-left</code> events of the meeting to be notified when a remote participant joins or leaves the call.</li>
<li>In addition, the <code>stream-enabled</code> event of the Participant class is used to manage the media track of a specific participant by associating it with the appropriate video or audio element.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">initializeMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Subscribe to the media published by RemoteParticipants already in the Room.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">participantConnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Subscribe to the media published by RemoteParticipants joining the Room later.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"participantConnected"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">participantConnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Handle a disconnected RemoteParticipant.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"participantDisconnected"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">participantDisconnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">participantDisconnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Remove the Participant's media container.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">$</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">div#</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">participant</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">sid</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> $participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">remove</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">initializeMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// participant joined</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"participant-joined"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> videoElement </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">createVideoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">displayName</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> audioElement </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">createAudioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"stream-enabled"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token function" style="color:rgb(220, 220, 170)">setTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    videoContainer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">appendChild</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">videoElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    videoContainer</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">appendChild</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">audioElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// participants left</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"participant-left"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> vElement </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getElementById</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">f-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">participant</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    vElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">remove</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">vElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">let</span><span class="token plain"> aElement </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> document</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">getElementById</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token template-string string" style="color:rgb(206, 145, 120)">a-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">${</span><span class="token template-string interpolation">participant</span><span class="token template-string interpolation punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token template-string interpolation">id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token template-string template-punctuation string" style="color:rgb(206, 145, 120)">`</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    aElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">remove</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">aElement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h4 class="anchor anchorWithHideOnScrollNavbar_emO8" id="mapping-twilios-events-to-videosdk">Mapping Twilio’s events to VideoSDK<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#mapping-twilios-events-to-videosdk" class="hash-link" aria-label="Direct link to Mapping Twilio’s events to VideoSDK" title="Direct link to Mapping Twilio’s events to VideoSDK">​</a></h4>
<p>Below is a list of all Twilio events used in this demo and VideoSDK’s equivalents.</p>
<table><thead><tr><th>Twilio Events</th><th>VideoSDK Events</th></tr></thead><tbody><tr><td>participantConnected</td><td><a href="https://docs.videosdk.live/javascript/api/sdk-reference/meeting-class/events#participant-joined" target="_blank" rel="noopener noreferrer">participant-joined</a></td></tr><tr><td>participantDisconnected</td><td><a href="https://docs.videosdk.live/javascript/api/sdk-reference/meeting-class/events#participant-left" target="_blank" rel="noopener noreferrer">participant-left</a></td></tr><tr><td>connected</td><td><a href="https://docs.videosdk.live/javascript/api/sdk-reference/meeting-class/events#meeting-joined" target="_blank" rel="noopener noreferrer">meeting-joined</a></td></tr><tr><td>disconnected</td><td><a href="https://docs.videosdk.live/javascript/api/sdk-reference/meeting-class/events#meeting-left" target="_blank" rel="noopener noreferrer">meeting-left</a></td></tr><tr><td>dominantSpeakerChanged</td><td><a href="https://docs.videosdk.live/javascript/api/sdk-reference/meeting-class/events#speaker-changed" target="_blank" rel="noopener noreferrer">speaker-changed</a></td></tr></tbody></table>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-4--mute-and-unmute-your-local-media">Step 4 : Mute and UnMute Your Local Media<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#step-4--mute-and-unmute-your-local-media" class="hash-link" aria-label="Direct link to Step 4 : Mute and UnMute Your Local Media" title="Direct link to Step 4 : Mute and UnMute Your Local Media">​</a></h2>
<ul>
<li>In Twilio, you can mute or unmute your LocalAudioTracks (microphone) and LocalVideoTracks (camera) by calling the disable or enable method.</li>
<li>In VideoSDK, you can use the <code>muteMic</code> function for the microphone and the <code>disableWebcam</code> function for the camera.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">disable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Disable Mic in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">enable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Enable Mic in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">disable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Disable Webcam in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">enable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Enable Webcam in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">muteMic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Disable Mic in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">unmuteMic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Enable Mic in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">disableWebcam</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Disable Webcam in Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">enableWebcam</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">// Enable Webcam in Meeting</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-5--disconnect-from-a-room">Step 5 : Disconnect from a Room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#step-5--disconnect-from-a-room" class="hash-link" aria-label="Direct link to Step 5 : Disconnect from a Room" title="Direct link to Step 5 : Disconnect from a Room">​</a></h2>
<ul>
<li>In Twilio, you have the ability to disconnect from a Room in which you are currently participating. Other Participants will receive a <code>participantDisconnected</code> event.</li>
<li>In VideoSDK, you can also disconnect from a Room you are currently participating in. Other Participants will receive a <code>participant-left</code> event, while the local participant will receive a <code>meeting-left</code> event.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"disconnected"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">// Detach the local media elements</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">tracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> attachedElements </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">detach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    attachedElements</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">element</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> element</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">remove</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To disconnect from a Room</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">disconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"meeting-left"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//Meeting Left</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To leave the meeting without removing all the participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// you need to call leave() which is the part of the meeting object.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">leave</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To leave the meeting by removing all the participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// you need to call end() which is the part of the meeting object.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">end</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="conclusion">Conclusion<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>As you conclude this migration journey, you've successfully adapted your application from Twilio to VideoSDK. The <a href="https://github.com/videosdk-live/migration-to-X/tree/main/Twilio/js-quickstart" target="_blank" rel="noopener noreferrer">developed project</a> showcases the implementation of VideoSDK in action, emphasizing its simplicity and efficiency.</p>
<p>Key Takeaways:</p>
<ul>
<li>Automatic API key generation streamlines the setup process.</li>
<li>Token generation is simplified, offering flexibility for participants.</li>
<li>Granular control over participant tokens enhances security.</li>
<li>Global scalability and minimal latency ensure a seamless user experience.</li>
</ul>
<p>Feel free to explore the developed project's codebase for a hands-on understanding of VideoSDK integration. As you transition, VideoSDK empowers your application with robust real-time communication features, providing a foundation for future scalability and innovation.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="contact-us">Contact Us<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-js-sdk#contact-us" class="hash-link" aria-label="Direct link to Contact Us" title="Direct link to Contact Us">​</a></h2>
<p>For any further assistance, questions, or community engagement, we welcome you to join our <a href="https://discord.com/invite/Gpmj6eCq5u" target="_blank" rel="noopener noreferrer">Discord channel</a>. Connect with fellow developers, share insights, and stay updated on the latest developments.</p>
<p>If you require developer support or need personalized assistance, you can schedule a session with our team through our <a href="https://bookings.videosdk.live/#/customer/discovery" target="_blank" rel="noopener noreferrer">Developer Support portal</a>. We are here to ensure a smooth integration and address any queries you may have. Your success with VideoSDK is our priority.</p>]]></content:encoded>
            <category>Migration Guide</category>
            <category>Twilio</category>
            <category>JavaScript</category>
        </item>
        <item>
            <title><![CDATA[React - Migration Guide From Twilio Video to Video SDK]]></title>
            <link>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition</link>
            <guid>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition</guid>
            <pubDate>Thu, 07 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Easily migrate from Twilio to VideoSDK on React. Our guide provides concise steps for seamless integration, enhancing your app's video capabilities effortlessly.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="overview">Overview<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2>
<p><strong>Welcome to the Twilio-to-VideoSDK Migration Guide for React!</strong></p>
<p>This guide is your trusted companion as you navigate the transition from Twilio to VideoSDK for your React apps. We understand that migrating to a new platform can be difficult, so we've designed this comprehensive guide to ensure a smooth and successful journey.</p>
<p>Through step-by-step instructions, we'll equip you with the knowledge and resources you need to effectively transfer your real-time communication capabilities. We'll explore key concepts, explore setup differences, walk you through the installation process, and guide you through the necessary code adjustments.</p>
<p>By the end of this guide, you'll feel confident leveraging VideoSDK's power and flexibility to enhance your React apps and captivate your audience with seamless video and audio experiences.</p>
<p>So, embrace the future of communication, and let's get started!</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="concepts">Concepts<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#concepts" class="hash-link" aria-label="Direct link to Concepts" title="Direct link to Concepts">​</a></h2>
<ol>
<li><strong>Meeting / Room:</strong>
<ul>
<li>This is like a virtual place where people can have real-time conversations using voice, video, and screen sharing.</li>
<li>Think of it as a virtual room where participants interact.</li>
<li>Each meeting or room has a unique ID (meetingId or roomId).</li>
</ul>
</li>
<li><strong>Participant:</strong>
<ul>
<li>Both VideoSDK and Twilio Video includes the concepts of <strong>Participant.</strong></li>
<li>There are two types:<!-- -->
<ul>
<li><strong>Local Participant:</strong> This is you on your device. You control your own audio and video.</li>
<li><strong>Remote Participant:</strong> This is someone else in the meeting. They receive your audio and video and can send their own.</li>
</ul>
</li>
</ul>
</li>
<li><strong>MediaStream &amp; Track:</strong>
<ul>
<li><strong>MediaStream:</strong> Think of it as a bundle of audio and video tracks that are shared in real-time between participants.</li>
<li><strong>Track:</strong> This is like a continuous flow of audio or video. For example, your video feed from the camera is a video track, and the audio from the microphone is an audio track.</li>
</ul>
</li>
<li><strong>Session:</strong>
<ul>
<li>A session is like a specific instance of an ongoing meeting or room.</li>
<li>Imagine a meeting happening right now as a session.</li>
<li>Each session has its own ID (sessionId).</li>
</ul>
</li>
</ol>
<p>If you want to learn about this concept in depth you can refer this guide <a href="https://docs.videosdk.live/react/guide/video-and-audio-calling-api-sdk/concept-and-architecture" target="_blank" rel="noopener noreferrer">Concept and Architecture</a></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="videosdk-setup">VideoSDK Setup<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#videosdk-setup" class="hash-link" aria-label="Direct link to VideoSDK Setup" title="Direct link to VideoSDK Setup">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="api-key">API Key<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#api-key" class="hash-link" aria-label="Direct link to API Key" title="Direct link to API Key">​</a></h3>
<ul>
<li>In Twilio, you manually create an API key using CLI or the dashboard.</li>
<li>In VideoSDK, the default API key is automatically generated in the VideoSDK dashboard.</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="token">Token<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#token" class="hash-link" aria-label="Direct link to Token" title="Direct link to Token">​</a></h3>
<ul>
<li>In Twilio, tokens can be generated via CLI (complex) or the Twilio helper library integrated into the backend.</li>
<li>In VideoSDK, you can <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token#1-generating-token-from-dashboard">Generate token from VidoeSDK Dashboard</a> itself or <a href="https://docs.videosdk.live/javascript/guide/video-and-audio-calling-api-sdk/authentication-and-token#2-generating-token-in-your-backend">Generate a token in your backend</a>.</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="installation">Installation<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2>
<p>You can install the VidoeSDK library using&nbsp;NPM.</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">npm install </span><span class="token string" style="color:rgb(206, 145, 120)">"@videosdk.live/react-sdk"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">//or</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">yarn add </span><span class="token string" style="color:rgb(206, 145, 120)">"@videosdk.live/react-sdk"</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For rendering participant video install <code>react-player</code></p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">npm install </span><span class="token string" style="color:rgb(206, 145, 120)">"react-player"</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>You can remove the Twilio SDK from your project by uninstalling the package.</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">npm uninstall twilio</span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token plain">video</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Or, if using the Twilio CDN, remove the script tag from <code>index.html</code>.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="room-creation">Room Creation<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#room-creation" class="hash-link" aria-label="Direct link to Room Creation" title="Direct link to Room Creation">​</a></h2>
<p>Before integration, create a room using the <a href="https://docs.videosdk.live/api-reference/realtime-communication/create-room" target="_blank" rel="noopener noreferrer">REST API Rooms resource</a>. Refer to the docs for details.</p>
<div class="language-jsx codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-jsx codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">cURL </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">XPOST</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">https</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">api</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token property-access">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">v2</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">rooms</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"> \\</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Authorization: $VIDEOSDK_TOKEN'</span><span class="token plain"> \\</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Content-Type: application/json'</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-1--initialization-a-room">Step 1 : Initialization a room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#step-1--initialization-a-room" class="hash-link" aria-label="Direct link to Step 1 : Initialization a room" title="Direct link to Step 1 : Initialization a room">​</a></h2>
<ul>
<li>Replace Twilio's <code>connect</code> method with VideoSDK's <code>MeetingProvider</code> from <code>@videosdk.live/react-sdk</code>.</li>
</ul>
<!-- -->
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">VideoChat</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> handleSubmit </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useCallback</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">event</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      event</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">preventDefault</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token function" style="color:rgb(220, 220, 170)">setConnecting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">       </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> data </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">fetch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"/video/token"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">         </span><span class="token literal-property property">method</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"POST"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">         </span><span class="token literal-property property">body</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(100, 102, 149)">JSON</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">stringify</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           </span><span class="token literal-property property">identity</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> username</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           </span><span class="token literal-property property">room</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> roomName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">         </span><span class="token literal-property property">headers</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           </span><span class="token string-property property">"Content-Type"</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"application/json"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">       </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">then</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">res</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">json</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">       Video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">connect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">token</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">         </span><span class="token literal-property property">name</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> roomName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">       </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">then</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token function" style="color:rgb(220, 220, 170)">setConnecting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token function" style="color:rgb(220, 220, 170)">setRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">catch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">err</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token function" style="color:rgb(220, 220, 170)">setConnecting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">roomName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> username</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> MeetingProvider </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"@videosdk.live/react-sdk"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">VideoChat</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> token </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"YOUR_GENERATED_TOKEN"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">MeetingProvider</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      config</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">meetingId</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"YOUR_GENERATED_MEETINGID"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">micEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">webcamEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token literal-property property">name</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"The Migrator"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      token</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">token</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">MeetingConsumer</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Room meetingId</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">meetingId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> onMeetingLeave</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">onMeetingLeave</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">MeetingConsumer</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">MeetingProvider</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<p>Let’s explore <code>MeetingProvider</code>, <code>MeetingConsumer</code>, <code>useMeeting()</code>, <code>useParticipant()</code> methods for further example.</p>
<ul>
<li><code>MeetingProvider</code>: It is Context Provider. It accepts value&nbsp;<code>config</code>&nbsp;and&nbsp;<code>token</code>&nbsp;as props. The Provider component accepts a value prop to be passed to consuming components that are descendants of this Provider. One Provider can be connected to many consumers. Providers can be nested to override values deeper within the tree.</li>
<li><code>MeetingConsumer</code>: It is Context Consumer. All consumers that are descendants of a Provider will re-render whenever the Provider’s value prop changes.</li>
<li><code>useMeeting</code>: It is meeting react hook API for meeting. It includes all the information related to meeting such as join, leave, enable/disable mic or webcam etc.</li>
<li><code>useParticipant</code>: It is participant hook API. useParticipant hook is responsible to handle all the events and props related to one particular participant such as name, webcamStream, micStream etc.</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-2--rendering-remote-and-local-participants">Step 2 : Rendering Remote and Local Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#step-2--rendering-remote-and-local-participants" class="hash-link" aria-label="Direct link to Step 2 : Rendering Remote and Local Participants" title="Direct link to Step 2 : Rendering Remote and Local Participants">​</a></h2>
<ul>
<li>In Twilio, the local participant is accessed through <code>room.localParticipant</code>, whereas in VideoSDK, the equivalent is retrieved using <code>meeting.localParticipant</code>.</li>
<li>When it comes to retrieving the list of participants, Twilio utilizes room.participants, while VideoSDK employs <code>meeting.participants</code>.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">Room</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token parameter"> roomName</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> token</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> handleLogout </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> setRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useState</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> setParticipants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useState</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> remoteParticipants </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">map</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Participant key</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">sid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> participant</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"room"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">h2</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Room</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">roomName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">h2</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">handleLogout</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Log out</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"local-participant"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">room </span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Participant</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">               key</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">sid</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">               participant</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">           </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token string" style="color:rgb(206, 145, 120)">''</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Remote Participants</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"remote-participants"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">remoteParticipants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> useMeeting </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"@videosdk.live/react-sdk"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">Room</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token parameter"> meetingId</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> onMeetingLeave </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">joined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> setJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useState</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> join </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> localParticipant </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">onMeetingJoined</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token function" style="color:rgb(220, 220, 170)">setJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"JOINED"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">onMeetingLeft</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingLeave</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">joinMeeting</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">setJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"JOINING"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">join</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> remoteParticipants </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> Array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">from</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">values</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">filter</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id </span><span class="token operator" style="color:rgb(212, 212, 212)">!==</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">map</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Participant key</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> participant</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Meeting Id</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">meetingId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">joined </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> joined </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"JOINED"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token comment" style="color:rgb(106, 153, 85)">/* Render Controls */</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"local-participant"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">Participant</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              key</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              participant</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Remote Participants</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"remote-participants"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">remoteParticipants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> joined </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> joined </span><span class="token operator" style="color:rgb(212, 212, 212)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"JOINING"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">p</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Joining the meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">p</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">joinMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Join</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h4 class="anchor anchorWithHideOnScrollNavbar_emO8" id="mapping-twilios-events-to-videosdk">Mapping Twilio’s events to VideoSDK<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#mapping-twilios-events-to-videosdk" class="hash-link" aria-label="Direct link to Mapping Twilio’s events to VideoSDK" title="Direct link to Mapping Twilio’s events to VideoSDK">​</a></h4>
<p>Below is a list of all Twilio events used in this demo and VideoSDK’s equivalents.</p>
<table><thead><tr><th>Twilio Events</th><th>VideoSDK Events</th></tr></thead><tbody><tr><td>participantConnected</td><td><a href="https://docs.videosdk.live/react/api/sdk-reference/use-meeting/events#onparticipantjoined" target="_blank" rel="noopener noreferrer">onParticipantJoined()</a></td></tr><tr><td>participantDisconnected</td><td><a href="https://docs.videosdk.live/react/api/sdk-reference/use-meeting/events#onparticipantleft" target="_blank" rel="noopener noreferrer">onParticipantLeft()</a></td></tr><tr><td>connected</td><td><a href="https://docs.videosdk.live/react/api/sdk-reference/use-meeting/events#onmeetingjoined" target="_blank" rel="noopener noreferrer">onMeetingJoined()</a></td></tr><tr><td>disconnected</td><td><a href="https://docs.videosdk.live/react/api/sdk-reference/use-meeting/events#onmeetingleft" target="_blank" rel="noopener noreferrer">onMeetingLeft()</a></td></tr><tr><td>dominantSpeakerChanged</td><td><a href="https://docs.videosdk.live/react/api/sdk-reference/use-meeting/events#onspeakerchanged" target="_blank" rel="noopener noreferrer">onSpeakerChanged()</a></td></tr></tbody></table>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-3-rendering-audio--video-of-participant">Step 3: Rendering Audio &amp; Video Of Participant<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#step-3-rendering-audio--video-of-participant" class="hash-link" aria-label="Direct link to Step 3: Rendering Audio &amp; Video Of Participant" title="Direct link to Step 3: Rendering Audio &amp; Video Of Participant">​</a></h2>
<ul>
<li>In Twilio, the rendering of audio and video involves setting tracks in the <code>useState</code> through the use of subscribe and unsubscribe methods.</li>
<li>In VideoSDK, the process differs. We retrieve the <code>webcamStream</code> and <code>micStream</code> from <code>useParticipant()</code>. Subsequently, the <code>micStream</code> is passed using a reference in the audio component, while the <code>webcamStreamUrl</code> is passed to <code>ReactPlayer</code> for video rendering.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">Participant</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token parameter"> participant </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> setVideoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useState</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> setAudioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useState</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> videoRef </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">trackpubsToTracks</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">trackMap</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    Array</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">from</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">trackMap</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">values</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">map</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> publication</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">filter</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> track </span><span class="token operator" style="color:rgb(212, 212, 212)">!==</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">useEffect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">setVideoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">trackpubsToTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">setAudioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">trackpubsToTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">trackSubscribed</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">setVideoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"audio"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">setAudioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">trackUnsubscribed</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">setVideoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">filter</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">v</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> v </span><span class="token operator" style="color:rgb(212, 212, 212)">!==</span><span class="token plain"> track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind </span><span class="token operator" style="color:rgb(212, 212, 212)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"audio"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">setAudioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">filter</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">a</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> a </span><span class="token operator" style="color:rgb(212, 212, 212)">!==</span><span class="token plain"> track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"trackSubscribed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> trackSubscribed</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">on</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"trackUnsubscribed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> trackUnsubscribed</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token function" style="color:rgb(220, 220, 170)">setVideoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token function" style="color:rgb(220, 220, 170)">setAudioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">removeAllListeners</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">useEffect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> videoTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">videoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      videoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">attach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">videoRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">current</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        videoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">detach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">useEffect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> audioTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">audioTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      audioTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">attach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">current</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        audioTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">detach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"participant"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">identity</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">h3</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">video ref</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">videoRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> autoPlay</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">audio ref</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> autoPlay</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> muted</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> ReactPlayer </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"react-player"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> useParticipant </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"@videosdk.live/react-sdk"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(220, 220, 170)">Participant</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token parameter"> participant </span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> audioRef </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> webcamStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> micStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> webcamOn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> micOn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> isLocal</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> displayName </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">useParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">participantId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> videoStream </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useMemo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">webcamOn </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> webcamStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> mediaStream </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">webcamStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">webcamStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> webcamOn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token function" style="color:rgb(220, 220, 170)">useEffect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">current</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">micOn </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> micStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> mediaStream </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(78, 201, 176)">MediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">micStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">current</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">srcObject </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> mediaStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">current</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">play</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">catch</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"videoElem.current.play() failed"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">current</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">srcObject </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">micStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> micOn</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div className</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"participant"</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">audio ref</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">audioRef</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> autoPlay muted</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">isLocal</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">webcamOn </span><span class="token operator" style="color:rgb(212, 212, 212)">&amp;&amp;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">ReactPlayer</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token comment" style="color:rgb(106, 153, 85)">//</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          playsinline </span><span class="token comment" style="color:rgb(106, 153, 85)">// extremely crucial prop</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          pip</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          light</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          controls</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          muted</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          playing</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token comment" style="color:rgb(106, 153, 85)">//</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          url</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">videoStream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token comment" style="color:rgb(106, 153, 85)">//</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          height</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string" style="color:rgb(206, 145, 120)">"200px"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          width</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token string" style="color:rgb(206, 145, 120)">"300px"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          onError</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">err</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            console</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"participant video error"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-4-implement-meeting-controls">Step 4: Implement Meeting Controls<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#step-4-implement-meeting-controls" class="hash-link" aria-label="Direct link to Step 4: Implement Meeting Controls" title="Direct link to Step 4: Implement Meeting Controls">​</a></h2>
<ul>
<li>The implementation of additional controls, such as toggling the microphone and webcam, is achieved through methods provided by <code>useMeeting()</code> in VideoSDK.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">Controls</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//..</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> toggleMic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> toggleWebcam </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">toggleMic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">toggleMic</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">toggleWebcam</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">toggleWebcam</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-5--disconnect-from-a-room">Step 5 : Disconnect from a Room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#step-5--disconnect-from-a-room" class="hash-link" aria-label="Direct link to Step 5 : Disconnect from a Room" title="Direct link to Step 5 : Disconnect from a Room">​</a></h2>
<ul>
<li>To exit a meeting, Twilio uses <code>room.disconnect()</code>, while VideoSDK utilizes <code>meeting.leave()</code>.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">Controls</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//..</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token plain">room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> setRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useState</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> handleLogout </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useCallback</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">setRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">prevRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">prevRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        prevRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">tracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">forEach</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">trackPub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          trackPub</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">stop</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        prevRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">disconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain">handleLogout</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Log out</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">Controls</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token comment" style="color:rgb(106, 153, 85)">//..</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> leave </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">useMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">button onClick</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">leave</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain">Leave</span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">button</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">div</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="conclusion">Conclusion<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>As you conclude this migration journey, you've successfully adapted your application from Twilio to VideoSDK. The <a href="https://github.com/videosdk-live/migration-to-X/tree/main/Twilio/react-quickstart" target="_blank" rel="noopener noreferrer">developed project</a> showcases the implementation of VideoSDK in action, emphasizing its simplicity and efficiency.</p>
<p>Key Takeaways:</p>
<ul>
<li>Automatic API key generation streamlines the setup process.</li>
<li>Token generation is simplified, offering flexibility for participants.</li>
<li>Granular control over participant tokens enhances security.</li>
<li>Global scalability and minimal latency ensure a seamless user experience.</li>
</ul>
<p>Feel free to explore the developed project's codebase for a hands-on understanding of VideoSDK integration. As you transition, VideoSDK empowers your application with robust real-time communication features, providing a foundation for future scalability and innovation.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="contact-us">Contact Us<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-web-edition#contact-us" class="hash-link" aria-label="Direct link to Contact Us" title="Direct link to Contact Us">​</a></h2>
<p>For any further assistance, questions, or community engagement, we welcome you to join our <a href="https://discord.com/invite/Gpmj6eCq5u" target="_blank" rel="noopener noreferrer">Discord channel</a>. Connect with fellow developers, share insights, and stay updated on the latest developments.</p>
<p>If you require developer support or need personalized assistance, you can schedule a session with our team through our <a href="https://bookings.videosdk.live/#/customer/discovery" target="_blank" rel="noopener noreferrer">Developer Support portal</a>. We are here to ensure a smooth integration and address any queries you may have. Your success with VideoSDK is our priority.</p>]]></content:encoded>
            <category>Migration Guide</category>
            <category>Twilio</category>
            <category>React</category>
        </item>
        <item>
            <title><![CDATA[Android - Migration Guide From Twilio Video to Video SDK]]></title>
            <link>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk</link>
            <guid>https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk</guid>
            <pubDate>Wed, 06 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore the seamless transition from Twilio to Video SDK for android with our comprehensive migration guide. Elevate your video communication with expert insights and step-by-step instructions.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="overview">Overview<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2>
<p><strong>Welcome to the Twilio-to-VideoSDK Migration Guide for Android!</strong></p>
<p>As you navigate the transition from Twilio to VideoSDK, this guide serves as a roadmap for your smooth and efficient migration. We understand that transitioning to a new platform can be difficult, but fear not! This guide is designed to provide a simple and insightful comparison of key components, making the process clear and accessible even if you're new to both platforms.</p>
<p>We have created a guide to ensure a seamless migration experience. We'll use the well-known Twilio Quickstart sample application as a starting point, providing you with familiar basics and a solid context. You can easily access the code of the sample application here: <a href="https://github.com/twilio/video-quickstart-android/tree/master/quickstartKotlin" target="_blank" rel="noopener noreferrer">https://github.com/twilio/video-quickstart-android/tree/master/quickstartKotlin</a></p>
<p>Throughout this guide, we'll provide you with the knowledge and resources you need to successfully migrate your Android app to VideoSDK. Let's begin your journey to a richer and more engaging communication experience!</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="concept">Concept<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#concept" class="hash-link" aria-label="Direct link to Concept" title="Direct link to Concept">​</a></h2>
<ol>
<li><strong>Meeting / Room:</strong>
<ul>
<li>This is like a virtual place where people can have real-time conversations using voice, video, and screen sharing.</li>
<li>Think of it as a virtual room where participants interact.</li>
<li>Each meeting or room has a unique ID (meetingId or roomId).</li>
</ul>
</li>
<li><strong>Participant:</strong>
<ul>
<li>Both VideoSDK and Twilio Video includes the concepts of <strong>Participant.</strong></li>
<li>There are two types:<!-- -->
<ul>
<li><strong>Local Participant:</strong> This is you on your device. You control your own audio and video.</li>
<li><strong>Remote Participant:</strong> This is someone else in the meeting. They receive your audio and video and can send their own.</li>
</ul>
</li>
</ul>
</li>
<li><strong>MediaStream &amp; Track:</strong>
<ul>
<li><strong>MediaStream:</strong> Think of it as a bundle of audio and video tracks that are shared in real-time between participants.</li>
<li><strong>Track:</strong> This is like a continuous flow of audio or video. For example, your video feed from the camera is a video track, and the audio from the microphone is an audio track.</li>
</ul>
</li>
<li><strong>Session:</strong>
<ul>
<li>A session is like a specific instance of an ongoing meeting or room.</li>
<li>Imagine a meeting happening right now as a session.</li>
<li>Each session has its own ID (sessionId).</li>
</ul>
</li>
</ol>
<p>If you want to learn about this concept in depth you can refer this guide <a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/concept-and-architecture" target="_blank" rel="noopener noreferrer">Concept and Architecture</a></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="videosdk-setup">VideoSDK Setup<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#videosdk-setup" class="hash-link" aria-label="Direct link to VideoSDK Setup" title="Direct link to VideoSDK Setup">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="api-key">API Key<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#api-key" class="hash-link" aria-label="Direct link to API Key" title="Direct link to API Key">​</a></h3>
<p>In Twilio you have to create API key manually(using CLI or from Dashboard), in VideoSDK the default API key is automatically created in <a href="https://app.videosdk.live/" target="_blank" rel="noopener noreferrer">VideoSDK dashboard</a>.</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="token">Token<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#token" class="hash-link" aria-label="Direct link to Token" title="Direct link to Token">​</a></h3>
<p>In Twilio, you can generate a token using CLI or the Twilio helper library in the backend environment.</p>
<p>For VideoSDK, there are two ways to generate a token. You can <a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/authentication-and-token#1-generating-token-from-dashboard" target="_blank" rel="noopener noreferrer">generate it from the VideoSDK Dashboard</a> or <a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/authentication-and-token#2-generating-token-in-your-backend" target="_blank" rel="noopener noreferrer">in your backend</a>.</p>
<p>In Twilio, you need to provide a different token for each participant, which can be complex during development. In VideoSDK, it is optional to specify the same token for different participants. You can also restrict a specific token for a specific meetingID or participantID.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="room-creation"><strong>Room Creation</strong><a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#room-creation" class="hash-link" aria-label="Direct link to room-creation" title="Direct link to room-creation">​</a></h2>
<p>Before integration, create a room using the <a href="https://docs.videosdk.live/api-reference/realtime-communication/create-room" target="_blank" rel="noopener noreferrer">REST API Rooms resource</a>. Refer to the docs for details.</p>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">cURL </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">XPOST</span><span class="token plain"> </span><span class="token literal-property property">https</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">api</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">live</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">v2</span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token plain">rooms \</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Authorization: $VIDEOSDK_TOKEN'</span><span class="token plain"> \</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">		 </span><span class="token operator" style="color:rgb(212, 212, 212)">-</span><span class="token constant" style="color:rgb(100, 102, 149)">H</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">'Content-Type: application/json'</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-1--integrate-video-sdk">Step 1 : Integrate Video SDK<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#step-1--integrate-video-sdk" class="hash-link" aria-label="Direct link to Step 1 : Integrate Video SDK" title="Direct link to Step 1 : Integrate Video SDK">​</a></h2>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_RqKv">settings.gradle</div><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">dependencyResolutionManagement</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  repositories </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">google</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token function" style="color:rgb(220, 220, 170)">mavenCentral</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    maven </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> url </span><span class="token string" style="color:rgb(206, 145, 120)">"https://maven.aliyun.com/repository/jcenter"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>Add the following dependency in your app's <code>app/build.gradle</code>.</li>
</ul>
<div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_RqKv">app/build.gradle</div><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token plain">dependencies </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token operator" style="color:rgb(212, 212, 212)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">//    implementation &lt;strong&gt;"com.twilio:audioswitch:1.1.8"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">//    implementation &lt;strong&gt;"com.twilio:video-android:7.6.4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    implementation </span><span class="token string" style="color:rgb(206, 145, 120)">"live.videosdk:rtc-android-sdk:0.1.25"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>On the top right of your Android studio, click Sync Now after making these changes.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-2--connect-to-a-room">Step 2 : Connect to a room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#step-2--connect-to-a-room" class="hash-link" aria-label="Direct link to Step 2 : Connect to a room" title="Direct link to Step 2 : Connect to a room">​</a></h2>
<ul>
<li>
<p>In Twilio, You can initiate a connection to a video room using <strong><code>video.connect()</code></strong>. This method sets up a connection by specifying the room name, access token, and optionally including local audio, video, and data tracks.</p>
</li>
<li>
<p>In VideoSDK, the process begins with setting up the SDK by initializing it and providing authentication through a token. After that you can initialize the meeting with required params such as&nbsp;<code>meetingId</code>,&nbsp;<code>participantName</code>,&nbsp;<code>micEnabled</code>,&nbsp;<code>webcamEnabled</code>&nbsp;and <a href="https://docs.videosdk.live/android/api/sdk-reference/initMeeting" target="_blank" rel="noopener noreferrer">more</a>. To join the meeting/room, you can simply call the <strong><code>meeting.join()</code></strong> method.</p>
</li>
</ul>
<!-- -->
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">connectToRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    room </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">connect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter keyword" style="color:rgb(86, 156, 214)">this</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> accessToken</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> roomListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">roomName</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"&lt;Room-Name&gt;"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">audioTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">listOf</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localAudioTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">videoTracks</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">listOf</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">preferAudioCodecs</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">listOf</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">audioCodec</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">preferVideoCodecs</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">listOf</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">videoCodec</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">encodingParameters</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">encodingParameters</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token function" style="color:rgb(220, 220, 170)">enableAutomaticSubscription</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">enableAutomaticSubscription</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">connectToRoom</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token comment" style="color:rgb(106, 153, 85)">// 1. Initialize VideoSDK</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">initialize</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">applicationContext</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">	</span><span class="token comment" style="color:rgb(106, 153, 85)">// 2. Configuration VideoSDK with Token</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">config</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant" style="color:rgb(100, 102, 149)">VIDEOSDK_ACCESS_TOKEN</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">var</span><span class="token plain"> </span><span class="token literal-property property">meetingId</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">String </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"&lt;Meeting-Id&gt;"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// 3. Initialize VideoSDK Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    meeting </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> VideoSDK</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">initMeeting</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">this</span><span class="token plain">@VideoActivity</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> meetingId</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"John"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">null</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token comment" style="color:rgb(106, 153, 85)">// 4. Join VideoSDK Meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">join</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-3-handle-room-events">Step 3: Handle Room Events<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#step-3-handle-room-events" class="hash-link" aria-label="Direct link to Step 3: Handle Room Events" title="Direct link to Step 3: Handle Room Events">​</a></h2>
<ul>
<li>In both Twilio and VideoSDK, you can utilize event listeners attached to the room or meeting object to capture crucial moments during a video conference. This listener include the meeting being connected or disconnected and participants joining or leaving the meeting events.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> val roomListener </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> object </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onConnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onDisconnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">e</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> TwilioException</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">?</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantConnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantDisconnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> val meetingEventListener</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> MeetingEventListener </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> object </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">MeetingEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<ul>
<li>Below is a list of all Twilio events and VideoSDK’s equivalents.</li>
</ul>
<table><thead><tr><th><strong>Twillio Event</strong></th><th><strong>VideoSDK event</strong></th></tr></thead><tbody><tr><td>onConnected()</td><td>onMeetingJoined()</td></tr><tr><td>onDisconnected()</td><td>onMeetingLeft()</td></tr><tr><td>onParticipantConnected()</td><td>onParticipantJoined()</td></tr><tr><td>onParticipantDisconnected()</td><td>onParticipantLeft()</td></tr><tr><td>onDominantSpeakerChanged()</td><td>onSpeakerChanged()</td></tr><tr><td>onRecordingStarted()</td><td>onRecordingStateChanged()</td></tr><tr><td>onRecordingStopped()</td><td>onRecordingStateChanged()</td></tr></tbody></table>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-4--set-up-local-media">Step 4 : Set up local media<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#step-4--set-up-local-media" class="hash-link" aria-label="Direct link to Step 4 : Set up local media" title="Direct link to Step 4 : Set up local media">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="capture-local-media">Capture local media<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#capture-local-media" class="hash-link" aria-label="Direct link to Capture local media" title="Direct link to Capture local media">​</a></h3>
<ul>
<li>
<p>In Twilio, to capture local participant's audio data, you need to create a <code>LocalAudioTrack</code>, and for video, you add a <code>LocalVideoTrack</code> with an associated <code>VideoCapturer</code>.</p>
</li>
<li>
<p>In VideoSDK, capturing tracks for a local participant is more straightforward. The Android SDK automatically captures both audio and video when you set <code>micEnabled</code> and <code>webCamEnabled</code> to <code>true</code> in the <code>initMeeting()</code> method. There's no need for explicit track creation; the SDK handles it automatically based on the provided configuration.</p>
</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="render-local-participants-video">Render local participant’s video<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#render-local-participants-video" class="hash-link" aria-label="Direct link to Render local participant’s video" title="Direct link to Render local participant’s video">​</a></h3>
<ul>
<li>
<p>Twilio provides a <code>VideoView</code> component to display participants' video feeds.</p>
<ul>
<li>To display the video from the local participant, you have to link the <code>LocalVideoTrack</code> to the <code>VideoView</code> using the <code>addSink</code> method: <strong><code>localVideoTrack.addSink(localVideoView)</code></strong>.</li>
<li>If you want to stop displaying the local participant's video in the <code>VideoView</code>, you can remove the track using <strong><code>localVideoTrack.removeSink(localVideoView)</code></strong>.</li>
</ul>
</li>
<li>
<p>Similarly, VideoSDK offers a <a href="https://docs.videosdk.live/android/guide/video-and-audio-calling-api-sdk/render-media/display-video/understand-videoView-component" target="_blank" rel="noopener noreferrer">VideoView</a> component to display participants' video stream.</p>
<ul>
<li>To display the local participant's video, you have to add the track to the <code>VideoView</code> using the <code>addTrack</code> method: <strong><code>localVideoView.addTrack(track)</code></strong>.</li>
<li>When you want to stop displaying the local participant's video in the <code>VideoView</code>, you can remove the track using <strong><code>localVideoView.removeTrack()</code></strong> method.</li>
</ul>
</li>
<li>
<p>In Twilio , <code>LocalVideoTrack</code> is used to render a local participant’s video. However, VideoSDK have events <code>onStreamEnabled</code> and <code>onStreamDisabled</code> in <code>ParticipantEventListener</code> from which you can get track of audio, video.</p>
<ul>
<li><strong>onStreamEnabled()</strong> - <code>onStreamEnabled()</code>&nbsp;is a callback which gets triggered whenever a participant's video, audio or screen share stream is enabled.</li>
<li><strong>onStreamDisabled()</strong> - <code>onStreamDisabled()</code>&nbsp;is a callback which gets triggered whenever a participant's video, audio or screen share stream is disabled.</li>
</ul>
</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio - XML File</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_v5XY">Twilio - Kotlin File</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">com</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">twilio</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">video</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">VideoView</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token literal-property property">android</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">id</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"@+id/localVideoView"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token literal-property property">android</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">layout_width</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"wrap_content"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token literal-property property">android</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">layout_height</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"wrap_content"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem__kUE" hidden=""><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">var</span><span class="token plain"> </span><span class="token literal-property property">localVideoTrack</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> LocalVideoTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token comment" style="color:rgb(106, 153, 85)">//...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">addLocalParticipantVideo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">with</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">this</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">addSink</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">removeLocalParticipantVideo</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">with</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">this</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">removeSink</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">localVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK - XML File</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_v5XY">VideoSDK - Kotlin File</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token operator" style="color:rgb(212, 212, 212)">&lt;</span><span class="token plain">live</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">videosdk</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">rtc</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">android</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">VideoView</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token literal-property property">android</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">id</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"@+id/localVideoView"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token literal-property property">android</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">layout_width</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"wrap_content"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">   </span><span class="token literal-property property">android</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain">layout_height</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token string" style="color:rgb(206, 145, 120)">"wrap_content"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token operator" style="color:rgb(212, 212, 212)">/</span><span class="token operator" style="color:rgb(212, 212, 212)">&gt;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><div role="tabpanel" class="tabItem__kUE" hidden=""><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">setLocalListeners</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">localParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">object </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">ParticipantEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamEnabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">equals</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> ignoreCase </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              val track </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> VideoTrack</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              localVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamDisabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">equals</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> ignoreCase </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">              localVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">removeTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="step-5--working-with-remote-participants">Step 5 : Working with Remote Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#step-5--working-with-remote-participants" class="hash-link" aria-label="Direct link to Step 5 : Working with Remote Participants" title="Direct link to Step 5 : Working with Remote Participants">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="get-connected-participants">Get Connected Participants<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#get-connected-participants" class="hash-link" aria-label="Direct link to Get Connected Participants" title="Direct link to Get Connected Participants">​</a></h3>
<ul>
<li>
<p>In Twilio , you can get the all the connected remote participants through <code>getRemoteParticipants()</code> method of <code>Room</code> class.</p>
</li>
<li>
<p>Similarly, In VideoSDK you can get all the connected participant using <code>getParticipants()</code> method of <code>Meeting</code> class.</p>
</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// Get the first participant from the room</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">val participant </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">remoteParticipants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">i</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"RemoteParticipants"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">identity </span><span class="token operator" style="color:rgb(212, 212, 212)">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">" is in the room."</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">// Get the first participant from the meeting</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">val participant </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">participants</span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token number" style="color:rgb(181, 206, 168)">0</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">Log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">i</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"RemoteParticipants"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">displayName </span><span class="token operator" style="color:rgb(212, 212, 212)">+</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">" is in the room."</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="display-a-remote-participants-video">Display a Remote Participant's Video<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#display-a-remote-participants-video" class="hash-link" aria-label="Direct link to Display a Remote Participant's Video" title="Direct link to Display a Remote Participant's Video">​</a></h3>
<ul>
<li>
<p>In Twilio, you receive events <code>onVideoTrackSubscribed</code> and <code>onVideoTrackUnsubscribed</code> whenever a remote participant enabled or disabled their webcam. These events notify you when a participant starts or stops sharing their video.</p>
</li>
<li>
<p>Similarly, in VideoSDK, you have <code>onStreamEnabled</code> and <code>onStreamDisabled</code> events. These events serve a similar purpose for both local and remote participants, triggered whenever participant enabled or disabled their webcam respectively.</p>
</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">roomListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener</span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token literal-property property">object</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantConnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">setListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">remoteParticipantListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">remoteParticipantListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener</span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token literal-property property">object</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> RemoteParticipant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onVideoTrackSubscribed</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">          </span><span class="token parameter literal-property property">remoteVideoTrackPublication</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteVideoTrackPublication</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">          </span><span class="token parameter literal-property property">remoteVideoTrack</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          remoteVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addSink</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participantVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onVideoTrackUnsubscribed</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          </span><span class="token parameter literal-property property">remoteParticipant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteParticipant</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">          </span><span class="token parameter literal-property property">remoteVideoTrackPublication</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteVideoTrackPublication</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token parameter">          </span><span class="token parameter literal-property property">remoteVideoTrack</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> RemoteVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          remoteVideoTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">removeSink</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participantVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> val meetingEventListener</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> MeetingEventListener </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> object </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">MeetingEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onParticipantJoined</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">participant</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        participant</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">participantEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> val participantEventListener</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> ParticipantEventListener </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token literal-property property">object</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">ParticipantEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamEnabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">equals</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> ignoreCase </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            val track </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> VideoTrack</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            participantVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">addTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">track</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onStreamDisabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">stream</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">kind</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">equals</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token string" style="color:rgb(206, 145, 120)">"video"</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> ignoreCase </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            val track</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> VideoTrack </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> stream</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">track </span><span class="token keyword" style="color:rgb(86, 156, 214)">as</span><span class="token plain"> VideoTrack</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            participantVideoView</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">removeTrack</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="features">Features<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="toggle-mic-of-local-participant">Toggle Mic of Local participant<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#toggle-mic-of-local-participant" class="hash-link" aria-label="Direct link to Toggle Mic of Local participant" title="Direct link to Toggle Mic of Local participant">​</a></h3>
<ul>
<li>In Twilio, you can <strong>mute/unmute</strong> your LocalAudioTracks (microphone) by the setting <code>enable</code> property to <code>true/false</code>.</li>
<li>In VideoSDK, you can <strong>mute/unmute</strong> Local participant’s microphone through <code>muteMic()</code> and <code>unmuteMic()</code> method of <code>Meeting</code> object.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">muteClickListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        localAudioTrack</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token plain">let </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            val enable </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token plain">it</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">isEnabled</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            it</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">enable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">enable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">muteClickListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">micEnabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">muteMic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">unmuteMic</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        micEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token plain">micEnabled</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="toggle-webcam-of-local-participant">Toggle Webcam of Local participant<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#toggle-webcam-of-local-participant" class="hash-link" aria-label="Direct link to Toggle Webcam of Local participant" title="Direct link to Toggle Webcam of Local participant">​</a></h3>
<ul>
<li>In Twilio, you can <strong>enable/disable</strong> your LocalVideoTracks (WebCam) by the setting enable property to <code>true/false</code>.</li>
<li>In VideoSDK, you can <strong>enable/disable</strong> Local participant’s WebCam by calling <code>enableWebcam()</code> and <code>disableWebcam()</code> method of <code>Meeting</code> object.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">localVideoClickListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        localVideoTrack</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token plain">let </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            val enable </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token plain">it</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">isEnabled</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            it</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">enable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">enable</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">localVideoClickListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">OnClickListener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token keyword" style="color:rgb(86, 156, 214)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">webcamEnabled</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">disableWebcam</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(86, 156, 214)">else</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">            meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">enableWebcam</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">        webcamEnabled</span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token operator" style="color:rgb(212, 212, 212)">!</span><span class="token plain">webcamEnabled</span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_emO8" id="disconnect-from-a-room">Disconnect from a Room<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#disconnect-from-a-room" class="hash-link" aria-label="Direct link to Disconnect from a Room" title="Direct link to Disconnect from a Room">​</a></h3>
<ul>
<li>In Twilio, you have the ability to disconnect from a room in which you are currently participating. Other Participants will receive a <code>onParticipantDisconnected</code> event.</li>
<li>In VideoSDK, you can also disconnect from a room you are currently participating in. Other Participants will receive a <code>onParticipantLeft</code> event, while the local participant will receive a <code>onMeetingLeft</code> event.</li>
</ul>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">Twilio</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> fun </span><span class="token function" style="color:rgb(220, 220, 170)">roomListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener</span><span class="token operator" style="color:rgb(212, 212, 212)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token keyword" style="color:rgb(86, 156, 214)">return</span><span class="token plain"> </span><span class="token literal-property property">object</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> Room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">Listener </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onDisconnected</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token parameter literal-property property">room</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> Room</span><span class="token parameter punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property">e</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">:</span><span class="token parameter"> TwilioException</span><span class="token parameter operator" style="color:rgb(212, 212, 212)">?</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">          Log</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token function" style="color:rgb(220, 220, 170)">d</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token constant" style="color:rgb(100, 102, 149)">TAG</span><span class="token punctuation" style="color:rgb(212, 212, 212)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(206, 145, 120)">"Disconnected from "</span><span class="token plain"> </span><span class="token operator" style="color:rgb(212, 212, 212)">+</span><span class="token plain"> room</span><span class="token punctuation" style="color:rgb(212, 212, 212)">.</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To disconnect from a Room</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">room</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">disconnect</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<div class="tabs-container tabList_fbd4"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_v5XY tabs__item--active">VideoSDK</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem__kUE"><div class="language-js codeBlockContainer_aalF theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_MHx8"><pre tabindex="0" class="prism-code language-js codeBlock_zHgq thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_RjmQ"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">private</span><span class="token plain"> val meetingEventListener</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> MeetingEventListener </span><span class="token operator" style="color:rgb(212, 212, 212)">=</span><span class="token plain"> object </span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">MeetingEventListener</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">    override fun </span><span class="token function" style="color:rgb(220, 220, 170)">onMeetingLeft</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To leave the meeting without removing all the participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// you need to call leave() of the Meeting class.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">leave</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// To leave the meeting by removing all the participant</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// you need to call end() of the Meeting class.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#9CDCFE"><span class="token plain">meeting</span><span class="token operator" style="color:rgb(212, 212, 212)">?.</span><span class="token function" style="color:rgb(220, 220, 170)">end</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><br></span></code></pre><div class="buttonGroup_Sd8_"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_LnQD" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_t3l1"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_IiZV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="conclusion">Conclusion<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>As you conclude this migration journey, you've successfully adapted your application from Twilio to VideoSDK. The <a href="https://github.com/videosdk-live/migration-to-X/tree/main/Twilio/android-quickstart" target="_blank" rel="noopener noreferrer">developed project</a> showcases the implementation of VideoSDK in action, emphasizing its simplicity and efficiency.</p>
<p>Key Takeaways:</p>
<ul>
<li>Automatic API key generation streamlines the setup process.</li>
<li>Token generation is simplified, offering flexibility for participants.</li>
<li>Granular control over participant tokens enhances security.</li>
<li>Global scalability and minimal latency ensure a seamless user experience.</li>
</ul>
<p>Feel free to explore the developed project's codebase for a hands-on understanding of VideoSDK integration. As you transition, VideoSDK empowers your application with robust real-time communication features, providing a foundation for future scalability and innovation.</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_emO8" id="contact-us">Contact Us<a href="https://docs.videosdk.live/tutorials/migration-guide-from-twilio-to-videosdk-android-sdk#contact-us" class="hash-link" aria-label="Direct link to Contact Us" title="Direct link to Contact Us">​</a></h2>
<p>For any further assistance, questions, or community engagement, we welcome you to join our <a href="https://discord.com/invite/Gpmj6eCq5u" target="_blank" rel="noopener noreferrer">Discord channel</a>. Connect with fellow developers, share insights, and stay updated on the latest developments.</p>
<p>If you require developer support or need personalized assistance, you can schedule a session with our team through our <a href="https://bookings.videosdk.live/#/customer/discovery" target="_blank" rel="noopener noreferrer">Developer Support portal</a>. We are here to ensure a smooth integration and address any queries you may have. Your success with VideoSDK is our priority.</p>]]></content:encoded>
            <category>Migration Guide</category>
            <category>Twilio</category>
            <category>Android</category>
        </item>
    </channel>
</rss>