42
Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved. Eyeball AnyBandwidth™ v8.0 Developer's Guide Last Modified: November 2014 Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Eyeball AnyBandwidth Engine V8.0 Developer’s Guide

Embed Size (px)

Citation preview

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Eyeball AnyBandwidth™ v8.0

Developer's Guide

Last Modified: November 2014

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

1. ABE Introduction

Introduction

The Eyeball AnyBandwidth™ Engine (ABE) enables audio-video communications among multiple clients and/or servers having heterogeneous processor capacities and network connections, and/or network connections with dynamically changing properties.

AnyBandwidth provides optimized video quality (such as frame rate, picture resolution, and sharpness) to each user based on the available network bandwidth and processing power.

AnyBandwidth Engine contains Eyeball’s patented AnyBandwidth Technology, and is found in several Eyeball products including Eyeball Messenger and Eyeball Messenger SDK. Messenger SDK utilizes the SIP signaling protocol, but this does not preclude AnyBandwidth Engine from utilizing other signaling protocols based on application demand.

Eyeball AnyBandwidth Engine offers the following features:

Guaranteed voice and video quality

Packet loss concealment

Flexible voice processing (AEC, AGC, CNG, NS, VAD) for hands-free handsets and tablets

Plug-and-play voice codecs including G.711, G.729, GSM, iLBC, Siren, Speex

Plug-and-play video codecs including EyeStream, H.263, H.264

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Figure 1: AnyBandwidth Engine block diagram.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

2. ABE Supported Platforms

Supported Platforms

2.1. ABE: Microsoft Windows

2.2. ABE: Android

2.3. ABE: iOS

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

2.1. ABE: Microsoft Windows

Microsoft Windows

System Requirements

Operating System:

XP, Vista, Win7

Hardware requirements:

Audio device, camera for video enabled calls

Developer Platforms

Programming Languages:

C/C++, C#, HTML and Javascript

Developer tools:

Visual Studio 2005 or later

Other software:

DirectX 8.1 and .Net Framework 1.1 or later versions

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Programming Conventions

In this document, the phrase current user refers to the local user, as opposed to the remote user.

SIP references (including class or object names) don’t infer exclusive use of the SIP protocol.

We use the following conventions to define a variable’s data type:

Variable name starting with ‘n’ such as nLine refers to an Integer data type

Variable name starting with ‘s’ such as sUserID refers to a String data type

Variable name starting with ‘b’ such as bOutgoingCall refers to a Boolean data type

Variable name starting with ‘a’ such as aResponseInfo refers to a VB array data type. This is a one-dimensional array. Storing two-dimensional information is simply done by concatenating rows to each other, forming a one-dimensional array.

All strings are case-sensitive unless specified otherwise.

The calling convention for properties follows this format:

// Select a line

SipCommCtl.SelectedLine = 1;

// Retrieve the currently selected line

int nSelectedLine = SipCommCtl.SelectedLine;

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

2.2. ABE: Android

Android

System Requirements

Operating System:

Android 2.3 or later

Hardware requirements:

Android tablet or Android phone

Developer Platforms

Programming Languages:

Java

Developer tools:

Android SDK 2.3.3 or later

Programming Conventions

Please see Programming Conventions section for Microsoft Windows.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

The methods and properties are static and implemented in the JNIWrapper.

Unless otherwise specified, the calling convention for properties follows this format:

// Select a line

JNIWrapper.SipCommPutSelectedLine(1);

// Retrieve the currently selected line

int nSelectedLine = JNIWrapper.SipCommGetSelectedLine();

For methods which return a VB array on Windows, return a string array to Android using this format:

String[] stats = JNIWrapper.SipCommGetAudioReceiverStat();

For notification events which provide elements in a VB array on Windows, the elements are provided as arguments on Android using this format:

OnVideoSizeChange(long hWnd, int iWidth, int iHeight){}

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

2.3. ABE: iOS

iOS

System Requirements

Operating System:

iOS 5.0 or later

Hardware requirements:

Phone or iPad

Developer Platforms

Programming Languages:

C/C++, Objective C/C++

Developer tools:

Xcode

Programming Conventions

Please see Programming Conventions section for Microsoft Windows.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

The methods and properties are defined in class CSipComm in file MediSession.h. To access these methods, an object of CSipComm needs to be created. Please see Section 3.1. Creating SIPComm objects.

