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 sales@eyeball.com
Technical Support techsupport@eyeball.com
Corporate Headquarters:
730 - 1201 West Pender Street
Vancouver, BC V6E 2V2
Canada
Tel. +1 604.921.5993
Fax +1 604.921.5909

More Related Content

PDF
Eyeball AnyConnect™ Gateway Administration Guide
PPTX
AnyFirewall Engine & Server by Eyeball Networks
PPTX
AnyConnect Gateway by Eyeball Networks
PDF
AnyFirewall Engine v10.0 Developer Guide
PDF
Eyeball Networks AnyFirewall Server V10 Administrator Guide
PDF
Eyeball Messenger SDK WebRTC Developer Reference Guide
PPTX
Eyeball Messenger SDK by Eyeball Networks
PDF
Eyeball MS-SIP Library V10.0 Developer Reference Guide
Eyeball AnyConnect™ Gateway Administration Guide
AnyFirewall Engine & Server by Eyeball Networks
AnyConnect Gateway by Eyeball Networks
AnyFirewall Engine v10.0 Developer Guide
Eyeball Networks AnyFirewall Server V10 Administrator Guide
Eyeball Messenger SDK WebRTC Developer Reference Guide
Eyeball Messenger SDK by Eyeball Networks
Eyeball MS-SIP Library V10.0 Developer Reference Guide

What's hot (20)

PDF
2012 ah emea top 10 tips from aruba tac
PDF
2012 ah vegas deploying byod
PDF
Migrating to the 7200 controller george anderson marcus christensen
PDF
2012 ah apj wlan design fundamentals
PDF
Network Rightsizing Best Practices Guide
PDF
1 voice and video over wi fi-balajee krishnamurthy
PDF
Byod and guest access workshop enabling byod carlos gomez gallego_network ser...
PDF
2012 ah vegas top10 tips from aruba tac
PDF
Managing an Enterprise WLAN with Cisco Prime NCS & WCS
PDF
Apple Captive Network Assistant Bypass with ClearPass Guest
PDF
ArubaOS DHCP Fingerprinting
PDF
Application Policy Enforcement Using APIC
PDF
2012 ah apj keynote - technology update
PDF
D S A P 4000 U S
PDF
Top 10 tips_aruba_tac_madison lee
PDF
2012 ah apj rf troubleshooting
PDF
Air heads rio 2010 aruba pef overview
PDF
2012 ah vegas wlan design fundamentals
PDF
Next Generation Wireless Architecture for Multimedia-Grade Residence Halls
2012 ah emea top 10 tips from aruba tac
2012 ah vegas deploying byod
Migrating to the 7200 controller george anderson marcus christensen
2012 ah apj wlan design fundamentals
Network Rightsizing Best Practices Guide
1 voice and video over wi fi-balajee krishnamurthy
Byod and guest access workshop enabling byod carlos gomez gallego_network ser...
2012 ah vegas top10 tips from aruba tac
Managing an Enterprise WLAN with Cisco Prime NCS & WCS
Apple Captive Network Assistant Bypass with ClearPass Guest
ArubaOS DHCP Fingerprinting
Application Policy Enforcement Using APIC
2012 ah apj keynote - technology update
D S A P 4000 U S
Top 10 tips_aruba_tac_madison lee
2012 ah apj rf troubleshooting
Air heads rio 2010 aruba pef overview
2012 ah vegas wlan design fundamentals
Next Generation Wireless Architecture for Multimedia-Grade Residence Halls
Ad

Similar to Eyeball AnyBandwidth Engine V8.0 Developer’s Guide (20)

PDF
Eyeball Messenger SDK V10.0 Developer Reference Guide
PDF
Logitech cc3000e Software Guide
PPTX
Jonathan Taylor - Presentation at Emerging Communications Conference & Awards...
PDF
Rayo for XMPP Folks
PDF
Asterisk
PPT
Developing with VoiceXML Building a Video Conference Application
PDF
Flash-based audio and video communication
PPT
Linkedin
PDF
Dialogic
PDF
VOIP Design & Implementation
PPTX
Advanced communication services for android
PDF
Skype testing overview
PDF
Skype testing overview
PDF
Video Conferencing Demo Application for Dialogic® Multimedia ...
PDF
Are ott the new walled gardens
PDF
Using Asterisk in a SIP softswitch
PDF
Shakhawat Hossain (062364056)
PDF
MIDP: Music and Sound
PPT
Download It
Eyeball Messenger SDK V10.0 Developer Reference Guide
Logitech cc3000e Software Guide
Jonathan Taylor - Presentation at Emerging Communications Conference & Awards...
Rayo for XMPP Folks
Asterisk
Developing with VoiceXML Building a Video Conference Application
Flash-based audio and video communication
Linkedin
Dialogic
VOIP Design & Implementation
Advanced communication services for android
Skype testing overview
Skype testing overview
Video Conferencing Demo Application for Dialogic® Multimedia ...
Are ott the new walled gardens
Using Asterisk in a SIP softswitch
Shakhawat Hossain (062364056)
MIDP: Music and Sound
Download It
Ad

