{"id":1582,"date":"2021-05-27T12:43:03","date_gmt":"2021-05-27T07:13:03","guid":{"rendered":"https:\/\/enablex23.vcloudx.com\/insights\/?p=1582"},"modified":"2025-06-06T06:28:36","modified_gmt":"2025-06-06T00:58:36","slug":"how-to-build-a-video-conferencing-app-for-android-with-enablex-apis","status":"publish","type":"post","link":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/","title":{"rendered":"How to build a Video Conferencing App for Android with EnableX APIs"},"content":{"rendered":"<p>Technology has changed the way businesses operate, and never in history has that change occurred so fast.<\/p>\n<p>It\u2019s even more evident with the rising trends of social distancing, remote working, and global reach. If at all you are a techie who\u2019s trying to get things done promptly, or a geek who wants to stay updated, or just someone who is simply curious about what\u2019s the next update in technology, then this blog could help add a few more feathers to your expertise.<\/p>\n<h3>Video Conferencing Infrastructure<\/h3>\n<p>It is a known fact that video conferencing or VC is a communication medium through which people (two or more) connect virtually via audio and video technologies. The backend of a video conferencing application consists of two major components:<\/p>\n<p><strong>Server:<\/strong> Your application on the device acts as a client which captures user requests via UI and sends requests to the server to carry out respective action with the help of Server APIs. These requests typically consist of creating a Room on the server where the conference will take place and providing access token to everyone who wants to join the conference, with access roles (moderator or participant).<\/p>\n<p><strong>Client:<\/strong> Now you can connect to the room using token received from the server. Use the token to join the room, publish your media stream, receive other participants\u2019 media stream and perform other activities in the video conferencing session with the help of Client APIs.<\/p>\n<p>This is how a video conferencing application works in the backend and while it may look simple, it requires a lot of things to be taken care of, including a hosting server.<\/p>\n<p>Fortunately, we have cloud-based solutions available that provide either complete solutions or necessary toolkits to develop such video conferencing applications quickly.<\/p>\n<h3>Understanding EnableX<\/h3>\n<p>We are going to build our application using EnableX \u2013 a cloud-based communications platform for modularly implementing various communication channels like<a href=\"https:\/\/www.enablex.io\/cpaas\/video-api\"> video<\/a>\/<a href=\"https:\/\/www.enablex.io\/cpaas\/voice-api\">audio<\/a>\/<a href=\"https:\/\/www.enablex.io\/cpaas\/sms-api\">SMS<\/a>\/chat in your mobile application or website. Built on a carrier-grade platform, it offers developers a full stack of <a href=\"https:\/\/www.enablex.io\/cpaas\/\">communications APIs<\/a> and all the necessary toolkits to develop an innovative and engaging communication experience.<\/p>\n<p>EnableX provides Toolkits\/SDKs for web, iOS and android, hence offering a complete omni-channel and omni-device experience.<\/p>\n<p>So, let\u2019s embark upon this journey of developing a video conferencing app in Android and turn your smartphone \u201csmarter\u201d ?.<\/p>\n<h3>Prerequisites<\/h3>\n<ol style=\"margin-left: 40px;\">\n<li>A basic-to-intermediate understanding of Java and Android SDK<\/li>\n<li>EnableX App Credentials: <a href=\"https:\/\/portal.enablex.io\/cpaas\/trial-sign-up\/\">Create an EnableX.io developer\u2019s account<\/a>.<br \/>\nOnce registered, create a project and get App credentials containing APP_ID and APP_KEY generated against the project.<\/li>\n<li>Android Studio 3 or above and Android devices 6 or above.<\/li>\n<li>Download the latest version of<a href=\"https:\/\/www.enablex.io\/developer\/video-api\/client-api\/android-toolkit\/\"> EnableX Android SDK<\/a>.<\/li>\n<\/ol>\n<p>The downloaded Android Toolkit\/SDK contains the following major classes that are responsible for conducting an end-to-end RTC session:<\/p>\n<ol style=\"margin-left: 40px;\">\n<li><strong>EnxRtc:<\/strong> This Class contains methods to connect to a room and join the room.<\/li>\n<li><strong>EnxRoom:<\/strong> This Class contains methods to handle operations within a room. e.g. connection of End-Points to EnableX Room, publishing &amp; subscribing to streams etc.<\/li>\n<li><strong>EnxStream: <\/strong>This Class handles all Media Stream related functions. For e.g., initiate, configure and transport streams to and from EnableX Media Servers, receive stream to be played etc.<\/li>\n<li><strong>EnxPlayerView:<\/strong> This Class is used to display the video stream on a EnxPlayerview.<\/li>\n<\/ol>\n<p>Learn more about EnableX basics on <a href=\"https:\/\/www.enablex.io\/developer\/video-api\/client-api\/android-toolkit\/\"> Enablex official developer documentation<\/a><\/p>\n<h3>Let\u2019s Start Building<\/h3>\n<ol>\n<li>\n<h4>Set Up New Project<\/h4>\n<ol style=\"list-style: none; margin-left: 40px;\">\n<li>1.1. Open Android Studio and select &#8211; <strong>Start a new Android Studio project<\/strong>.<\/li>\n<li>1.2. On the <strong>Choose your project<\/strong> panel, select &#8211; <strong>Phone and Tablet<\/strong> &gt; <strong>Empty Activity<\/strong>, and then click <strong>Next<\/strong>.<\/li>\n<li>1.3. Click <strong>Finish<\/strong>. Follow the on-screen instructions if you need to install any plug-ins.<\/li>\n<\/ol>\n<\/li>\n<li>\n<h4>Add Project Permissions<\/h4>\n<p>Add project permissions in the <strong>\/app\/src\/main\/AndroidManifest.xml<\/strong> file for device access according to your needs:<\/p>\n<pre><code>\r\n                 &lt;uses-permission android:name=\"android.permission.CAMERA\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.RECORD_AUDIO\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.INTERNET\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" \/&gt;\r\n                 &lt;!--EnableX Sdk requires Bluetooth permission incase users are using Bluetooth devices--&gt;\r\n                \r\n                 &lt;uses-permission android:name=\"android.permission.BLUETOOTH\" \/&gt;\r\n                 &lt;uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"  \/&gt; \r\n                 &lt;!--EnableX Sdk requires wakelock permission incase users are using proximity sensor--&gt; \r\n                \r\n                 &lt;uses-permission android:name=\"android.permission.WAKE_LOCK\" \/&gt;\r\n                \r\n                 &lt;uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\"  \/&gt;\r\n                <\/code><\/pre>\n<\/li>\n<li>\n<h4>Integrate the SDK<\/h4>\n<p>Edit the <strong> \/build.gradle<\/strong> for your project and add the following code snippet to the <strong> allprojects.repositories<\/strong> section:<\/p>\n<pre><code>\r\n                allprojects {\r\n                    repositories {\r\n                         maven  {\r\n                             url  \"https:\/\/dl.bintray.com\/enablex\/maven\" \r\n                        }\r\n                    }\r\n                }\r\n              \r\n             <\/code><\/pre>\n<p>Modify <strong> \/app\/build.gradle<\/strong> for your module and add the following code snippet to the <strong>dependencies<\/strong> section:<\/p>\n<pre>                dependencies {\r\n                    ...\r\n                    \/\/EnableX SDK for audio and video call\r\n                   implementation 'com.enxrtc:Enx-Rtc-Android:1.8.2'\r\n                  }\r\n                \r\n<\/pre>\n<\/li>\n<li>\n<h4>Generate Access Token<\/h4>\n<p>As explained above, a user requires a unique Access Token to connect to a room. The token is requested by the Application Server using<a href=\"https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\"> RESTful APIs \u2013 Server API<\/a>. Please note that you require EnableX application credentials (APP_ID and APP_KEY) to execute the following Server APIs.<\/p>\n<ol style=\"list-style: none; margin-left: 40px;\">\n<li>4.1. Create a video Room using following Server API <a href=\"https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\/createRoom\">https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\/createRoom<\/a><\/li>\n<li>4.2. Create Token for joining the Room using Room ID as received above <a href=\"https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\/createToken\">https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\/createToken<\/a><\/li>\n<li>4.3. Click Finish. Follow the on-screen instructions if you need to install any plug-ins.<\/li>\n<\/ol>\n<\/li>\n<li>\n<h4>Start Video Call<\/h4>\n<p>We have provisioned a Video Room on the EnableX server and created a token to access it. Now we can implement the actual video logic in the <strong>VideoConferenceActivity<\/strong>.<\/p>\n<ol style=\"margin-left: 40px; list-style: none;\">\n<li>5.1 Create a UI for this VideoConferenceActivity. Refer to the <a href=\"https:\/\/github.com\/EnableX\/One-to-One-Video-Call-Webrtc-Application-Sample-for-Android\/blob\/master\/app\/src\/main\/res\/layout\/activity_video_conference.xml\">.xml file<\/a> for creating a layout.<\/li>\n<li><\/li>\n<li><img decoding=\"async\" class=\"aligncenter wp-image-1583 \" src=\"https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2021\/05\/Android.jpg\" alt=\"\" width=\"207\" height=\"446\" srcset=\"https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2021\/05\/Android.jpg 509w, https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2021\/05\/Android-139x300.jpg 139w, https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2021\/05\/Android-474x1024.jpg 474w\" sizes=\"(max-width: 207px) 100vw, 207px\" \/><\/li>\n<li><\/li>\n<li>5.2 Implement onCreate() method in the VideoConferenceActivity to perform the following activities:\n<ol style=\"margin-left: 40px; list-style: none;\">\n<li>5.2.1 Initialize enableX SDK by creating EnxRtc object<\/li>\n<li>5.2.2 Join the room<\/li>\n<li>5.2.3 Setup local video stream<\/li>\n<li>5.2.4 Publish local stream<\/li>\n<li>5.2.5 Subscribe remote stream<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<ul style=\"margin-left: 20px;\">\n<li><strong> Initialize enableX SDK by creating EnxRtc object<\/strong><br \/>\nCreate an instance of EnxRtc Class to initialize the EnableX SDK.<\/p>\n<pre><code>\r\n                            EnxRtc mEnxRtc = new EnxRtc(activity, mEnxRoomObserver,\r\n                            mEnxStreamObserver);\r\n                        <\/code><\/pre>\n<p><b>Parameters:<\/b><\/p>\n<ul style=\"margin-left: 10px; list-style: none;\">\n<li><strong>activity: <\/strong> The current class instance of VideoConferenceActivity <strong>mEnxRoomObserver:<\/strong> Event listener for events related to the ongoing conference session in the Room.<\/li>\n<li><strong>MEnxStreamObserver:<\/strong> Event listener for events related to the media stream in the Room.<\/li>\n<li><strong>MEnxStreamObserver: <\/strong>Event listener for events related to the media stream in the Room.<\/li>\n<li><\/li>\n<\/ul>\n<\/li>\n<li><strong>Join the Room<\/strong><br \/>\nExecute joinRoom() method on enxrtc instance to join the video conference. JoinRoom() method returns local stream instance which is used to publish the user\u2019s local media in the Room. This basically means that once the user has joined the video conference, her video\/audio stream becomes available to everyone in the conference.<\/p>\n<pre><code>\r\n                            EnxStream localStream = enxRtc.joinRoom(mToken, mPublishStreamInfo, mRoomInfo, mAdvanceOptionsInfo);\r\n                        <\/code><\/pre>\n<p><b>Parameters:<\/b><\/p>\n<ul style=\"margin-left: 10px; list-style: none;\">\n<li><strong>&#8211; mToken: <\/strong> The token as received in Step 4 above.<\/li>\n<li><strong>&#8211; mPublishStreamInfo:<\/strong> Event listener for events related to the media stream in the Room.\n<pre><code>{\r\n                                    \"audio\": true,\r\n                                    \"video\": true,\r\n                                    \"data\": true,\r\n                                    \"framerate\": 30,\r\n                                    \"videoSize\": {\r\n                                    \"minWidth\": 320,\r\n                                    \"minHeight\": 180,\r\n                                    \"maxWidth\": 1280,\r\n                                    \"maxHeight\": 720\r\n                                    },\r\n                                    \"audioMuted\": false,\r\n                                    \"videoMuted\": false,\r\n                                    \"name\": \"shashank\",\r\n                                    \"audioOnlyMode\": false\r\n                                }\r\n                                <\/code><\/pre>\n<\/li>\n<li>&#8211; <strong>mRoomInfo:<\/strong> JSON Object containing Room information as shown below:\n<pre><code>\r\n                                    {\r\n                                        \"allow_reconnect\": true,\r\n                                        \"number_of_attempts\": 3,\r\n                                        \"timeout_interval\": 15,\r\n                                        \"activeviews\": \"view\",\r\n                                        \"playerConfiguration\": {\r\n                                        \"audiomute\": true,\r\n                                        \"videomute\": true,\r\n                                        \"bandwidth\": true,\r\n                                        \"screenshot\": true,\r\n                                        \"avatar\": true,\r\n                                        \"pinned\": true,\r\n                                        \"iconColor\": -1237980,\r\n                                        \"iconHeight\": 30,\r\n                                        \"iconWidth\": 30,\r\n                                        \"avatarHeight\": 200,\r\n                                        \"avatarWidth\": 200\r\n                                        },\r\n                                        \"forceTurn\": false,\r\n                                        \"chat_only\": false\r\n                                    }\r\n                                    \r\n                                <\/code><\/pre>\n<\/li>\n<li>&#8211;<strong>mAdvanceOptionInfo: <\/strong> JSON Array used to set advanced options like battery updates in the room as shown below:\n<pre><code>\r\n                                [\r\n                                {\r\n                                \"id\": \"battery_updates\",\r\n                                \"enable\": true\r\n                                },\r\n                                {\r\n                                \"id\": \"notify-video-resolution-change\",\r\n                                \"enable\": true\r\n                                }\r\n                            ]\r\n                            <\/code><\/pre>\n<p>The method <strong> joinRoom()<\/strong> returns localStream which is stored globally and needs to be published in the Room after user is successfully connected to the Room ( <strong>onRoomConnected callback<\/strong>).<\/li>\n<\/ul>\n<\/li>\n<li><strong>Setup local video stream<\/strong><br \/>\nTo start a local video (that is to see yourself on the screen), you need to get enxplayerview instance from local stream and add this enxplayerview into your view which is defined in xml.<\/p>\n<pre><code>\r\n                            EnxPlayerView localvideo = localStream.mEnxPlayerView\r\n                            moderator.addView(localvideo)\r\n                        <\/code><\/pre>\n<p>moderator is frameLayout in the VideoConferenceActivity xml.<\/li>\n<li><strong>Publish local stream<\/strong><br \/>\nUse <strong>enxRoom.publish(localStream)<\/strong> method to publish local stream to the connected roomAfter the user is connected to the Room, you can call the <strong>publish ()<\/strong> method in the callback <strong> onRoomConnected(EnxRoom enxRoom, JSONObject roomMetaData)<\/strong>Once the local stream is published to the Room, all participants are notified with callback <strong>onStreamAdded(EnxStream stream)<\/strong><\/p>\n<pre><code>enxRoom.publish(localStream);<\/code><\/pre>\n<\/li>\n<li><strong>Subscribe remote stream<\/strong><br \/>\nSo far, we have ensured that the user is connected to the Room and has published his\/her local stream in the Room. Now the user must also receive media stream from other participants connected to the Room.They must subscribe to each stream individually to receive it.The <strong> publish ()<\/strong> method triggers a callback <strong>onStreamAdded(EnxStream stream)<\/strong> notifying everyone that a new stream has entered the Room so to receive the stream you need to subscribe it using <strong>subscribe(remotestream)<\/strong> method.<\/p>\n<pre><code>\r\n                        enxRoom.subscribe(stream);\r\n                        <\/code><\/pre>\n<\/li>\n<li><strong>Setup remote video stream<\/strong><br \/>\nEnableX SDK provides pre-defined Video Grid for playing all the Remote Streams received at the Client end point.The RecyclerView allows you to play the most active media streams (Active Talkers in the Room) in a rotating manner. The <strong>VideoConferenceActivity <\/strong> needs to implement <strong>EnxActiveTalkerViewObserver<\/strong> and set observer to handle active talker view by calling<br \/>\n<strong>enxRoom.setActiveTalkerViewObserver(EnxActiveTalkerViewObserver enxActiveTalkerViewObserver)<\/strong><\/p>\n<pre><code>\r\n                                public class VideoConferenceActivity extends AppCompatActivity                    \r\n                                implements EnxActiveTalkerViewObserver{\r\n                    \r\n                            @Override\r\n                                public void onActiveTalkerList(RecyclerView recyclerView) {\r\n                    \r\n                                    if (recyclerView == null) {\r\n                                        participant.removeAllViews();\r\n                                    } else{\r\n                                        participant.addView(recyclerView);\r\n                                    }\r\n                                }\r\n                            }\r\n                           <\/code><\/pre>\n<p><strong>Note: <\/strong>participant is frameLayout in the VideoConferenceActivity xml.<\/p>\n<p>We have now implemented a video conferencing application which allows users to create or join a video session, see and listen to each other.<\/p>\n<p>However, no video conferencing application is complete without the controls mentioned in the table below. While this blog focuses on the basic features to get you started and help you create a video conferencing app \u201cquickly and easily\u201d, you can still explore more features and become a Pro! I have mentioned some references towards the end of the blog.<\/p>\n<p>Let\u2019s quickly sum up important control features in a video call:<\/p>\n<table style=\"width: 100%; border: 1px solid #000;\" border=\"1\">\n<tbody>\n<tr>\n<th>Feature<\/th>\n<th>API<\/th>\n<\/tr>\n<tr>\n<td>Mute Audio<\/td>\n<td>localStream.muteSelfAudio(true);<\/td>\n<\/tr>\n<tr>\n<td>Unmute Audio<\/td>\n<td>localStream.muteSelfAudio(false);<\/td>\n<\/tr>\n<tr>\n<td>Mute Video<\/td>\n<td>localStream.muteSelfVideo(true);<\/td>\n<\/tr>\n<tr>\n<td>Unmute Video<\/td>\n<td>localStream.muteSelfVideo(false);<\/td>\n<\/tr>\n<tr>\n<td>Switch Camera &#8211; Front and Rear<\/td>\n<td>localStream.switchCamera();<\/td>\n<\/tr>\n<tr>\n<td>Switch Audio Device (Earpiece\/Speaker\/Wired Headset\/Bluetooth) subject to availability<\/td>\n<td>enxRoom.switchMediaDevice(&#8220;audio-device-name&#8221;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<h4>Build and Test on Device<\/h4>\n<p>It\u2019s time to test our application!<\/p>\n<ul>\n<li>Go to Android Studio.<\/li>\n<li>Make sure your Android device is plugged in<\/li>\n<li>Click on Run to build the application on your device.<\/li>\n<\/ul>\n<p>Remember to build the application on two devices to start the video call.<\/p>\n<p>If you can call yourself from one device to another then, super! You just created a video-conferencing application with a little help from EnableX ?<\/p>\n<p>There is so much more you can do with the EnableX Toolkit! Don\u2019t stop here. Explore and build more!<\/p>\n<p>Check out more features on <a href=\"https:\/\/www.enablex.io\/developer\/video-api\/client-api\/android-toolkit\/\"> EnableX Android Documentation<\/a> and find the reference code for this blog in<a href=\"https:\/\/github.com\/EnableX\/One-to-One-Video-Call-Webrtc-Application-Sample-for-Android\"> Github Application Sample For Android<\/a>.<\/p>\n<p>Happy Coding!<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Technology has changed the way businesses operate, and never in history has that change occurred so fast. It\u2019s even more evident with the rising trends of social distancing, remote working, and global reach. If at all you are a techie who\u2019s trying to get things done promptly, or a geek who wants to stay updated, &#8230;<\/p>\n","protected":false},"author":25,"featured_media":1584,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[134,122,95,23,133,93,94,110],"tags":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to build a Video Conferencing App for Android with EnableX APIs - Insights about video API, SMS API; WhatsApp for Business API<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to build a Video Conferencing App for Android with EnableX APIs - Insights about video API, SMS API; WhatsApp for Business API\" \/>\n<meta property=\"og:description\" content=\"Technology has changed the way businesses operate, and never in history has that change occurred so fast. It\u2019s even more evident with the rising trends of social distancing, remote working, and global reach. If at all you are a techie who\u2019s trying to get things done promptly, or a geek who wants to stay updated, ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/\" \/>\n<meta property=\"og:site_name\" content=\"Insights about video API, SMS API; WhatsApp for Business API\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-27T07:13:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-06T00:58:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2021\/05\/Video-Conferencing-Android-App.png\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"270\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jason Wills\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@enablexio\" \/>\n<meta name=\"twitter:site\" content=\"@enablexio\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jason Wills\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to build a Video Conferencing App for Android with EnableX APIs - Insights about video API, SMS API; WhatsApp for Business API","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/","og_locale":"en_US","og_type":"article","og_title":"How to build a Video Conferencing App for Android with EnableX APIs - Insights about video API, SMS API; WhatsApp for Business API","og_description":"Technology has changed the way businesses operate, and never in history has that change occurred so fast. It\u2019s even more evident with the rising trends of social distancing, remote working, and global reach. If at all you are a techie who\u2019s trying to get things done promptly, or a geek who wants to stay updated, ...","og_url":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/","og_site_name":"Insights about video API, SMS API; WhatsApp for Business API","article_published_time":"2021-05-27T07:13:03+00:00","article_modified_time":"2025-06-06T00:58:36+00:00","og_image":[{"width":768,"height":270,"url":"https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2021\/05\/Video-Conferencing-Android-App.png","type":"image\/png"}],"author":"Jason Wills","twitter_card":"summary_large_image","twitter_creator":"@enablexio","twitter_site":"@enablexio","twitter_misc":{"Written by":"Jason Wills","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/#article","isPartOf":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/"},"author":{"name":"Jason Wills","@id":"https:\/\/enablex23.vcloudx.com\/insights\/#\/schema\/person\/422d2b153c3c96827da141c6446d11a3"},"headline":"How to build a Video Conferencing App for Android with EnableX APIs","datePublished":"2021-05-27T07:13:03+00:00","dateModified":"2025-06-06T00:58:36+00:00","mainEntityOfPage":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/"},"wordCount":1562,"publisher":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/#organization"},"articleSection":["Codes &amp; Tutorials","Communication APIs","SMS API","TechTalks","Tips &amp; How-To","Video API","Voice API","WebRTC"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/","url":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/","name":"How to build a Video Conferencing App for Android with EnableX APIs - Insights about video API, SMS API; WhatsApp for Business API","isPartOf":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/#website"},"datePublished":"2021-05-27T07:13:03+00:00","dateModified":"2025-06-06T00:58:36+00:00","breadcrumb":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/enablex23.vcloudx.com\/insights\/how-to-build-a-video-conferencing-app-for-android-with-enablex-apis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/enablex23.vcloudx.com\/insights\/"},{"@type":"ListItem","position":2,"name":"How to build a Video Conferencing App for Android with EnableX APIs"}]},{"@type":"WebSite","@id":"https:\/\/enablex23.vcloudx.com\/insights\/#website","url":"https:\/\/enablex23.vcloudx.com\/insights\/","name":"Enablex","description":"","publisher":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/enablex23.vcloudx.com\/insights\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/enablex23.vcloudx.com\/insights\/#organization","name":"Enablex","url":"https:\/\/enablex23.vcloudx.com\/insights\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/enablex23.vcloudx.com\/insights\/#\/schema\/logo\/image\/","url":"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2023\/05\/EnableX-Logo-01.png","contentUrl":"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2023\/05\/EnableX-Logo-01.png","width":17382,"height":3567,"caption":"Enablex"},"image":{"@id":"https:\/\/enablex23.vcloudx.com\/insights\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/twitter.com\/enablexio","https:\/\/www.linkedin.com\/company\/vcloudx"]},{"@type":"Person","@id":"https:\/\/enablex23.vcloudx.com\/insights\/#\/schema\/person\/422d2b153c3c96827da141c6446d11a3","name":"Jason Wills","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/enablex23.vcloudx.com\/insights\/#\/schema\/person\/image\/","url":"https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2025\/05\/envato-labs-ai-f14f6981-d7f8-4c3e-9234-00323c7d5ca0-96x96.jpg","contentUrl":"https:\/\/enablex23.vcloudx.com\/insights\/wp-content\/uploads\/2025\/05\/envato-labs-ai-f14f6981-d7f8-4c3e-9234-00323c7d5ca0-96x96.jpg","caption":"Jason Wills"},"description":"Jason works behind the scenes at EnableX, helping to turn complex tech into practical tools that developers and businesses can actually use. With several years of experience in product development and platform architecture, he focuses on making communication technologies simpler, smarter and easier to build with. Whether he's writing step-by-step guides, product tips or explaining how our APIs work, Jason keeps things clear and useful.","sameAs":["https:\/\/www.enablex.io\/","https:\/\/www.linkedin.com\/company\/vcloudx\/"],"url":"https:\/\/enablex23.vcloudx.com\/insights\/author\/jason-wills\/"}]}},"_links":{"self":[{"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/posts\/1582"}],"collection":[{"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/comments?post=1582"}],"version-history":[{"count":0,"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/posts\/1582\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/media\/1584"}],"wp:attachment":[{"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/media?parent=1582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/categories?post=1582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enablex23.vcloudx.com\/insights\/wp-json\/wp\/v2\/tags?post=1582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}