Unless otherwise specified, the calling convention for properties follows this format:

// Select a line

commCtrl->sipComm->put_SelectedLine(1);

// Retrieve the currently selected line

int nSelectedLine;

commCtrl->sipComm->get_SelectedLine(&nSelectedLine);

For methods which return a string on Windows, the string must be passed by reference to iOS using this format:

string sDisplayName;

commCtrl->sipComm->GetDisplayName(&sDisplayName);

For methods which return a VB array on Windows, a vector must be passed by reference to iOS using this format:

vector<string> stats;

commCtrl->sipComm->GetAudioReceiverStat(&stats);

For notification events which provide elements in a VB array on Windows, the elements are provided as arguments on iOS using this format:

OnVideoSizeChange(long hWnd, int iWidth, int iHeight){}

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3. Using AnyBandwidth Engine SDK

Using AnyBandwidth Engine SDK

AnyBandwidth Engine SDK consists of libraries of ActiveX controls (Windows)/Java (Android)/C++ (iOS) that provide programmers with a high-level interface to the main features and functions of the AnyBandwidth Engine.

There are controls available to display and handle video windows (for video calls, used together with the SIP Communicator control), and audio device detection.

In this section, we present AnyBandwidth Engine SDK from a web-programmer’s point of view. However, programmers using other languages such as C++ and Visual Basic will also get a clear understanding of the supported features and functionalities.

3.1. ABE: Creating SIPComm Objects

3.2. ABE: Features and Functions

3.3. ABE: Handling Event Notifications

3.4. ABE: Properties

3.5. ABE: Methods

3.6. ABE: Notification Events

3.7. ABE: Error Handling

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.1. ABE: Creating SIPComm Objects

Creating SIPComm Objects

Windows:

The following HTML code shows how to embed the ActiveX control objects into a web page:

<OBJECT

id="SipCommCtl"

classid="CLSID: 968E1865-05A8-41dd-95B5-7D45B9701A57">

</OBJECT>

<OBJECT

id="VideoWindowCtl"

classid="CLSID: 0504639F-FBD4-4272-B232-AB9B21305618">

<param name=”IsWndless” value=true>

</OBJECT>

Android:

public class Messenger extends Activity implements SipEventHandler{

public void onCreate(Bundle savedInstanceState){

JNIWrapper.AudioInit((Activity)this);

JNIWrapper.SetSipEventHandler(this);

JNIWrapper.SipCommInit();

}

}

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

iOS:

iOS:

class CommCtrl : public CSipCommEventHandler {

public:

CSipComm *sipComm;

CommCtrl(){

sipComm = new CSipComm(this);

}

CommCtrl *commCtrl = new CommCtrl();

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.2. ABE: Features and Functions

Features and Functions

Some of the main features and functions of AnyBandwidth Engine SDK are described in the following pages:

3.2.1. ABE: SIP Communicator Control

3.2.2. ABE: Call User

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.2.1. ABE: SIP Communicator Control

SIP Communicator Control

This control supports peer-to-peer audio/video data-transport. AnyBandwidth Engine SDK supports multiple-lines (similar to multi-line PBX phones), enabling the following features:

Identifying each call using a separate line while in multiple concurrent calls

Choosing a specific available line to make the next call

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.2.2. ABE: Call User

Call User

How to make a video call

Caller

// Get the AnyFirewallEngine instance from the SIP component

CAnyFirewallEngine *pAFEngine;

GetAFEngine((void **)&pAFEngine);

// Create audio, video RTP/RTCP channels and the session

int iAudioRTPChannel = pAFEngine->Create(AF_CHANNEL_RTP);

int iAudioRTCPChannel = pAFEngine->Create(AF_CHANNEL_RTCP);

int iVideoRTPChannel = pAFEngine->Create(AF_CHANNEL_RTP);

int iVideoRTCPChannel = pAFEngine->Create(AF_CHANNEL_RTCP);

int iSession = pAFEngine->CreateSession(sMediaStream);

// Create offer SDP

string sSDP = pAFEngine->MakeOffer(iSession);

// Create the call message

// Send the call message

pAFEngine->SendTo(iServerChannel, sCallMessage, iCallMessageLength, …);

Callee

// Upon receiption of call request and accept the call

// Create audio, video RTP/RTCP channels and the session

// Create answer SDP

string sSDP = pAFEngine->MakeAnswer(iSession);

// Create the call response message

// Send the call response message

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Caller

// Upon receiption of call accept message from callee

// Negotiate audio video payload

// Grab a line

int iLine = GrabLine(-1);

// Open the session

OpenSession(iLine, chAudioPayload, chVideoPayload, iAudioRTPChannel,

iAudioRTCPChannel, iVideoRTPChannel, iVideoRTCPChannel, true);

// Send an acknowledgement message to the callee

Callee

// Upon receiption of the acknowledgement message from caller

// Grab a line

// Open the session

End call

// Send end call message

// Close the session

CloseSession(iLine, chAudioPayload, chVideoPayload);

// Release the line

ReleaseLine(iLine);

How to make an audio call

Caller

// Get the AnyFirewallEngine instance from the SIP component

CAnyFirewallEngine *pAFEngine;

GetAFEngine((void **)&pAFEngine);

// Create audio RTP/RTCP channels and the session

int iAudioRTPChannel = pAFEngine->Create(AF_CHANNEL_RTP);

int iAudioRTCPChannel = pAFEngine->Create(AF_CHANNEL_RTCP);

int iSession = pAFEngine->CreateSession(sMediaStream);

// Create offer SDP

string sSDP = pAFEngine->MakeOffer(iSession);

// Create the call message

// Send the call message

pAFEngine->SendTo(iServerChannel, sCallMessage, iCallMessageLength, …);

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Callee

// Upon receiption of call request and accept the call

// Create audio RTP/RTCP channels and the session

// Create answer SDP

string sSDP = pAFEngine->MakeAnswer(iSession);

// Create the call response message

// Send the call response message

Caller

// Upon receiption of call accept message from callee

// Negotiate audio payload

// Grab a line

int iLine = GrabLine(-1);

// Open the session

OpenSession(iLine, chAudioPayload, 127, iAudioRTPChannel, iAudioRTCPChannel, -1, -1,

true);

// Send an acknowledgement message to the callee

Callee

// Upon receiption of the acknowledgement message from caller

// Grab a line

// Open the session

End call

// Send end call message

// Close the session

CloseSession(iLine, chAudioPayload, 127);

// Release the line

ReleaseLine(iLine);

How to add video to an audio call

Caller

// Create video RTP/RTCP channels and the session

int iVideoRTPChannel = pAFEngine->Create(AF_CHANNEL_RTP);

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

int iVideoRTCPChannel = pAFEngine->Create(AF_CHANNEL_RTCP);

// Modify the existing session

int iSession = pAFEngine->CreateSession(sMediaStream);

// Create offer SDP

pAFEngine->ModifySession(iSession, sMediaStream);

// Create the call message

// Send the call message

pAFEngine->SendTo(iServerChannel, sCallMessage, iCallMessageLength, …);

Callee

// Upon receiption of call request and accept the call

// Create video RTP/RTCP channels and modify the session

// Create answer SDP

string sSDP = pAFEngine->MakeAnswer(iSession);

// Create the call response message

// Send the call response message

Caller

// Upon receiption of call accept message from callee

// Negotiate audio payload

// Grab a line

int iLine = GrabLine(-1);

// Open the session

OpenSession(iLine, chAudioPayload, chVideoPayload, iAudioRTPChannel,

iAudioRTCPChannel, iVideoRTPChannel, iVideoRTCPChannel, true);

// Send an acknowledgement message to the callee

Callee

// Upon receiption of the acknowledgement message from caller

// Grab a line

// Open the session

End call

// Send end call message

// Close the session

CloseSession(iLine, chAudioPayload, chVideoPayload);

// Release the line

ReleaseLine(iLine);

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Send DTMF

Sending DTMF tones is required for PBX calls and Touch Tone services. AnyBandwidth Engine SDK implements RFC 2833 with RTP payload type 101. In addition, DTMF using SIP INFO or in-band can be used (please see DTMFMode in Properties section for additional details).

To send DTMF tones:

Windows:

SipCommCtl.SendDTMF(5);

Android:

JNIWrapper.SipCommSendDTMF(5);

iOS:

commCtrl->sipComm->SendDTMF(“5”);

The digit “5” is sent as a DTMF signal.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.3. ABE: Handling Event Notifications

Handling Event Notifications

The applications send several event notifications to the application running on AnyBandwidth Engine SDK. The application needs to handle these events as necessary. For example, SIP control will send event notifications such as:

Video size change at the remote end

Windows:

<SCRIPT language=JScript for= SipCommCtl event= OnVideoSizeChange(v)>

return SipCommCtl_OnVideoSizeChange(v)

</SCRIPT>

function SipCommCtl_ OnVideoSizeChange(v)

{

var aInfo = v.toArray();

var nWidth = aInfo[1];

var nHeight = aInfo[2];

}

Android:

void OnVideoSizeChange(long hWnd, int iWidth, int iHeight)

{

//Handle event

}

iOS:

void OnVideoSizeChange(long hWnd, int iWidth, int iHeight)

{

//Handle event

}

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.4. ABE: Properties

Properties

AudioCodecs

This sets or retrieves preferred audio codecs.

Currently, Polycom® Siren™ (G722.1C, 24kHz, 48kHz), GSM, G.711 (A-law, µ-law), G.729 Annex A, iLBC, and Speex codecs are supported. On Android and iOS G.711, G729 and Speex (wideband) are supported. Codecs are described with space-delimited strings. This value can be changed during a call. The following codec strings are supported: “SIREN24”, “SIREN48”, “SPEEX”, “SPEEX-WB”, “ILBC”, “GSM”, “PCMU”, “PCMA”, and “G729”.

When acting as conference host, it is possible to add conference participants thus supporting different codecs in a single conference. This is useful when adding participants from PSTN gateways which usually only support a small selection of codecs.

DTMFMode

This sets or retrieves whether the SendDTMF method sends DTMF using the RTP payload (0), SIP INFO method (1), or inband DTMF (2). The default value is 0.

In-band DTMF is designed to work only with high bit rate codecs, such as G711 and G722. For low bit rate codecs such as G729, RTP payload or SIP INFO should be used instead of inband.

EnableAGC

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

This sets or retrieves whether or not Auto Gain Control (AGC) is used for the microphone input signal. This is a Boolean variable and its default value is false. This value can be changed during a call.

EnableDenoise

This sets or retrieves whether or not noise is removed from the microphone input signal. This is a Boolean value and its default value is true. This value can be changed during a call.

This property should be enabled for better echo cancellation.

EnableEchoCancellation

This sets or retrieves whether or not echo cancellation is enabled. This is a Boolean property and its default value is true. This value can be changed during a call.

For better echo cancellation, EnableDenoise property must be set to true.

EnableIceSupport

This sets or retrieves whether or not ICE candidates are used in invite for firewall traversal. ICE stands for Interactive Connectivity Establishment. This is a Boolean property and its default value is true.

EnableRelaySupport

This sets or retrieves whether or not relayed candidates are used in invite for firewall traversal. AnyBandwidth Engine SDK will use a TURN server to obtain these candidates. This is a Boolean property and its default value is true.

EnableSrtp

This enables or disables Secure RTP one-to-one calls. This property does not support conferencing. This is a Boolean variable and its default value is false. It can only be set before making a call. The caller has

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

to enable SRTP, but the callee must support SRTP as well for the call to be secure, although it does not need to call this property.

EnableStunSupport

This sets or retrieves whether or not server reflexive candidates are used in invite for firewall traversal. AnyBandwidth Engine SDK will use a STUN server to obtain these candidates. This is a Boolean property and its default value is true.

HoldLine

This holds or un-holds SelectedLine, or retrieves whether or not SelectedLine is being held. The default value of this Boolean property is false.

ImageSize

This sets the image size to be captured, or retrieves the captured image size as an integer. The default value is 0. This property can be set at any time. OnVideoSizeChange event is fired when the image size is changed.

The possible values are:

Windows:

0:

Small image size (176 x 144, or 192 x 144, if supported by the device)

1:

Medium image size (352 x 288, or 320 x 240, if supported by the device)

2:

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Large image size (640 x 480 if supported by the device)

3:

720p (HD) image size (1280 x 720 if supported by the device)

Android:

0:

Small image size (176 x 144)

2:

Medium image size (320 x 240)

3:

Large image size (352 x 288)

5:

VGA image size (640 x 480)

iOS:

1:

Small image size (192 x 144)

2:

Medium image size (320 x 240)

5:

VGA image size (352 x 288)

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

LineVolume

This sets or retrieves the volume of a SelectedLine. The value ranges from 1 (silence) to 100 (full volume). The default value of this property is 100.

MuteReceiver

This mutes or un-mutes inbound audio on SelectedLine, or retrieves whether or not inbound audio on SelectedLine is muted. The default value of this Boolean property is false.

MuteSender

This mutes or un-mutes outbound audio, or retrieves whether or not outbound audio is muted. The default value of this Boolean property is false.

PauseReceiver

This pauses or un-pauses inbound video on SelectedLine, or retrieves whether or not inbound video on SelectedLine is paused. The default value of this Boolean property is false.

PauseSender

This pauses or un-pauses outbound video, or retrieves whether or not outbound video is paused. The default value of this Boolean property is false.

SelectedLine

This sets a line to be selected or retrieves a line that is currently being selected as an integer. Some properties and methods perform operations on the line specified by SelectedLine.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

VideoCodecs

This sets or retrieves preferred video codecs. Currently, EyeStream, H.263, and H264 codecs are supported. On Android and iOS only H264 is supported. Codecs are described with space-delimited strings. This value can be changed while in a call. The possible parameters are: “Eyestream”, “H263”, “H263-1998” (H263+), and “H264”. When attempting an audio/video call to a client that does not support the codecs selected in AnyBandwidth Engine SDK, the call will be completed as an audio only call.

In a conference, only one codec is supported. It is not possible to add participants that do not support the video codec used by the existing conference participants.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.5. ABE: Methods

Methods

AttachVideoWindow(nLine, nWnd)

This attaches a given video window to display video.

nLine:

This is the line indicating a call for video source. If nLine is -1, window is used to display the preview video for the current user.

nWnd:

This is the window handle of the video window.

iOS:

AttachVideoWindow(int iLine, void *pWnd)

pWnd:

Reference to an UIView for camera preview surface, and to an UIImageView for remote video surface.

This is not applicable to Android environment.

AttachVideoWindowEx(nLine, nIndex, nWnd)

This attaches a given video window to the display video received from the specified line. A separate instance of VideoWindowCtl is needed to display each video window.

nLine:

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

This is the line indicating a call for video source. If nLine is -1, window is used to display the preview video for the current user.

nIndex:

This is the user index in the conference. It is 0 if not in a conference.

nWnd:

This is the window handle of the video window. This is returned by the GetVideoWindow method of VideoWindowCtl.

This is not applicable to Android or iOS environments.

AudioInit(activity)

This initializes the audio manager.

activity:

An object of the Activity class

Please check the sample application code.

This is applicable to the Android environment only.

CloseSession(nLine, chAudioPayload, chVideoPayload)

Closes audio, video in a session.

nLine:

The line

chAudioPayload:

Audio payload type in character format

chVideoPayload:

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Video payload type in character format

GetAudioReceiverStat()

This returns audio receiver statistics of the currently selected line as a VB array of eight elements on Windows, array of string on Android, and vector of string on iOS.

Element Description

Element 1 (Codec, String): Audio codec

Element 2 (Bit rate, Float): Audio receiving bit rate

Element 3 (Buffer size, Integer): Audio receive buffer size in ms

Element 4 (Audio resynchronization count, Integer):

Number of times the audio receive buffer is reset and re-synchronized

Element 5 (Packets received, Integer): Number of packets received

Element 6 (Packets lost, Integer): Number of packets lost

Element 7 (Packets late, Integer): Number of late packets

Element 8 (Loss rate, Float): Packet loss rate

GetAFEngine(void **pAFEngine)

Get reference of the instance of the AnyFirewallEngine used in the SIP component. This AnyFirewallEngine instance is created and destroyed in the component itself.

pAFEngine:

Reference to CAnyFirewallEngine.

GetAudioSenderStat()

This returns audio sender statistics of the currently selected line as a VB array of three elements on windows, array of string on Android and vector of string on iOS.

Element Description

Element 1 (Codec, String): Audio codec

Element 2 (Bit rate, Float): Audio receiving bit rate

Element 3 (Packets sent, Integer): Number of packets sent

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

GetFirewallStatus(nLine)

This returns the status of the firewall traversal on the call line specified by nLine.

Possible values:

“Unknown”:

Firewall traversal status is unknown

“Peer-to-peer”:

Firewall traversal succeeded and call completed peer-to-peer

“UDP Relay”:

Firewall traversal succeeded and call completed using UDP relay

“TCP Relay”:

Firewall traversal succeeded and call completed using TCP relay

“HTTP Relay”:

Firewall traversal succeeded and call completed using HTTP relay

“Fail”:

Firewall traversal failed

nLine:

The line indicating a call

GetVideoReceiverStat()

This returns video receiver statistics of the currently selected line (see SipCommCtl.SelectedLine) as a VB array of eight elements.

Element Description

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Element 1 (Codec, String): Video codec

Element 2 (Bit rate, Float): Video receiving bit rate

Element 3 (Frame rate, Float): Video receiver frame rate

Element 4 ((Frames received, Integer): Number of frames received

Element 5 (Packets received, Integer): Number of packets received

Element 6 (Packets lost, Integer): Number of packets lost

Element 7 (Loss rate, Float): Packet loss rate

Element 8 (Frames lost, Float): Number of frames lost

GetVideoSenderStat()

This returns the video sender statistics of the currently selected line (see SipCommCtl.SelectedLine) as a VB array of eight elements.

Element Description

Element 1 (Codec, String): Video codec

Element 2 (Bit rate, Float): Video sending bit bit rate

Element 3 (Frame rate, Float): Video sending bit frame rate

Element 4 ((Frames sent, Integer): Number of frames sent

Element 5 (Frames dropped, Integer): Number of frames dropped

Element 6 (Packets sent, Integer): Number of packets sent

Element 7 (Frames lost, Float): Number of packets not received by remote user

Element 8 (Packets rate, Float): Packet loss rate

GrabLine(nLineToGrab)

This reserves a line to make a call. There can only be one line being reserved at a time. A reserved line is released once ReleaseLine is called. If there is an error reserving the line, -1 is returned; otherwise, the line being reserved is returned as an integer.

nLineToGrab:

Specifies a line to be reserved. If this is –1, the control will choose a line that is not in use and return that line as Integer.

iOS:

GrabLine(nLineToGrab, *nLineGrabbed)

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

OpenSession(nLine, chAudioPayload, chVideoPayload, nAudioRTPChannel, nAudioRTCPChannel, nVideoRTPChannel, nVideoRTCPChannel, bool bCaller)

Open audio video in a session.

nLine:

The line

chAudioPayload:

Audio payload type in character format

chVideoPayload:

Video payload type in character format

nAudioRTPChannel:

Audio RTP channel

nAudioRTCPChannel:

Audio RTCP channel

nVideoRTPChannel:

Video RTP channel

nVideoRTCPChannel:

Video RTCP channel

bCaller:

true if caller, false if callee

chVideoPayload should be set to 127 if there isn’t to be video.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

ReleaseLine(nLine)

This un-reserves the line nLine which was grabbed by the method GrabLine.

nLine:

The line to be released.

ResetAudioReceiverStat()

This resets the audio receiver statistics.

ResetAudioSenderStat()

This resets the audio sender statistics.

ResetVideoReceiverStat()

This resets the video receiver statistics.

ResetVideoSenderStat()

This resets the video sender statistics.

SendDTMF(sKey)

This sends the DTMF message corresponding to a specified key to the current call (specified by current value of SelectedLine). If no call is established at SelectedLine, nothing is sent.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

The DTMF mode can be selected using the property DTMFMode.

sKey:

A valid key specifying a DTMF to be sent

SetNATTraversalServer(nServerType, bstrAddr, nPort, bDone)

This function initializes the underlying AnyFirewall Engine by setting the necessary servers for performing firewall traversal.

nServerType:

An enum indicating the type of server to be set

bstrAddr:

IP address of the server

nPort:

Port of the server

bDone:

This is false if more servers remain to be set, and True if this is the final server to be set. Firewall detection will start after all servers have been set.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Server Type Description

eServerSRV

The DNS SRV domain name that is used to locate the STUN, TURN and STUN-Relay/TURN servers. The port parameter for the server type is ignored.

The following DNS SRV queries will be made:

_stun._udp.<srvdomain>STUN server (UDP)

_stun._tcp.<srvdomain>STUN server (TCP)

_turn._udp.<srvdomain>STUN-Relay/TURN server (UDP)

_turn._tc alive p.<srvdomain>STUN-Relay/TURN server (TCP)

eServerHttpProxy The HTTP Proxy server, for users using a proxy server

eServerStunUdp* The UDP STUN server

eServerStunTcp* The TCP STUN server

eServerStunRelayUdp* The UDP STUN-Relay/TURN server

eServerStunRelayTcp* The TCP STUN-Relay/TURN server

*These parameters will be used if eServerSRV is not set or the DNS SRV lookup fails.

SetSipEventHandler(sipEventHandler)

This sets the event handler for handing events from the SipComm control. This must implement the SipEventHandler interface. The SipEventHandler is an object which implements SipEventHandler. Please check the sample application code.

This is applicable to the Android environment only.

SetTURNUsernamePassword (sUsername, sPassword)

This sets the authentication information for the TURN server.

sUsername:

Username of the TURN server

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

sPassword:

Password of the TURN server

This function should be called before bDone is set to true in SetNATTraversalServer.

SipCommInit

This initializes the SipComm control.

This is applicable to the Android environment only.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.6. ABE: Notification Events

Notification Events

OnFirewallStatusChange(aFirewallInfo)

This fires when the firewall status changes.

aFirewallInfo is a VB-array containing following elements:

Element Description

Element 1 (Line, Integer): Line associated with the call

Element 2 (Display Name, String):

Displays the name of the remote user in the call

Element 3 (Target URI, String): URI of the remote user in the call

Element 4 (Video call flag, Boolean):

True if it is a video/audio call or false if it is an audio only call

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Element 5 (Status, String):

1. Firewall status is shown as one of the following strings:

"Firewall type: Unknown",

"Firewall type: None",

"Firewall type: NAT",

"Firewall type: TCP only",

"Firewall type: Proxy" or

"Firewall type: Blocked" when SDK detects the firewall type.

The Line will be -1 at that time.

2. The following strings will show the status of a call:

“Trying”: Trying to traverse the firewall.

“Success”: Firewall traversal succeeded

“Fail”: Firewall traversal failed

“ICE check successfully completed”: Firewall traversal succeeded using ICE.

“Peer-to-peer”: Firewall traversal succeeded and call completed peer-to-peer.

“UDP Relay”: Firewall traversal succeeded and call completed using UDP relay.

“TCP Relay”: Firewall traversal succeeded and call completed using TCP relay.

“HTTP Relay”: Firewall traversal succeeded and call completed using HTTP relay.

“Relay error”: Firewall traversal failed to use relay.

OnVideoSizeChange(aSizeChangeInfo)

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

This is fired when ImageSize property is set to change the image size to be captured and when capture video size is changed on the remote end.

aSizeChangeInfo is a VB-array containing the following elements:

Element Description

Element 1 (Window handle, Integer):

Window handle of the video container that has size changed (N/A on iOS)

Element 2 (Width, Integer): Width of the video after size change

Element 3 (Height, Integer): Height of the video after size change

Android and iOS: Element 1 is ignored.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

3.7. ABE: Error Handling

Error Handling

Windows

SipCommCtl returns the error code 0x80004005 (in hexadecimal format) as well as error descriptions for all errors. These errors are thrown as exceptions in JScript. The following sample code shows how to handle these errors in JScript:

try

{

SipCommCtl.GrabLine(-1);

}

catch(e)

{

alert(“Error description:” + e.description);

}

Android

SipCommOnError(String sError) event is fired.

iOS

OnError(const string &sError) event is fired.

Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

4. ABE: Legal and Contact Information

Legal and Contact Information

Copyright © 2002-2013 Eyeball Networks Inc. Patented and patents pending. All rights reserved.

Confidential Information: This document contains confidential and proprietary information. The document has been provided to you in your capacity as a customer or evaluator of Eyeball Networks Inc.'s products. Unauthorized reproduction and distribution is prohibited unless specifically approved by Eyeball Networks Inc.

Eyeball, Eyeball.com, its logos, AnyBandwidth™ and AnyFirewall™ are trademarks of Eyeball Networks Inc. All other referenced companies and product names may or may not be trademarks of their respective owners.

For more information visit Eyeball Networks Inc. at http://www.eyeball.com.

Department E-mail

Sales [email protected]

Technical Support [email protected]

Corporate Headquarters:

730 - 1201 West Pender Street

Vancouver, BC V6E 2V2

Canada

Tel. +1 604.921.5993

Fax +1 604.921.5909