Friday, July 30, 2010

Mobicents Media Server (MMS) v2.0.0.CR3 Released!

We are happy to announce the release of Mobicents Media Server (MMS) v2.0.0.CR3

There are couple of new feature added as well as performance improvements

  1. The issue with MBROLA TTS fixed and by default 3 voices are available. For details look at http://code.google.com/p/mobicents/issues/detail?id=1476
  2. New mixers are added for Conference Endpoint http://code.google.com/p/mobicents/issues/detail?id=1599
  3. Connection can now be audited to know the statistics at real-time. Details at http://code.google.com/p/mobicents/issues/detail?id=1598
  4. For more details look at http://code.google.com/p/mobicents/issues/list?cursor=1604&q=label%3AComponent-Media-Server%20label%3ARelease-Type-Candidate-3%20label%3AVersion-2.0.00&updated=1604&ts=1280517894&can=1
  5. The majority of effort was to integrate the SS7 lower layers MTP2/MTP3 on MMS side such that MMS can be used as Media Gateway once B Channel Endpoint is done. For SS7 related announcement look at http://groups.google.com/group/mobicents-public/browse_thread/thread/e9d5a29020612e1c

The MMS 2.x.y can be controlled using MGCP Protocol

To understand how to use JSR-309 Impl with Sip Servlet look at JSR 309 Demo example available with latest Mobicents Sip Servlets Server release.

To understand how to use Mobicents Media Server with JAIN SLEE Server look at mgcp-demo, echo and packet-relay-demo examples.

Mobicents Media Server Home Page:
http://www.mobicents.org/mms/mms-main.html

MMS Guide page:
http://www.mobicents.org/mms/mms-docs.html

Where to download from?
-----------------------
The distribution can be found on SourceForge.net. The binary package for standalone is mms-standalone-2.0.0.CR3.zip

Download from

https://sourceforge.net/downloads/mobicents/Mobicents%20Media%20Server/2.0.0.CR3/

Source repositories:
-------------------

SVN checkout
http://mobicents.googlecode.com/svn/tags/servers/media/2.x.y/core/mms-core-2.0.0.CR3/

SVN Browsing
http://code.google.com/p/mobicents/source/browse/#svn/tags/servers/media/2.x.y/core/mms-core-2.0.0.CR3

Looking forward to your feedback:
---------------------------------
http://groups.google.com/group/mobicents-public

Mobicents Media Server Team

Thursday, May 6, 2010

Mobicents MGCP Impl Stack goes GA!

Mobicents Media Server team released the second stable version of MGCP Impl stack. The main focus was to improve the performance to a level where MGCP signaling doesn't hamper the media quality. We are very happy to take MGCP Stack to a level where it can easily achieve 1000 CPS rate, where 1 CPS is round-trip of CRCX, RQNT and DLCX request/response.

One of the major changes incorporated is entire stack is now single threaded. This is very important for predictable behavior and to make sure that thread context switching doesn't go beyond control, where media processing cannot be started and executed in stipulated time.

The distribution can be found on SourceForge.net. The binary package is
mobicents-mgcp-impl-2.0.0.GA.jar:
https://sourceforge.net/project/admin/explorer.php?group_id=102670

SVN Trunk Checkout http://mobicents.googlecode.com/svn/trunk/protocols/jain-mgcp

SVN Trunk Browse http://code.google.com/p/mobicents/source/browse/#svn/trunk/protocols/jain-mgcp

SVN Tag Checkout http://mobicents.googlecode.com/svn/tags/protocols/jain-mgcp/mobicents-mgcp-impl-2.0.0.GA/

SVN Tag Browse http://code.google.com/p/mobicents/source/browse/#svn/tags/protocols/jain-mgcp/mobicents-mgcp-impl-2.0.0.GA

Mobicents MGCP Home Page

Looking for your feed back

Enjoy the most powerful MGCP Stack :)

Saturday, February 6, 2010

RTSP supported by JBoss Netty!

The RTSP stack that was developed and maintained by mobicents is now merged with Netty main stream! RTSP is extension of HTTP Protocol. Netty already have very good support for HTTP; adding RTSP was just an extension.

A big thanks goes to Trustin for merging Mobicents RTSP Code and providing support.

Release version Netty 3.2.0.ALPHA4 already has the RTSP included. However there are no examples available. If you want to understand how to use the RTSP stack have a look at RtspServerStackImpl in Mobicents Media Server, which represents the Server side for RTSP. Classes in Package org.mobicents.media.server.ctrl.rtsp (here) shows how to maintain the state.

Though Mobicents Media Server is not using RtspClientStackImpl, I have just added this to show how RTSP can be used at Client side also.

Once I find some time I will add RTSP examples directly in RTSP Trunk.

Download your 3.2.0.ALPHA4 version of Netty from here .

Enjoy!

Saturday, January 23, 2010

Mobicents JSR-309 Impl 2.0.0.BETA3 Released!

We are happy to announce the binary release of Mobicents JSR-309 implementation 2.0.0.BETA3 !

