Getting Started

In which Programming Languages are the Code Samples available?

We provide Code Samples in various programming languages for different platforms, as shown below:

  • For Android: Java/Kotlin 
  • For iOS: Swift 
  • For Web: NodeJS/PHP/Laravel/Python/VueJS 
  • For Hybrid: React Native 

Refer to our GitHub Repository for Sample Codes.

Can I run the Sample Application on HTTP?

No, WebRTC is not supported on HTTP. You can run a sample application on HTTPS only. 

Can I try the Sample Application on localhost?

No, WebRTC is not supported on localhost anymore.  

How to generate SSL Certificates for testing a Sample Application?

Your Application Server must run on a secured Web Server; hence, use a valid SSL certificate for your domain and use it to configure your Web Service to make your domain accessible on HTTPS. 

Alternatively, you may also use a self-signed certificate to run the Application Server. Some of the websites that generate self-signed certificates are: 

Can I build a Desktop Application using EnableX?

You can use hybrid frameworks like Electron and develop Desktop applications using EnableX Web SDK

Do you provide SDK for Windows Desktop Applications?

We do not provide SDK for Windows Desktop Applications as of now. However, you can use Hybrid frameworks like Electron and develop Desktop Applications using EnableX Web SDK

Do you provide Group Calling/Conferencing functionality?

Yes, we support One-to-One calling as well as Conferencing.  

Can I get a Video Call demo?

  • You can try a Quick Video Call Demo to assess EnableX Video performance. 
  • Sign up with Demo Zone to access demo applications covering various use-cases of EnableX solutions and learn to integrate EnableX into your application. 
  • You can also check out our Sample Applications in GitHub as per your technical requirements that will provide you an insight into the implementation details. 

Do you have Code Samples available?

Yes, we provide code samples for Web, Android, iOS, and Hybrid applications in different programming languages.  

How to Guide

Native & Hybrid SDK

How to set up and run Cordova/Ionic Application on iOS?

  1. Add Cordova Enablex plugin.
  2. Add iOS project. 
ionic cordova platform add ios/ cordova platform add ios 

This installs all dependency EnableX libraries through Pod.  

  1. Go to your iOS project folder and open Xcode. 
  2. Set up your certificate.  
  3. Build the app either through the command line or through Xcode. 

How to setup EnableX Plugin in Flutter?

To setup EnableX Plugin in Flutter, follow the steps below:

  • Add flutter plugin in pubspec.yaml.
enx_flutter_plugin: ^latest version 

  • Go to the Android folder in project-level Gradle. 
  • Add the following code within the “all project” section: 
flatDir { 
dirs 'src/main/libs' 
dirs project(':enx_flutter_plugin').file('libs') 
} 

How to setup EnableX Plugin and dependency Plugin in Android native Application?

Follow the steps below to setup EnableX Plugin and dependency Plugin in Android:

  1. Download the latest SDK version here. 
  1. Extract AAR file from the zipped folder and import it into the Application. 
  1. Add required dependency in app-level Gradle.  
implementation "org.webrtc:google-webrtc:1.0.32006"  
implementation "io.socket:socket.io-client:1.0.0" 

How to setup and run Cordova/Ionic Application on iOS?

  1. Add Cordova Enablex plugin.
  2. Add iOS project. 
ionic cordova platform add ios/ cordova platform add ios 

This installs all dependency EnableX libraries through Pod.  

  1. Go to your iOS project folder and open Xcode. 
  2. Set up your certificate.  
  3. Build the app either through the command line or through Xcode. 

How to set up and run Cordova/Ionic Application on Android?

To set up Cordova/Ionic application on Android, follow the steps given below after adding Cordova EnableX plugin:  

  • Step 1: Go inside the Cordova project and open Android folder. 

If Android platform is already added, remove Android and add again using the below command: 

ionic cordova platform rm android && ionic cordova platform add android 
  • Step 2: Set the Minimum SDK version and desugaring in gradle.properties file as shown below:
android.useAndroidX=true 
android.enableJetifier=true 
cdvMinSdkVersion=21 
android.enableDexingArtifactTransform.desugaring=false 

  • Step 3. Add the required libraries like webrtc and socket in the project. properties file as shown below: 
cordova.system.library.7=org.webrtc:google-webrtc:1.0.32006 
cordova.system.library.8=io.socket:socket.io-client:1.0.0 

  • Step 4: If you face “merge debug resource failed” error, then add packagingOptions in app-level build.gradle file in Android block. 