Recently uploaded (20)

PPTX
MLforCyber_MLDataSetsandFeatures_Presentation.pptx
PDF
Microsoft Office 365 Crack Download Free
PPTX
4Seller: The All-in-One Multi-Channel E-Commerce Management Platform for Glob...
PPTX
Full-Stack Developer Courses That Actually Land You Jobs
PPTX
GSA Content Generator Crack (2025 Latest)
PDF
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
PDF
CCleaner 6.39.11548 Crack 2025 License Key
PDF
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
PDF
DNT Brochure 2025 – ISV Solutions @ D365
PDF
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PPTX
Download Adobe Photoshop Crack 2025 Free
PPTX
CNN LeNet5 Architecture: Neural Networks
PDF
Ableton Live Suite for MacOS Crack Full Download (Latest 2025)
PDF
iTop VPN Crack Latest Version Full Key 2025
PDF
How AI/LLM recommend to you ? GDG meetup 16 Aug by Fariman Guliev
PDF
Type Class Derivation in Scala 3 - Jose Luis Pintado Barbero
PDF
BoxLang Dynamic AWS Lambda - Japan Edition
PDF
Topaz Photo AI Crack New Download (Latest 2025)
PPTX
Python is a high-level, interpreted programming language
MLforCyber_MLDataSetsandFeatures_Presentation.pptx
Microsoft Office 365 Crack Download Free
4Seller: The All-in-One Multi-Channel E-Commerce Management Platform for Glob...
Full-Stack Developer Courses That Actually Land You Jobs
GSA Content Generator Crack (2025 Latest)
DuckDuckGo Private Browser Premium APK for Android Crack Latest 2025
CCleaner 6.39.11548 Crack 2025 License Key
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
DNT Brochure 2025 – ISV Solutions @ D365
The Dynamic Duo Transforming Financial Accounting Systems Through Modern Expe...
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
Download Adobe Photoshop Crack 2025 Free
CNN LeNet5 Architecture: Neural Networks
Ableton Live Suite for MacOS Crack Full Download (Latest 2025)
iTop VPN Crack Latest Version Full Key 2025
How AI/LLM recommend to you ? GDG meetup 16 Aug by Fariman Guliev
Type Class Derivation in Scala 3 - Jose Luis Pintado Barbero
BoxLang Dynamic AWS Lambda - Japan Edition
Topaz Photo AI Crack New Download (Latest 2025)
Python is a high-level, interpreted programming language

Eyeball AnyBandwidth Engine V8.0 Developer’s Guide

  • 1. 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.
  • 2. 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
  • 3. Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved. Figure 1: AnyBandwidth Engine block diagram.
  • 4. 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
  • 5. 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
  • 6. 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;
  • 7. 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.
  • 8. 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){}
  • 9. 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.
  • 10. 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){}
  • 11. 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
  • 12. 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(); } }
  • 13. 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();
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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, …);
  • 18. 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);
  • 19. 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);
  • 20. 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.
  • 21. 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 }
  • 22. 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
  • 23. 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
  • 24. 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:
  • 25. 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)
  • 26. 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.
  • 27. 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.
  • 28. 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:
  • 29. 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:
  • 30. 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
  • 31. 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
  • 32. 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)
  • 33. 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.
  • 34. 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.
  • 35. 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.
  • 36. 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
  • 37. 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.
  • 38. 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
  • 39. 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)
  • 40. 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.
  • 41. 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.
  • 42. 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 sales@eyeball.com Technical Support techsupport@eyeball.com Corporate Headquarters: 730 - 1201 West Pender Street Vancouver, BC V6E 2V2 Canada Tel. +1 604.921.5993 Fax +1 604.921.5909