This is just intermediary release and still uses the JSR309 draft API before we start implementing the JSR309 Final Spec.

Announcement is here

Download from here

Mobicents JSR-309 Impl page http://www.mobicents.org/mms-jsr309-main.html

Looking forward to your feedback mobicents-public@googlegroups.com


Mobicents Media Server Team

Thursday, January 14, 2010

Mobicents Media Server (MMS) v2.0.0.BETA3 Released!

We are proud to announce the release of Mobicents Media Server (MMS) v2.0.0.BETA3

The major focus of this release has been making MMS
  1. Video capable
  2. RTSP Enabled
  3. SS7 Support

Video

To make Video possible, MMS has its own parser to parse ISO Based Media files. Any request for playing ISO Based Media files is first parsed and then depending on the Tracks (audio/video or both) supported, the Player streams the individual tracks separately. Bellow diagram shows abstract of how MMS takes care of video internally.

RTSP

RTSP is a separate Controller module in MMS 2.0.0.BETA3. Now MMS can either be controlled using the MGCP or RTSP Requests. While both have different requirements and may not be needed in same MMS instance at same time. With modular structure of MMS its very easy to remove either of controller modules from MMS by deleting /deploy/mgcp-conf.xml or /deploy/rtsp-conf.xml depending on needs. By default RTSP starts at port 554. Linux users either have to start as root or change this port as in Linux, and other UNIX-like systems, you have to be root (have superuser privileges) in order to listen to TCP or UDP ports below 1024 (the well-known ports). The default media directory is /media and every RTSP request to play a media file searches for file in this directoey. By default it comes with sample_50kbit.3gp, sample_100kbit.mov and sample_100kbit.mp4 ISO based media files. As of now there are known issues with parsing for sample_100kbit.mov. Nevertheless you can stream the media to your favriote player by opening the url rtsp://:554/sample_100kbit.mp4. Add your own media files here and stream them on the fly - no need to restart the server.

The bellow diagram shows how components fit in RTSP.

SS7

This is one of the biggest achievement of MMS. With SS7 support the Mobicents truly becomes Telco solution provider ranging from legacy protocols like SS7 to next generation networks like SIP used extensively in IMS. The SS7 support in MMS is provided by using the SS7 cards available in market and hence for the first time MMS uses the external hardware. These SS7 cards must be Zaptel compatible (Digum / Sangoma cards). For SS7 support, the MMS only takes care of lower layers MTP2/MTP3 for signalling. MMS is also responsible for circuit media. The higher protocols like ISUP, SCCP etc is external to MMS. We are developing the higher layer (layer 4 and above of SS7) as individual stacks (for example ISUP Stack, SCCP stack etc). These higher layer stacks can be used by respective Resource Adaptor in Mobicents JAIN SLEE Server or can be consumed by Sip Servlets and hence make Sip Servlets SS7 capable! While the MTP2/MTP3 is ready in MMS 2.0.0.BETA3, considerable efforts are spent in developing higher layers stacks. Look at MMS SS7 Roadmap for further details. The public page also explains how Dialogic cards can be directly used with native Dialogic drivers taking care of lower SS7 layers.

Bellow diagram shows how components fit in MMS - SS7 Architecture


For configuration regarding the Zaptel Card visit http://groups.google.com/group/mobicents-public/web/mms-ss7-support





The public announcement is here

Enjoy the Video! and develop real Converged Application :)

Cheers
Mobicents Media Server Team.

Tuesday, September 15, 2009

Mobicents RTSP Stack 1.0.0.BTA1 Released!

We are happy to announce the first version 1.0.0.BETA1 of Mobicents RTSP stack. Mobicents RTSP which is built on top of Netty 3.0.1.GA uses the NIO Socket (TCP). The stack doesn't have any state machine and is neutral to be used either at RTSP Client side or RTSP Server side. The main purpose to have RTSP Stack is to provide RTSP Support for Mobicents Media Server.

As of now only TCP is supported.

Binary (including src) is available at
https://sourceforge.net/projects/mobicents/files/Mobicents%20RTSP/

SVN tag
http://mobicents.googlecode.com/svn/tags/servers/media/2.x.y/rtsp/mobicents-rtsp-1.0.0.BETA1


Look at example code

For Client Side
http://mobicents.googlecode.com/svn/tags/servers/media/2.x.y/rtsp/mobicents-rtsp-1.0.0.BETA1/src/main/java/org/mobicents/rtsp/example/Client.java

For Server Side
http://mobicents.googlecode.com/svn/tags/servers/media/2.x.y/rtsp/mobicents-rtsp-1.0.0.BETA1/src/main/java/org/mobicents/rtsp/example/Server.java

These are just for understanding on how to initialize the stack.

Any feedback please divert http://groups.google.com/group/mobicents-public/topics

Enjoy the RTSP :)

Mobicents Media Server Team.

Thursday, July 23, 2009

Mobicents JSR-309 Impl 2.0.0.BETA2 Released!

We are happy to release 2.0.0.CR2 version of Mobicents JSR309 Implementation. There are quite a few changes in JSR309 API and hence the implementation too has changed.