Execution failed for task ':app:mergeDebugJavaResource'. 

> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade 

   > More than one file was found with OS independent path 'META-INF/DEPENDENCIES'. 
packagingOptions { 
        exclude 'META-INF/DEPENDENCIES' 
        exclude 'META-INF/LICENSE' 
        exclude 'META-INF/LICENSE.txt' 
        exclude 'META-INF/license.txt' 
        exclude 'META-INF/NOTICE' 
        exclude 'META-INF/NOTICE.txt' 
        exclude 'META-INF/notice.txt' 
        exclude 'META-INF/ASL2.0' 
        exclude("META-INF/*.kotlin_module")  
      } 

How to integrate Video Calling capability in an Android Application?

You can utilize EnableX Android SDK that provides all the necessary APIs to implement video calling in your Android application.  

Download EnableX Android SDK here.   

How to integrate Video Calling capability in an iOS Application?

You can utilize EnableX iOS SDK that provides all the necessary APIs to implement video calling in your iOS application.  

Download EnableX iOS SDK here.

Web Browsers

How to integrate Video Calling capability in a Web Browser-based Application?

You can utilize EnableX Web SDK that provides all the necessary APIs to implement video calling in your web application.  

Download EnableX Web SDK here 

General

How to call the Server API using Postman?

To call Server APIs using Postman: 

  • Create a free account on EnableX.
  • Create your Project.
  • Get the APP ID and APP KEY generated against the Project. 
  • Login to Postman and go to your workspace. 
  • Create a Request. 
  • Go to Authorization and select type as Basic Auth. 
  • Add APP ID as username and APP KEY as password.
  • Enter Request URL and Request Type (GET/PUT/POST).  
  • Click on the Send button to see the response. 

How to switch the default Audio output to Speaker?

Earpieces are the default audio device. On receiving the Active-Talker event after joining the EnableX room, you can switch the audio output to a speaker or any other connected audio device. The Active-Talker event gets triggered whenever there is a change in the Active Talker list. Therefore, use proper flag checks to direct the audio output to speakers in an atomic manner.  

Use the following API list to switch the audio devices: 

Android:

  • Get the list of connected devices.

https://www.enablex.io/developer/video-api/client-api/android-toolkit/get-devices 

  • Switch to the desired audio media device.

https://www.enablex.io/developer/video-api/client-api/android-toolkit/switch-camera-mic-speaker/

iOS:

  • Get the list of connected devices. 

https://www.enablex.io/developer/video-api/client-api/ios-toolkit/get-devices

  • Switch to the desired audio media device.

https://www.enablex.io/developer/video-api/client-api/ios-toolkit/switch-camera-mic-speaker/ 

How can I quickly build a prototype using EnableX?

You can get started in four simple steps to see EnableX in action.

  1. Create a Free Account on EnableX.
  1. After signing up, log in to the EnableX Portal and create your Project. 
  1. You will get Project Credentials (APP-ID and APP-KEY) generated against your project. You require these credentials to access EnableX API. 
  1. You can download a sample application of your choice and try it out to see EnableX in action. Refer to the list of sample applications on GitHub. Follow the instructions as given in the respective ReadMe docs in the sample application. 

In-Session Controls

Can I take a snapshot of any other participant’s video stream during a session?

Yes, you can use the EnxStream.getVideoFrameImage() method to take the snapshot of a video stream during a session. The image from the video stream will be captured as raw bitmap data into the Canvas DOM Element. 

Learn more about Taking Image Snapshot from a Video Stream 

Can I run two presentations, Screen Share & Canvas Streaming at the same time?

No, only one presentation can be active in the room at a time.

How can I mute/unmute Audio or Video of any participant in the room?

Only a Moderator has the authority to mute/unmute audio or video of any other participant in the room. The following APIs are used to perform this operation:

  • EnxRoom.hardMuteUserAudio(clientId, Callback)
  • EnxRoom.hardMuteUserVideo(clientId, Callback)
  • EnxRoom.hardUnmuteUserAudio(clientId, Callback)
  • EnxRoom.hardUnmuteUserVideo(clientId, Callback)

Where clientID is the participant’s Id that needs to be muted/unmuted.

Refer to the Hard Mute/Unmute API specification in more detail here.

