Friday, November 19, 2010
Mobicents Media Server (MMS) v2.1.0.BETA1 Released!!!
Friday, June 19, 2009
Mobicents Media Server (MMS) v2.0.0.BETA1 Released!
Architecture
The component architecture divides the process of constructing media services into two major parts:
- The implementation of components which generates or consume media data
- The assembly of chains of media components to build media flow path.
The following diagrams illustrates media components wiring and "implementation” process.
As depicted on the diagram above we can isolate three main groups of the media components:- components which used for generation of media content or media source;
- components which consumes media or media sink;
- components which itself are neither sources nor sinks but provide access to sink or source like components A and B on diagram allow to access Input which acts as a sink and Output which is a source. The component which provide access to media sink as input is known as Inlet and component getting access to output as media source is called as Outlet.
The example of Inlet is Demultiplexer that has one input (sink) and many output (source). The example is Outlet is Multiplexer which has many input's (sinks) and one output (source)
Channels and pipes
This is one of the most important fundamentals of MMS and useful if you planing to create custom media path (custom Endpoint) in MMS. Channel is not a media component but it is able to join with Media Source and Media Sink or joined with other channel. The role of channel is to construct media flow path by joining components using pipes.
Channel allows to easy assembly a required media path flow. Using multiplexers and demultiplexers media stream can be merged or splited, different signaling processors may be plugged in different places to achieve more flexibility or performance.Performance
The initial test shows that for 300 concurrent announcements there is zero Jitter (no DSP involved). This is much better compared to MMS 1.x.y. The main reason for performance improvement is number of Threads has been reduced to very few. This was achieved by making use of NIO instead of plain sockets.
Here is a comparison table between the MMS 1.x.y and MMS 2.x.y
| MMS 1.X.Y | MMS 2.X.Y | |
| Standalone MMS Server | Not available | Available |
| Embedded in JBoss AS | JBoss AS 4.X.Y | JBoss AS 5.X.Y |
| MGCP Support | MGCP Support available via MGCP JAIN SLEE Service (SBB). Hence to use MGCP control protocol one needs to install JAIN SLEE Server, MGCP RA and mgcp-controller-sbb service | MGCP Controller is inbuilt with MMS. No SLEE required |
| JSR-309 Support | Not available | JSR-309 is availale which uses MGCP as MS control protocol |
| MSC API | Available. This is custom API developed by Mobicents Media Server. | Not available |
| Performance | Compared to 2.x.y, 1.x.y has very high Jitter problems due to large number of threads used. It uses plain sockets for RTP | Very less Jitter as compared to 1.x.y. It uses NIO for RTP |
| Basic Architecture | MMS 1.x.y is built on JMX Microkernel. No flexibility of deciding the media-path for endpoints. For example for IVR, DTMF detection will be used irrespective of application may use it or not. | MMS 2.x.y is built on top of Jboss Microcontainer. Flexibility of defining the media-path for endpoints. For example if application will never detect DTMF but only recording, the DTMF detector media component can be completely removed from IVR endpoint and hence save some processing. |
You can download the MMS 2.0.0.BETA1 from here
Follow the announcement here
Your valuable feed-back is welcome
Enjoy the MMS :)
Tuesday, February 24, 2009
Mobicents Media Server 1.0.0.CR6 Released!
One of the major issue was Buffer was created too frequently and not reused which caused frequent GC. Other issue was with Inband Dtmf detection which is based on Goertzel Algorithm was consuming too much of CPU. The algorithm is modified in CR6 to have all the costly operation done at MMS start time and just use comparison's and other simple calculations at runtime.
The announcement for CR6 release is here
Download here
Cheers!
Friday, February 6, 2009
Mobicents MGCP implementation pases the MGCP TCK
To understand more about TCK look at README.txt at http://code.google.com/p/mobicents/source/browse/trunk/servers/media/jain-mgcp/tck/README.txt
The test output (this may vary in your environment)
[abhayani@localhost tck]$ mvn exec:exec
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'exec'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Mobicents MGCP TCK
[INFO] task-segment: [exec:exec]
[INFO] ------------------------------------------------------------------------
[INFO] [exec:exec]
[INFO] JAIN MGCP TCK
[INFO] This instance is a Gateway.
[INFO] Using org.mobicents.mgcp.stack as the path name for JainMgcpStackImpl.
[INFO] Remote entity is 127.0.0.1:2727.
[INFO] Verbose trace selected.
[INFO]
[INFO] Testing Bandwidth parameter class.
[INFO] Testing single parameter constructor. Succeeded!
[INFO] Testing two parameter constructor. Succeeded!
[INFO]
[INFO] Testing BearerInformation parameter class. Succeeded!
[INFO]
[INFO] Testing CallIdentifier parameter class.
[INFO] Invoking constructor with valid hexadecimal string. Succeeded!
[INFO] Calling constructor with empty string (should throw exception). Succeeded!
[INFO] Calling constructor with string of more than 32 characters (should throw exception). Succeeded!
[INFO] Calling constructor with string that contains non-hexadecimal characters (should throw exception). Succeeded!
[INFO] Invoking setCallIdentifier() with valid hexadecimal string. Succeeded!
[INFO] Invoking setCallIdentifier() with empty string (should throw exception). Succeeded!
[INFO] Invoking setCallIdentifier() with string of more than 32 characters (should throw exception). Succeeded!
[INFO] Invoking setCallIdentifier() with string that contains non-hexadecimal characters (should throw exception). Succeeded!
[INFO]
[INFO] Testing ConnectionIdentifier parameter class.
[INFO] Invoking constructor with valid hexadecimal string. Succeeded!
[INFO] Calling constructor with empty string (should throw exception). Succeeded!
[INFO] Calling constructor with string of more than 32 characters (should throw exception). Succeeded!
[INFO] Calling constructor with string that contains non-hexadecimal characters (should throw exception). Succeeded!
[INFO] Invoking setConnectionIdentifier() with valid hexadecimal string. Succeeded!
[INFO] Invoking setConnectionIdentifier() with empty string (should throw exception). Succeeded!
[INFO] Invoking setConnectionIdentifier() with string of more than 32 characters (should throw exception). Succeeded!
[INFO] Invoking setConnectionIdentifier() with string that contains non-hexadecimal characters (should throw exception). Succeeded!
[INFO]
[INFO] Testing ConnectionMode parameter class. Succeeded!
[INFO]
[INFO] Testing EchoCancellation parameter class. Succeeded!
[INFO]
[INFO] Testing EventName parameter class. Succeeded!
[INFO]
[INFO] Testing ExtendedConnectionParm parameter class. Succeeded!
[INFO]
[INFO] Testing GainControl parameter class. Succeeded!
[INFO]
[INFO] Testing InfoCode parameter class. Succeeded!
[INFO]
[INFO] Testing EncryptionMethod parameter class. Succeeded!
[INFO]
[INFO] Testing PacketizationPeriod parameter class.
[INFO] Testing single parameter constructor. Succeeded!
[INFO] Testing two parameter constructor. Succeeded!
[INFO]
[INFO] Testing ResourceReservation parameter class. Succeeded!
[INFO]
[INFO] Testing SilenceSuppression parameter class. Succeeded!
[INFO]
[INFO] Testing TypeOfNetwork parameter class. Succeeded!
[INFO]
[INFO] Testing TypeOfService parameter class. Succeeded!
[INFO]
[INFO] Testing LocalOptionExtension parameter class. Succeeded!
[INFO]
[INFO] Testing NotifiedEntity parameter class. Succeeded!
[INFO]
[INFO] Testing QuarantineHandling parameter class. Succeeded!
[INFO]
[INFO] Testing ReasonCode parameter class. Succeeded!
[INFO]
[INFO] Testing RegularConnectionParm parameter class. Succeeded!
[INFO]
[INFO] Testing RequestedAction parameter class. Succeeded!
[INFO]
[INFO] Testing PackageName parameter class. Succeeded!
[INFO]
[INFO] Testing PackageName parameter class. Succeeded!
[INFO]
[INFO] Testing SupportedModes parameter class. Succeeded!
[INFO]
[INFO] Testing SupportedPackages parameter class. Succeeded!
[INFO]
[INFO] Testing LocalOptVal parameter class. Succeeded!
[INFO]
[INFO] Test of Gateway API succeeded!
[INFO]
[INFO] Continuing with messaging tests.
[INFO] Getting an instance of JainIPFactory.
[INFO] Setting path name for stack implementation to org.mobicents.mgcp.stack.
[INFO] Creating a JainMgcpStack object.
[INFO] Setting port to Gateway default port 2427
[INFO] Creating a JainMgcpProvider object
[INFO] 0 [main] INFO org.mobicents.mgcp.stack.JainMgcpStackImpl - mgcp-stack.properties read successfully!
[INFO] executorTableSize = 80
[INFO] executorQueueSize = -1
[INFO] messageReaderThreadPriority = 10
[INFO] messageDispatcherThreadPriority = 7
[INFO] messageExecutorThreadPriority = 5
[INFO] 46 [main] INFO org.mobicents.mgcp.stack.JainMgcpStackImpl - Jain Mgcp stack bound to IP 0.0.0.0/0.0.0.0 and UDP port 2427
[INFO] Jain Mgcp stack bound to IP 0.0.0.0/0.0.0.0 and UDP port 2427
[INFO] Creating a JainMgcpListener object
[INFO] Adding JainMgcpListener object to JainMgcpProvider's list
[INFO] Received AuditConnectionResponse with transaction ID 1
[INFO] Received AuditEndpointResponse with transaction ID 2
[INFO] Received CreateConnectionResponse with transaction ID 3
[INFO] Received AuditConnection with transaction ID 5
[INFO] Sent AuditConnectionResponse with transaction ID 5
[INFO] message =
[INFO] DLCX 4 local@127.0.0.1:2727 MGCP 1.0
[INFO] C:FFFF
[INFO]
[INFO] local Tx ID = 4 Remote Tx ID = 4 Sending the Command 2
[INFO] Received DeleteConnectionResponse with transaction ID 4
[INFO] Received AuditEndpoint with transaction ID 7
[INFO] Sent AuditEndpointResponse with transaction ID 7
[INFO] Received DeleteConnectionResponse with transaction ID 4
[INFO] Received EndpointConfigurationResponse with transaction ID 5
[INFO] Received CreateConnection with transaction ID 9
[INFO] Sent CreateConnectionResponse with transaction ID 9
[INFO] message =
[INFO] EPCF 8 local@127.0.0.1:2727 MGCP 1.0
[INFO] B:e:mu
[INFO]
[INFO] local Tx ID = 8 Remote Tx ID = 6 Sending the Command 2
[INFO] Received EndpointConfigurationResponse with transaction ID 6
[INFO] message =
[INFO] MDCX 10 local@127.0.0.1:2727 MGCP 1.0
[INFO] C:FFFF
[INFO] I:FFFF
[INFO]
[INFO] local Tx ID = 10 Remote Tx ID = 7 Sending the Command 2
[INFO] Received ModifyConnectionResponse with transaction ID 7
[INFO] Received EndpointConfigurationResponse with transaction ID 6
[INFO] Received ModifyConnectionResponse with transaction ID 7
[INFO] Received ModifyConnectionResponse with transaction ID 8
[INFO] Received NotificationRequestResponse with transaction ID 9
[INFO] Received DeleteConnection with transaction ID 16
[INFO] Sent DeleteConnectionResponse with transaction ID 16
[INFO] message =
[INFO] MDCX 13 local@127.0.0.1:2727 MGCP 1.0
[INFO] C:FFFF
[INFO] I:FFFF
[INFO]
[INFO] local Tx ID = 13 Remote Tx ID = 10 Sending the Command 2
[INFO] Received ModifyConnectionResponse with transaction ID 10
[INFO] message =
[INFO] RQNT 14 local@127.0.0.1:2727 MGCP 1.0
[INFO] X:FFFF
[INFO]
[INFO] local Tx ID = 14 Remote Tx ID = 11 Sending the Command 2
[INFO] Received NotificationRequestResponse with transaction ID 11
[INFO] message =
[INFO] RQNT 15 local@127.0.0.1:2727 MGCP 1.0
[INFO] X:FFFF
[INFO]
[INFO] local Tx ID = 15 Remote Tx ID = 12 Sending the Command 2
[INFO] Received NotificationRequestResponse with transaction ID 12
[INFO] message =
[INFO] NTFY 17 local@127.0.0.1:2727 MGCP 1.0
[INFO] X: FFFF
[INFO] O: */AllEvents
[INFO]
[INFO] local Tx ID = 17 Remote Tx ID = 13 Sending the Command 2
[INFO] Received NotifyResponse with transaction ID 13
[INFO] Received ModifyConnectionResponse with transaction ID 10
[INFO] Received NotificationRequestResponse with transaction ID 11
[INFO] Received EndpointConfiguration with transaction ID 24
[INFO] message =
[INFO] RQNT 18 local@127.0.0.1:2727 MGCP 1.0
[INFO] X:FFFF
[INFO]
[INFO] local Tx ID = 18 Remote Tx ID = 14 Sending the Command 2
[INFO] message =
[INFO] NTFY 19 local@127.0.0.1:2727 MGCP 1.0
[INFO] X: FFFF
[INFO] O: */AllEvents
[INFO]
[INFO] local Tx ID = 19 Remote Tx ID = 15 Sending the Command 2
[INFO] message =
[INFO] NTFY 20 local@127.0.0.1:2727 MGCP 1.0
[INFO] X: FFFF
[INFO] O: */AllEvents
[INFO]
[INFO] local Tx ID = 20 Remote Tx ID = 16 Sending the Command 2
[INFO] message =
[INFO] RSIP 21 local@127.0.0.1:2727 MGCP 1.0
[INFO] RM:disconnected
[INFO]
[INFO] local Tx ID = 21 Remote Tx ID = 17 Sending the Command 2
[INFO] Sent EndpointConfigurationResponse with transaction ID 24
[INFO] Received NotificationRequestResponse with transaction ID 14
[INFO] Received NotifyResponse with transaction ID 15
[INFO] Received NotifyResponse with transaction ID 16
[INFO] Received RestartInProgressResponse with transaction ID 17
[INFO] Test of messaging capability succeeded!
Wednesday, February 4, 2009
Mobicents JAIN MGCP 2.0.0.CR1 Released!
Before this MGCP implementation was always part of Mobicents Media Server. However MGCP is a industry standard and can be used by applications to control Media Server's other than Mobicents Media Server. To learn more about MGCP please refere to RFC 3435 and JSR 23.
Where to download from?
The distribution can be found on SourceForge.net. The binary package is mobicents-mgcp-impl-2.0.0.RC1.
https://sourceforge.net/
Source repositories:
-------------------
SVN
http://mobicents.googlecode.
SVN TAG
http://code.google.com/p/
How to get started & Media Server Documentation
------------------------------
http://groups.google.com/
Looking forward to your feedback
http://groups.google.com/group/mobicents-public/browse_thread/thread/4944fde3177f813e