Specifically the Events structure have changed. Now the MediaEvent has method isSuccessful() which returns true if the event is for success, false otherwise. Hence every listener will have to have this preliminary check done and act accordingly.


Every NetworkConnection now has a SdpPortManager. The SdpPortManager is compatible with the offer/answer model. Please look at API to understand SdpPortManager. Its an important change


New features that have been added is there is an implementation for MediaConfig now. MediaConfig defines the internal structure of ResourceContainer (NetworkConnection, MediaGroup, MediaMixer etc). For predefined configurations like NetworkConnection.BASIC, MediaGroup.PLAYER, MediaGroup.PLAYER_RECORDER_SIGNALDETECTOR the implementation already has corresponding predefined MediaConfigs. The access to this predefined MediaConfigs can be achieved by calling MsControlFactory.getMediaConfig(Configuration configuration) passing one of the predefined Configuration as parameter.

The MediaConfig implementation shows the mapping between the JSR309 events/signals and corresponding MGCP events. Also it shows the endpoint name on Mobicents Media Server (MMS) that this ResourceContainer is firing signals/events on. Hence if you change the endpoint name on MMS, get the handle to existing MediaConfig impl and create a custom clone by passing new set of Parameters for example


MediaConfig playerConfig = msControlFactory.getMediaConfig(MediaGroup.PLAYER_RECORDER_SIGNALDETECTOR);
Parameters pNew = msControlFactory.createParameters();
pNew.put(ExtendedParameter.ENDPOINT_LOCAL_NAME, "/thisis/new/endpointname/1");

MediaConfigImpl clone = (MediaConfigImpl) playerConfig.createCustomizedClone(pNew);

mediaSession.createMediaGroup(clone, someParams);

In this case someParams could be null as mobicents JSR309 impl still doesn't take them into consideration.

Other way of doing this get the handle to existing MediaConfig impl and get the XML string by calling marshall()

String xml = playerConfig.marshall();

The xml will look like

<?xml version="1.0" encoding="UTF-8"?>
< resource-container>
  < parameter>
    < key> ENDPOINT_LOCAL_NAME < &frasl key >
    < value > &frasl mobicents &frasl media &frasl IVR &frasl$ < &frasl value >
  < &frasl parameter >
  < player >
    < signal >
      < mgcp-event > ann < &frasl mgcp-event >
      < mgcp-package > A < &frasl mgcp-package >
      < on-endpoint > true < &frasl on-endpoint >
    < &frasl signal >
    < event >
      < mgcp-event > oc < &frasl mgcp-event >
      < mgcp-package > A < &frasl mgcp-package >
      < on-endpoint > true < &frasl on-endpoint >
      < media-event > PLAY_COMPLETED< &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > of < &frasl mgcp-event >
      < mgcp-package > A<&frasl mgcp-package >
      < on-endpoint > true < &frasl on-endpoint >
      < media-event > PLAY_COMPLETED< &frasl media-event >
    < &frasl event >
  < &frasl player >
  < recorder >
    < signal >
      < mgcp-event > aupr < &frasl mgcp-event >
      < mgcp-package > AU<&frasl mgcp-package >
      < on-endpoint > true < &frasl on-endpoint >
    < &frasl signal >
  < &frasl recorder >
  < signal-detector >
    < event >
      < mgcp-event > dtmf0< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf1< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf2< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf3< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf4< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf5< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf6< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf7< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf8< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmf9< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmfA< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmfB< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmfC< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmfD< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmfStar< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
    < event >
      < mgcp-event > dtmfHash< &frasl mgcp-event >
      < mgcp-package > D<&frasl mgcp-package >
      < on-endpoint > false < &frasl on-endpoint >
      < media-event > SIGNAL_DETECTED < &frasl media-event >
    < &frasl event >
  < &frasl signal-detector>
< &frasl resource-container>

use you favorite XML parser and replace the /mobicents/media/IVR/$ with your value for enpoint for example /thisis/new/endpointname/1. Again get the String of this new XML and create a new MediaConfig object by calling

Reader xmlDoc = new StringReader(xml);
MediaConfig config = msControlFactory.getMediaConfig(xmlDoc);

And then get the corresponding ResourceContainer by passing this MediaConfig to mediaSession. Though this is lengthy process process, it will be useful in future to create a custom MediaConfig when JSR309Impl is mature enough to take custom MediaConfigs.

For now we have flexibility to change the MGCP vs JSR309 events and Endpoint names.

Please note that JSR309 is still under public review and not final. However unless and untill there are major change in API, mobicents JSR309 impl will not change.

Mobicents JSR309 impl version 2.0.0.BETA2 can be downloaded from https://sourceforge.net/projects/mobicents/files/

The Mobicents JSR309 home page is at http://www.mobicents.org/mms-jsr309-main.html

Follow the announcement here http://groups.google.com/group/mobicents-public/browse_thread/thread/5791bdce0143d5f9#

Please post your comments to http://groups.google.com/group/mobicents-public


Enjoy the JSr309 :)

Mobicents Media Server Team