How can I join a video room in “Voice-only” mode?

If you want to switch to an audio-only call, i.e., you want to neither receive anyone’s video nor publish your video, you can use EnxRoom.setAudioOnlyMode() method. This method acts as a toggle to switch between audio-only and audio-video calls.

room.setAudioOnlyMode(true);   // Switched to Audio-Only call
room.setAudioOnlyMode(false);  // Switched back to Audio-Video call

Learn more about How to change to Audio-only Call here.

What is an Active Talker List?

For multi-party conference calls, the demand for computing power and bandwidth grows multiple folds as the number of participants in a call session increases. Hence, burdening the client with the processing of numerous incoming and outgoing streams. To overcome this challenge, EnableX has implemented an Active Talker list.

At any given point in time, the number of participants actively talking is limited. In large conferences, you have a few talkers and more listeners who might take turns to talk hence it is not required to process all the streams simultaneously. An active talkers list consists of 12 actively talking users at a given time which keeps getting updated as the users take turns to talk. The UI is also generally configured to display streams of active talkers.

What is the maximum number of participants allowed in a Video Call?

EnableX Video Room works in two different modes with a different number of participants as given below:

  • Group Mode: up to 100 participants
  • Webinar Mode: up to 1000 participants

Session Recording

Can I store recordings on my private cloud?

Recording takes place at the EnableX Media Server which hosts the Video Session. It is not possible to specify a third-party Web Server for recording. However, recordings can be fetched or be delivered to any location post-session.  

Can a participant start/stop a recording?

No, only a Moderator can start/stop a recording.

Know how a Moderator can Assign a Moderator Role to a Participant during a session. 

How do I set up a Notification URL for receiving notifications when the recording is available for download?

EnableX sends an HTTP POST response to a designated Notification URL as soon as a recording file is available for download. You can set up a Notification URL for your project through the Project’s Video Service Settings on the Portal as shown below:

The HTTP POST response is sent with JSON Raw Body to the URL.

How long does it take for a recorded Video Session to get delivered?

It takes around 5 – 30 minutes to create a Session Playable File post the session. Once the Session Playable File has been created, the Delivery Service conducts deliveries in batches which takes another 15-60 minutes depending on the Queue and the File Size.

How can I fetch a Video Session recording?

There are 2 types of Recorded Files available for download:

  • Individual Participants’ Stream Recording Files: Available only if you have subscribed to the recording service and have recorded your sessions.
  • Transcoded Re-playable Session: It’s a single composite video file that consists of all the participant’s streams during the session. It is available only if you have subscribed to the Recording & Transcoding Services and have recorded your sessions.

You can access the recordings in the following ways:

What is the maximum file size of a recorded Video Session?

There are two types of recorded files:

  • Individual Stream Recording file: It contains individual Streams in an RTC session.
  • Transcoded file: It is a single video file comprising all the individual Streams combined.
  • Individual Stream Recording File Size:
    • HD 600MB (Approx.)/Hour (Max size).
    • HD 10MB (Approx.)/ Minute
    • SD 300MB (Approx.)/Hour (Max size).
    • SD 5MB (Approx.)/ Minute
  • Transcoded File Size:
    • SD 300MB (Approx.)/Hour (Max size).
    • SD 5MB (Approx.)/ Minute

What is the video resolution of a recorded Video Session?

The video resolution of a recorded individual video stream is the same as the video resolution of the original video stream, which is 720p for HD, 480p for SD, and 360p for LD.

For recorded transcoded streams, the video resolution can vary between a minimum 360p (LD) to a maximum of 720p (HD), depending on the original video resolution and some other factors.

How can I record a Video Session?

A moderator can start and stop recording of a session on the fly. Use the following methods to start / stop recording:

// To start recording
room.startRecord( function( result, error ) { 
     if (result == 0) { 
     // Recording started 
} }); 

// To stop recording 
room.stopRecord( function( result, error ) { 
     if (result == 0){ 
     // Recording stopped 
} }); 

// Notify all that session is being recorded
room.addEventListener( "room-record-on", function(event) { 
     // Recording started, Update UI 
     // event.message.moderatorId = Moderator who stated recording. 
}); 

// Notify all that recording has stopped
room.addEventListener( "room-record-off", function(event) { 
     // Recording stopped, Update UI 
     // event.message.moderatorId = Moderator who stopped recording. 
});

