Eyeball AnyBandwidth Engine V8.0 Developer’s Guide

1,565 views

Published on

AnyBandwidth Engine is a mobile voice and video engine which enables guaranteed voice and video quality for IP voice and video conferencing applications over any fixed or mobile network and on any device. AnyBandwidth Engine dynamically optimizes frame rate, picture quality and CPU capacity to deliver best possible VoIP and video experience possible – every time.

AnyBandwidth Engine has been deployed to more than 20 million subscribers by licensees including Comcast, FujiFilm, Intel, Maxis, Research in Motion, and more.

AnyBandwidth Engine can be deployed with other Eyeball Networks products as part of an end-to-end IM, voice, and video conferencing solution, or can be integrated with third-party products.

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,565
On SlideShare
0
From Embeds
0
Number of Embeds
1,045
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Eyeball AnyBandwidth Engine V8.0 Developer’s Guide

  1. 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. 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. 3. Copyright © 2002-2015 Eyeball Networks Inc. Patented and patents pending. All rights reserved. Figure 1: AnyBandwidth Engine block diagram.
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×