Availability: Android SDK v1.9.8+

The EnxRtc.clientBitrate() method provides bitrate status of the Client. It carries out the following tests to generate a response:

  • Bandwidth
    • Video bandwidth with TURN server
    • Audio bandwidth with TURN Server

You can also build a UI to initiate the tests and generate a diagnostic report using this API.

Class: EnxRtc

Observer: public void setEnxClientBitrateObserver( EnxClientBitrateObserver-Object )

Method: public void clientBitrate(JSONObject clientInfo)

Parameters:

  • ClientInfo – Optional. JSON object with Client preferences for the execution of test cases.
    • region: String. Region Id of ICE Server, e.g. "IN", "SG", "US", "DE". Default Region ID is “DE”.

Callbacks:

  • onClientBitrateFinished – Notification sent when the API has completed the execution of the test case. This returns a JSON Object as the final result.
  • onClientBitrateStatus – Notification sent with the test results at the beginning and end of the test. This returns a JSON Object as the test result.
  • onClientBitrateFailed – Notification sent when the test fails.

Request for diagnostics:

setEnxClientBitrateObserver( EnxClientBitrateObserver-Object );

 var clientInfo = {
     region: 'IN'
};

EnxRtc.clientBitrate(clientInfo);
 
// Called when test fails
public void onClientBitrateStatus(JSONObject jsonObject) {
	// JSON brings in error information
}

// Called when test starts and ends
public void onClientBitrateStatus (JSONObject jsonObject) {
	//  JSON structure explained later in the document
}

// Called when test finishes
public void onClientBitrateFinished(JSONObject jsonObject) {
	//  JSON structure explained later in the document
}

Response at the beginning and end of Test: onClientBitrateStatus

//Status at the start of test 
{
  "status": "started",
  "test_case": "video_bandwidth",
  "test_group": "bandwidth",
  "test_region": "IN",
  "test_server": "TURN"
}

// Status at the end of test
{
  "test_group": "bandwidth",
  "test_case": "video_bandwidth",
  "status": "finished",
  "output": {
    "video_bandwidth": {
      "result": "success",
      "bandwidth_bps": 2221949,
      "packets_lost_percentage": "0.99",
      "execution_time": "31566 ms",
      "success": [],
      "error": [],
      "warning": [],
      "info": [],
      "server": {
        "region": "IN",
        "url": "turns:ts.enablex.io:443"
      }
    }
  },
  "test_region": "IN",
  "test_server": "TURN"
}

Final Response: onClientBitrateFinished

{
  "video": {
    "bitrate_bps": 2221949,
    "connection": "stable"
  },
  "audio": {
    "bitrate_bps": 278067,
    "connection": "stable"
  }
}

Test Result Explanation:

Test GroupTest CaseServerResultMessage
BandwidthVideo BandwidthTURN SuccessVideo resolution: Width x Height
FailureCamera failure: Width x Height. Cannot
test bandwidth without a working camera
Subject to qualityAverage Video bandwidth <value>
Subject to qualityPackets lost: <value>
Subject to qualityRTT Average: <value>
FailuregetUserMedia() failed with error <error>
FailureFrame Rate mean is 0, cannot
test bandwidth without a working camera
FailureOnly Firefox and Chrome
getStats() implementations are supported
Audio BandwidthTURNSubject to qualityAverage Audio bandwidth <value>
Subject to qualityPackets lost: <value>
Subject to qualityRTT Average: <value>
FailuregetUserMedia() failed with error <error>
FailureOnly Firefox and Chrome
getStats() implementations are supported

Note: Currently this API is not working for Firefox and safari browser.