Learn more about Recording a Session here.

Usage Data & Billing

How is the pricing for live streaming calculated?

The pricing is calculated based on Total Participant Minutes (number of participants * duration of the call) * $0.004.

Please send an email to [email protected] for any pricing-related inquiry.

On what basis would I be billed? Does EnableX bill per minute or per second?

The time at which the user is successfully connected to a room till the time at which the user gets disconnected from the room is billed on a per-minute basis. The billing rate is applicable to each user in the room individually.

How are the recording minutes charged?

The Billable Recording Minutes is the sum of the time spent by each participant in a call. For example, the Total Billable Recording Minutes for a 30-minute call with 5 participants is:

Billable Recording Minutes = 30 (Duration of Call) * 5 (Number of Participants) = 150 minutes.

Here it is to be noted that all calls are recorded as individual streams by default. For a composite stream, transcoding is required that is chargeable. Transcoding is charged on the basis of the total duration of the call irrespective of the number of participants. So, in the above example, transcoding will be charged for 30 minutes only. The total duration of the call is calculated as the in-time for the first participant to enter the call and the out-time for the last participant to leave the call.

The recorded files are available at no extra cost for download in a maximum of 72 hours from the time of creation and it’s automatically deleted from the system after 72 hours. If you want us to store the recording for longer, the same can be facilitated at a monthly fee per GB.

How do I calculate participant minutes?

Participant minutes are calculated as the time (in minutes) spent by each participant in a call and Total Participant Minutes is the sum of the time spent by each participant in the call. For example, the total participant minutes for 5 participants in a 30-minute call is as given below:

Total Participant Minutes = 5 (Number of participants) * 30 (Duration of the Call) = 150 minutes.

The system captures the participant start time and disconnect time as the time when they get connected and disconnected to the room respectively.

If a participant is disconnected midway in the call and re-joins, the system makes two entries in the conference report.

Can I get detailed call logs for all the sessions conducted?

Yes, you can get the Call Detail Report (CDR) for all the sessions conducted in a room through a Rest API call as shown below:

GET https://api.enablex.io/video/v1/cdr/room/{{$ROOM_ID}}
Authorization: Basic XXXXXXX

Learn more about How to fetch CDR with more filtering options.

How can I fetch session usage data for a given time period?

Use the following Rest API Get request call to fetch desired CDR for a period:

GET https://api.enablex.io/video/v1/cdr/period/{{$FROM_DATE}}/{{$TO_DATE}}
Authorization: Basic XXXXXXX

You may also fetch CDR for:

Learn How to fetch CDR in detail here

How can I retrieve session usage data?

You can get the session usage data of your room via rest API call as shown below:

GET https://api.enablex.io/video/v1/cdr/room/{{$ROOM_ID}}
Authorization: Basic XXXXXXX

Alternatively, you can download the summary of your session CDR from the Portal Dashboard.

Read more about Video API Call Detail Report (CDR).

Display UI

General

Can I change the video resolution for Canvas at run-time?

No, you cannot change the video resolution for Canvas at run-time. This can be configured while initiating Canvas Streaming.

Can I share my Desktop using EnableX?

Yes, you can use the screen-sharing feature to share your desktop. EnableX provides EnxRoom.startScreenShare() method to start screen-sharing. 

Refer to the Screen Sharing APIs and Implementation for more details. 
 
 

Can I change the Video resolution of a Room at run-time?

Any changes in the Room configuration can only reflect in the subsequent session.  You can change the video resolution by updating “quality” in the Room JSON Raw Body as shown below: 

HTTP PATCH -H “Authorization: Basic $(echo -ne “: ” | base64 –wrap 0)” \ -H “content-type: application/json” -d ' 
{ 
     “name”: “test Room”, “settings”: { 
     “participants”: “6”, “quality”: “SD”, “auto_recording”: true 
}' “https://api.enablex.io/v1/rooms/”
  • HD quality = 720 p 
  • SD quality = 480 p 
  • LD quality = 240 p 

What is the use of maxVideoLayer in the Stream property?

To help stream subscribers receive the best video quality subject to the available bandwidth, stream publishers must ensure that their streams carry multiple video layers of different quality. The Auto Bandwidth Detection feature detects the subscriber’s bandwidth and switches to the respective video layer. A local stream can be configured with the following layers by passing the respective value in the maxVideoLayers. 

  • 1 = HD 720p layer only 
  • 2 = HD 720p & SD 480p layers 
  • 3 = HD 720p, SD 480p & LD 240p/180p layers 

Does EnableX SDK provide mirror property for a video stream?

No, EnableX does not have API support to flip the video horizontally. However, UI developers can achieve this using CSS.  

What is the Common Aspect Ratio of the Video frame for any stream?

The Common Aspect Ratio of the Video frame is 16:9.

How can I change the video quality of my Room from SD to HD and vice-versa?

You can update Room Settings in the Room’s JSON Raw Body using our Rest API Service:

HTTP PATCH \ -H "Authorization: Basic $(echo -ne ": " | base64 --wrap 0)" \ -H "content-type: application/json" -d ' 
{ 
   "name": "test Room", 
   "settings": { 
   "participants": "6", 
   "quality": "SD", // possible values: SD,HD, and LD 
   "auto_recording": true 
} 
}' "https://api.enablex.io/video/v1/rooms/"

Learn more about Configuring a Room here. 

Native & Hybrid SDK

How to get a full view of Active Talkers instead of a list of Active Talkers?

The key activeviews needs to be supplied value as view in the Roominfo JSON while joining the room. 

{
  "allow_reconnect": true,
  "number_of_attempts": 3,	// max 3 attempts allowed for reconnect 
  "timeout_interval": 45,	// wait time interval for reconnect 
  "playerConfiguration": {},	// option for player configure
  "activeviews": "view"
} 

This must be done before joining the conference to bring the changes into effect.
 

How can I make changes in the video appearance in terms of icons, avatar, and colors?

You can make any changes in the video appearance by updating values in the PlayerConfiguration JSON Raw Body.

PlayerConfiguration = {
     "avatar": false,// To hide Avatar
     "audiomute": false,// To hide Mic Icon
     "videomute": false,// To hide Camera Icon
     "bandwidth": false,// To hide Low bandwidth Icon
     "screenshot": false,// To hide Screen Shot Button
     "iconColor" :"#012e4b"// Icon Color
}; 

Network Requirement

What is the minimum bandwidth required to support EnableX services?

Video Frame Rate and Picture Resolution depends on the bandwidth available at the client endpoint. The table given below shows the mapping between video resolution and required bandwidth to achieve the same: 

Bandwidth requiredVideo Resolution
> 1.2 Mbps720p
600 Kbps -1.2 Mbps480p
200 Kbps – 600 Kbps240p
< 200 KbpsAudio-only mode

Is there a way to test my network configuration?

You can use EnableX WebRTC Test Tool to test your network configuration.  

Additionally, you can also utilize our Pre-Call API to add network testing functionality to your application.

Why are my calls getting disconnected repeatedly?

Extreme network fluctuation could be a possible reason for the frequent disconnection of your Application/Browser. If you have enabled auto-reconnection in the Room configuration, then your application will get reconnected when the network connection is established. The connection-reconnection phenomenon continues till the network stabilizes. 

Why am I constantly getting low bandwidth alerts?

This is an indication of network fluctuation. You will stop receiving alerts once your network stabilizes.  

What is the minimum bandwidth requirement for a Video Call?

The minimum bandwidth requirement for a video call at any point in time is at least 200kbps.  

In-Session Chat

Can I exchange chat messages without making an Audio/Video call?

Yes, you do not necessarily need to join an audio/video call to enter the Room. Once you join the Room, you can exchange text chats with other users in the Room.  

How can I add the Text Chat feature in Voice calls?

To add the text chat feature in voice calls, add the following code:

// To send message to all (Public Messaging) 
room.sendMessage("Text Message", true, [], function(data) { 
      // Message sent 
}); 

// To send to selected Participant (Private Messaging) 
room.sendMessage("Text Message", false, ["XXXX"], function(data){ 
      // Message sent 
}); 

// To receive message notification 
room.addEventListener("message-received", function (event) { 
    var InMsg = event.message; 
    if (InMsg.broadcast === true) { 
             // Handle Public Message 
    } 
    else { 
            // Handle Message from InMsg.sender 
         } 
});

Support

Do you provide Premium/Professional Support Services?

Yes, we provide live assistance as a part of premium support service. To avail premium support service contact [email protected].

How can I raise issues? Do you have Support Ticket System?

If you are facing any issue, you can raise support tickets in the EnableX Portal.

  • Go to EnableX Portal -> Dashboard.
  • Click on the Support tab on the right-hand corner.
  • Create a new ticket by selecting the Help Topic and describing the issue in detail.

The support team would get back to you at the earliest.

Do you provide 24/7 support?

  • For any support ticket, the resolution or response timeframe is 24 hrs.
  • Premium Live Support with Developer-on-call is provided between 9:00 – 19:00 hrs IST on working days.
  • To avail Premium Live Support contact [email protected].

Will I get support for integrating my application with EnableX Platform?

Yes, we provide integration support as a part of our premium service. Please get in touch with [email protected] for more details.

Integration Issues & Troubleshooting

Native & Hybrid SDK

Error: Failed to run React Native iOS Application due to App Error

Reason: It might have been caused by cache. 

Solution: To fix this issue, follow the steps given below: 

  • Step 1: Clean your iOS project.
  • Step 2: Delete your drive data.
  • Step 3: Uninstall POD.
pod deintegrate
  • Step 4: Clean POD.
pod clean
  • Step 5: Remove podFile.
rm podfile
  • Step 6: Install POD again.
pod install
  • Step 7: Open yourappName.xcworkspace
  • Step 8: Clean your project again.
  • Step 9: Connect your device and run.

Issue: Unable to run EnableX Plugin on a simulator

EnableX Plugin does not compile on a simulator because a simulator does not support devices (Camera/Mic). Therefore, the application needs to run on a real device only. 

Error: Multidex manifest merger fails on building Cordova app on Android

To fix the Multidex issue in Cordova:

Go to Android folder -> app-level build.gradle and add the following: 

implementation androidx.multidex:multidex:2.0.1  

Error: Exception encountered in class Lorg/webrtc/EglBase or in their superclasses in Flutter, e.g. No static method create()Lorg/webrtc/EglBase

To solve this issue, add the following code in gradle.properties:

android.enableDexingArtifactTransform.desugaring=false

Error: More than one file found with OS independent path ‘META-INF/LICENSE’ in Cordova on Android

To solve this error, add the following code in the app/gradle:

packagingOptions { exclude 'META-INF/DEPENDENCIES' }

Issue: No Audio after joining a call

Reason: When a user joins an EnableX Room, the audio plays on “Earpiece” by default. 

Solution: After receiving the acknowledgement for a successful Stream Publication, the user needs to switch the Audio device to “Speaker” or any other connected Audio device. 

EnxRoom.switchMediaDevice(“Speaker”); // To switch to Speaker 

To switch to any other Audio device, you need to get a list of connected Audio devices using the method shown below and use the retrieved Device name/ID to make a switch. 

EnxRoom.getDevices(); // Get list of Devices 

Error: “RNEnxRtc Plugin: class missing/class not found error” after project setup in iOS

Reason: “Bridging Header” not found. 

Solution: After setting up the project, add one blank file in Swift to create “Bridging Header” which aids in communication between objective-c and swift. 

Issue: Unable to install POD library in a React Native application

Reason: The name of the given podspec RNEnxRtc doesn’t match the expected one – enx-rtc-react-native as we have renamed our EnableX React Native plugin. 

Solution: To fix this issue, follow the steps given below: 

  • Go to your React Native Project folder > iOS > Podfile 
  • Change the following: 
    • Old: pod ‘enx-rtc-react-native', :path => '../node_modules/enx-rtc-react-native/ios/RNEnxRtc.podspec' 
    • New: pod 'RNEnxRtc', :path => '../node_modules/enx-rtc-react-native/ios/RNEnxRtc.podspec‘ 

Issue: Failed to archive React Native iOS project due to compilation error.

Reason: When an application is archived, it compiles all the source code without checking the device compatibility first. This issue is a result of EnableX iOS plugin not supporting the simulator. 

Solution: To fix this issue: 

  • Go to your Project Navigation > Pods > RNEnxRtc > Excluded Architecture. 
  • Add armv7 here. 

Follow the steps as shown in the image below: 

Issue: Failed to archive Flutter iOS project due to compilation error.

Reason: When an application is archived, it compiles all the source code without checking the device compatibility first. This issue is a result of EnableX iOS plugin not supporting the simulator. 

Solution: To fix this issue, simply delete armv7 from the valid architect. Follow the steps as shown in the image below: 

Error: Linking of libraries fails during compilation in React Native application on Android

Reason: After the Maven shutdown, the EnableX plugin, socket.io, and webRTC plugin need to be added manually. 

Solution:  

  • Go to the Android folder -> app level build.gradle and add the following:
implementation 'org.webrtc:google-webrtc:1.0.32006' 
 
implementation('io.socket:socket.io-client:1.0.0') { 
    exclude group: 'org.json', module: 'json' 
} 
  • Move the project to AndroidX. 

Error: Linking of libraries fails during compilation in React Native application on iOS

Reason: If use_frameworks! is not defined in the pod library, you get EnableX/Socket.io linking of library failed or library image not found error.

Solution: In react-native V -0.60, the auto-linking process is not available for iOS. The app developer needs to install the POD library by entering the name of the required library (static/non-static) in the pod app target section. EnableX react-native library and Socket.io library are non-static libraries and they require use_frameworks! inside Podfile in the app target section. 

Pod installation without auto-linking: 

In Podfile - > target 'SampleApp' do 
use_frameworks! 
# Pods for 'SampleApp' 
pod 'enx-rtc-react-native', :path => '../../ios/RNEnxRtc.podspec' 

 

With Auto-Linking Library: 

General

Issue: Video gone blank

This could be due to insufficient bandwidth available to carry out a video call. EnableX implements the Automatic Bandwidth Detection feature to ensure call connectivity in low bandwidth situations. When the bandwidth drops below the minimum requirement to carry out a video call, the call automatically switches to Audio-only mode.

Error: Receiving “media access denied” error

The error indicates that your application/browser is unable to access media devices (camera/mic). This could be due to the following reasons: 

  • The device is being used by another application/browser. 
  • The user has denied permission to access the devices when prompted by the application/browser.  
  • The user has previously declined permission to EnableX Video to access the media devices and saved the settings for this application. In this case, you should find the camera icon crossed out or disabled. You can check browser settings for your domain and grant access.  

Issue: Application-Sharing not working smoothly

You can either choose to share your entire desktop using screen-sharing or you can share a particular application using application-sharing.  

Application sharing depends on the browser capabilities to a great extent hence depending on your browser the application sharing experience might vary. If you face difficulty using application sharing on a particular browser, then it is advisable to discontinue screen-sharing on the existing browser and try again on a different browser.  

Error: Receiving “TLS Handshake Failed” error on executing the application

The error indicates that the SSL certificate of the target you’re connecting to isn’t considered valid by your Java instance’s Keystore. This could be because either the CA chain couldn’t be validated or your Java version doesn’t have the support for SNI extension of TLS. 

Verify the support matrix of our SSL cert at: 

 Refer to the following posts for more information on how to enable SNI: 

In case of a CA Chain issue, you need to import Root CA certs in your Keystore. 

key tool -import -alias root -keystore server.keystore -trustcacerts -file <root certificate> 

Reference: 

Issue: No Audio/Video after being connected to the Room

If you are unable to see a video or listen to anyone in the Room, then you are either not getting the list of active talkers in the Room or have failed to subscribe to a remote stream in the Room.  

Error: Receiving “Permission Denied” error on trying to join a room

The Browser needs access to Microphone and/or Camera to create an Audio/Video Stream. Therefore, the user is prompted to grant permission to access the Media Devices. If the Browser fails to get access to Media Devices, it shows a “Permission Denied” error. 

If the user has not declined permission to access media devices, then it is worth checking if the user has previously declined permission to EnableX Video to access the media devices and saved the settings for this application. In this case, you will find the camera icon crossed out or disabled. You can check browser settings for your domain and grant access.  

How can I see live error logs?

You can analyse the video call or view live errors in the following ways: 

  • Review logs, status live in a call by looking up chrome://webrtc-internals in the browser. Refer to WebRTC internals stats for more details. 
  • Check Browser Console Log. Make a Right-Click on the Web Page, click Inspect, and then go to the Console tab. You can see running logs and errors there. 
  • Go to Portal Dashboard which shows many live details and error notifications. 

I am getting “X” error code when I run my code. What does it mean?

For details on the Server API Error Codes, refer to the Result Codes for Server API here.

For details on the Client API Error Codes, refer to the respective API/Event responsible for the error.  

The complete Client API documentation is available here. 

File Transfer

What is the maximum allowed size for a file that can be sent using File Transfer?

You can send a maximum file size of 2MB through file transfer. 

Data Privacy

Does EnableX store end-user data or published content?

EnableX plays no role in managing or storing end user’s data or information available on a call/chat/message. This is solely the responsibility of the Application Manager/Developer. 

What customer data does EnableX have access to?

Refer to our Privacy Policy to learn about the customer information accessible by EnableX.  

As for the end-users (users of the application developed using EnableX), EnableX does not collect any sensitive information of the end-users. EnableX only has access to the IP address and Browser user agents of the end-users.   

What kind of security features does EnableX implement?

EnableX places great importance on the security and privacy concerns and implements the following measures to ensure the same: 

  • Signaling Encryption: HTTPS with PKI certificate validation 
  • All control plane messaging uses HTTPS 
  • Media Encryption: AES 256-bit encryption DTLS-SRTP for Audio, Video, and Shared Content.
  • Infrastructure resides within its own private network and there is no access to the core infrastructure from the public network.  
  • Every request that is processed by the server needs a valid token authenticated by the system through APP_ID/APP_KEY. 
Data & Privacy 
Every user’s data including identity and payment information stays anonymous.
Infrastructure Security  
Fortified network with Private VPN accessible only via secure API gateway 
Secure Protocol  
HTTPS authentication and secure RTP for media transportation 
GDPR and HIPPA  
EnableX platform is GDPR compliant and HIPPA- ready which means that any business
can trust EnableX with data privacy and confidentiality. 
Encryption    
AES256 encryption for all voice, video, and signaling 
traffic 
PKI Certificate  
Valid PKI certs for all customer-facing servers 

Video is encrypted at the sender endpoint. Each participant’s video is briefly decrypted in memory after arriving at the media server and is immediately re-encrypted before being sent out to other participants. This is required because webRTC does not allow the negotiation of a single set of DTLS keys between more than two participants. 

Decrypted video is not stored on any server or storage device or transported over any network. Each participant in the EnableX video room negotiates its own DTLS/SRTP connection to the EnableX media server and all video streams are subscribed via a secure transport layer. 

Device & Browser Support

Which browsers support Screen Sharing?

Refer to the table given below to know which browsers on which platforms support screen sharing:

OS \ BrowserChrome v72+SafariFirefoxEdge
WindowsYesYesYesYes
OSXYesYesYes
UbuntuYesYes
AndroidReceive Only
iOS 12+NAReceive Only

Which browsers are supported by EnableX for Video and Voice calling?

EnableX supports advanced browsers like Chrome, Firefox, Safari. 

The following table shows which browsers are supported by EnableX on which platforms: 

OS/BrowserChromeSafariFirefoxMS EdgeiOS AppAndroid App
WindowsYesNoYesYesN/AN/A
OSXYesYesYesN/AN/AN/A
AndroidYesN/AYesN/AN/AYes
iOS 12+N/AYesN/AN/AYesN/A

Read more about Browser Support & Compatibility.

Which platforms are supported for Video Chat?

We support Video Chat APIs for Web, Android, and iOS. 

Hosting & Deployment

How is the server sizing calculated for private deployment?

For all on-premises, hybrid, private cloud deployments, server sizing and scaling needs to be vetted by our experts.  

Please get in touch with our sales team for inquiry. 

Can you host EnableX instance on private premises?

If you want to host EnableX instance on your own premise, we can provide hardware specifications for the infrastructure. 

Please get in touch with our sales team for an inquiry

Do you provide server infrastructure?

Yes, our pricing for the standard EnableX instance hosted by us is inclusive of the server infrastructure.  

Does EnableX support hosting a third-party TURN Server?

By default, the TURN server functionality is always provided by the EnableX cloud instance. If your business requirement calls for a separate TURN server, please get in touch with our sales team. 

What deployment options are available on EnableX?

EnableX supports multiple deployment options: 

  • Private Cloud  
  • Public Cloud  
  • On-Premise  
  • Hybrid  

For any specific deployment requirements depending on your business needs, you can get in touch with our sales team.   

Where is EnableX Public Cloud hosted?

We host our cloud at multiple locations depending on geographical regulatory requirements. You would always be served by an instance which is geographically closest to you. The current EnableX instance is hosted on the cloud-based infrastructure in India. We also have plans to host in other regions in the Asia Pacific such as Singapore and China in the near future.