This feature lets users create multi-party sessions between two or more parties .
- Feature cheat-sheet
- Source Code
- Subscriber data
- Network data
- Description
- Specification compliance
- Conferencing between three participants
- Interaction with MMTel Conference Subscription feature
- Feature interaction
- Charging
- Inputs and outputs
- Statistics
- Error scenarios
- Mappers
- Mapper Configuration
- Feature responses
- Configuration profile naming
- Conference view
- Conference event package
- Provisioning interfaces
Feature cheat-sheet
B2BUA Instance | Originating / Terminating | Point(s) in Session Plan | Network Operator Data | Subscriber Data | Stateful or Stateless | POJO Feature or SBB Feature |
---|---|---|---|---|---|---|
MMTEL |
Terminating |
|
Yes |
No |
Stateful |
SBB with multiple FSMs encoded into session state |
Source Code
This feature’s source code is available in the Sentinel VoLTE SDK in the mmtel-conferencing
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack, for example:
> create-module new-conf-module opencloud#mmtel-conferencing#volte/2.7.0;2.7.0.0
This command will prompt you for information needed to create the new modules, once completed the original source for the feature can be found in the new modules.
The module-pack includes the following modules relevant to this feature:
Module Name | Description |
---|---|
mmtel-conferencing |
Group module for the feature that includes all of the modules listed below. |
mmtel-conf-library |
Contains common code for the conference modules. |
mmtel-conf-profile |
Contains the profile specification for the conferencing configuration profile table. |
mmtel-conf-view-profile |
Contains the profile specification for the profile table used to track information about a conference. |
mmtel-conf-event-schema-library |
Generates java code for the the conference event XML schema. |
mmtel-conf-msml-schema-library-dialogic |
Generates java code for the MSML XML schema. Required for interaction with Dialogic MRF. |
mmtel-conf-msml-schema-library-radisys |
Generates java code for the MSML XML schema. Required for interaction with Radisys MRF. |
mmtel-conf-mapper-library-dialogic |
Mapper library that uses mmtel-conf-msml-schema-library-dialogic to create conference MSML. |
mmtel-conf-mapper-library-radisys |
Mapper library that uses mmtel-conf-msml-schema-library-radisys to create conference MSML. |
mmtel-conf |
Contains the feature itself. |
Subscriber data
Not applicable; the feature is generally available unless disabled at the network level.
Network data
Data is stored in the MMTelCONFConfigProfileTable
profile
Parameter | Type | Description | Default | Note |
---|---|---|---|---|
MRFURI |
String |
SIP or TEL URI for the MRF |
none |
|
ICSCFURI |
String |
SIP or TEL URI for the I-SCSCF |
none |
Mandatory when the |
ConfFactoryPSI |
String |
SIP or TEL URI for conferencing service PSI |
none |
|
ConfMaxParticipants |
Integer { |
Maximum number of participants; |
3 |
|
ConfCascadingEnabled |
Boolean |
Allow other conference participants to cascade conferencing |
true |
Reserved. Current implementation ignores it. Cascading is not explicitly disabled. |
ConferenceViewRemovalDelay |
Long |
Delay after conference ends before ConferenceView profiles are removed |
none |
Delay to allow all outstanding subscriptions to conference to end |
IsVideoConferenceAllowed |
Boolean |
Policy setting that allows a video conference to be created or not |
False |
|
IsMrfRoutableViaIMS |
Boolean |
Policy setting that specifies if calls to the MRF should be routed via IMS |
False |
If set to true, then the ICSCFURI has to be set |
AddOrigParameter |
Boolean |
Indicates whether or not to add the orig URI parameter to the Route header for initiating calls to participants |
True |
|
RootOnSelector |
Boolean |
Decides whether the 'root' element will be a child of the 'selector' element, otherwise will be a child of 'videolayout' |
False |
|
Bandwidth |
Integer |
Bandwidth value to be used as an attribute of the 'root' element if not specified in INVITE SDP |
128 |
Required for integration with Radisys MRF |
MinimumPictureInterval |
Integer |
Mpi value to be used as an attribute of the 'root' element if not specified in INVITE SDP |
16 |
Required for integration with Radisys MRF |
MaximumPictureSize |
String |
Bpp value to be used as an attribute of the 'root' element if not specified in INVITE SDP |
none |
Required for integration with Radisys MRF |
Framesize |
Integer |
Framesize value to be used as an attribute of the 'root' element if not specified in INVITE SDP |
396 |
Required for integration with Radisys MRF |
ProfileLevelId |
String |
ProfileLevelId value to be used as an attribute of the 'root' element if not specified in INVITE SDP |
00800a |
Required for integration with Radisys MRF |
Description
Feature name |
|
---|---|
Applicable contexts |
SIP service |
Prerequisite features |
This feature allows a user to create a multi-party session between two or more parties. The feature is initially triggered when a subscriber (conference moderator) makes a call to the conferencing factory URI that points towards a media server (MRFC/MRFP). Subsequently, the conference moderator joins one or more participants into the conference by creating a call leg between the media server and every participant. For every participant added to the conference the feature instructs the media server to join (or mix) media of the new participant with the conference session media. The feature enables n-way voice communication between all conference participants by mixing media from each participant session.
Conference moderator is a special role that allows adding and removing participants to and from a conference. Charging is correlated to the moderator session. Accordingly, all participants' sessions are terminated when the moderator disconnects.
The feature feeds conference state data into the MMTel Conference Subscription, which renders the state of a conference to arbitrary endpoints subscribed to the conference event package.
Specification compliance
-
IR.92 v9.0, section 2.3.3, Ad-Hoc Multi Party Conference of IR.92 IMS Profile for Voice and SMS
-
IR.94 v10.0, section 2.3.3, Ad-Hoc Multi Party Conference of IR.94 IMS Profile for Conversational Video Service
-
3GPP 24.605 Conferencing using the IP Multimedia (IM) Core Network (CN) subsystem. Release 12.
-
RFC4579 Session Initiation Protocol Call Control — Conferencing for User Agents
-
RFC4575 A Session Initiation Protocol (SIP) Event Package for Conference State
-
RFC3891 The Session Initiation Protocol (SIP) “Replaces” Header
-
RFC3892 The Session Initiation Protocol (SIP) Referred-By Mechanism
Conferencing between three participants
Conference setup begins when the conference moderator establishes a session with the media server using the conferencing feature. Although not strictly a precondition, the conference moderator would have established sessions with party B and C (dialogs x and y). These are established outside the scope of the conferencing feature. The moderator dials a destination that is translated into a conference factory URI by the feature, and routed to the media server.
Additionally, when the moderator sets up a connection to the media server, the feature allocates a conference focus URI. It is an opaque SIP URI that identifies the conference instance, and essentially the multi-party session. The conference focus URI is used as a SIP target by all participants including the moderator for all subsequent SIP messaging.
Having set up the initial connection, the conference moderator creates a conference object and begins adding participants to the conference. It is a multi-step process that involves setting up new sessions with the new participants and interaction with the media server, using the MSML protocol over SIP/INFO as the protocol transaction transport. See Interaction with Media Server for details.
Three-party conference setup overview
When the moderator establishes the session with the media server (control connection) the conferencing feature:
-
creates the MSML conferencing object and the first MSML connection for the moderator.
The moderator can then join a participant by creating a SIP REFER
transaction on dialog A, where the REFER
request has a Refer-to
header with a URI header Replaces
that references an existing call x between the moderator (user A) and prospective participant (user B).
The conferencing feature then:
-
acknowledges the
REFER
request with a202
response -
performs a charging authorization check
-
if charging authorization check is successful, creates and links two SIP sessions:
-
the conferencing server and the media server (dialog B1)
-
the new participant and the conferencing server (dialog B)
-
After dialog B has been successfully created, the corresponding call x is terminated by the UA of the user B, as a part of processing of the INVITE request with the Replaces header copied from the corresponding REFER request.
|
-
re-uses the MSML conferencing object, and joins the participant into the conference.
Once successful, the first two participants are joined into the conference. Adding subsequent participants is an identical process.
Routing SIP traffic towards Media Server (MRF) through the IMS
The MMTelCONF feature may directly contact a Media Server/Media Resource Function. This means that any INVITE from the feature is sent directly to the MRF. The Request URI of the outbound INVITE is set to the URI of the MRF.
This feature also supports routing INVITEs destined for the MRF through the IMS.
In order to route through the IMS, the network configuration attribute IsMrfRoutableViaIMS must be set to true in the
MMTelCONFConfigProfileTable
When this attribute is set to true and the initial INVITE from the conference moderator is received via the S-CSCF, the feature stores the Record-route SIP URI in the Session State attribute named SCSCFRouteAddress. In order to route the INVITE through the IMS, the feature retrieves the SIP URI (of the S-CSCF) from Session State, and places it as the topmost route header of the outbound INVITE.
The feature will also add a header parameter specified in configuration attribute RouteOrigUrlParameter to the Route header. For example, if parameter is set to value "orig" it will enable originating services to be run on outbound sessions from the conference server towards the conference participants.
Conference media
Every conference participant establishes signalling and media sessions with Media Server. Media Server performs mixing of media of all participants and enables all participants to hear each other (audio conference) and see each other (video conference).
Conference audio mixer
Loudest participants Optional MSML element <n-loudest> determines the number of participants from which audio is mixed based on their audio energy. MMTelCONF doesn’t define this element and relies on the default behaviour that causes Media Server to mix audio from all participants.
Audio sampling rate
Optional attribute samplerate determines the sample rate for the audio mixer. MMTelCONF doesn’t define this attribute leaving to the default 8000 kHz.
Active speaker notification
Active speaker notification enables active speaker to be notified with appropriate type of MSML event. MMTelCONF doesn’t define this attribute leaving to the default behaviour where notification is not supported.
DTMF and in-band tone clamping
When enabled Media Server blocks DTMF and in-band tones from being mixed. MMTelCONF doesn’t define this attribute leaving to the default where clamping is not performed.
Video layout
MMTelCONF implements a simple video layout where a single region over the root window displays the most active speaker. The same video output is offered to all conference participants.
Video resolution
Range of video resolutions are supported and configurable at a feature level. Media Server must support the values configured.
Abbreviation | MSML schema v1.1 compliant | Value | Note |
---|---|---|---|
CIF |
Yes |
352 × 288 |
Supported; Default |
QCIF |
Yes |
176 × 144 |
Supported |
4CIF |
Yes |
704 × 576 |
Not supported |
16CIF |
Yes |
1408 × 1152 |
Not supported |
SQCIF |
No |
128 × 96 |
Proprietary support only |
VGA |
No |
640 x 480 |
Proprietary support only |
QVGA |
No |
320 x 240 |
Proprietary support only |
HD720p |
No |
1280 x 720 |
Proprietary support only |
HD720p_4x3 |
No |
960 x 720 |
Proprietary support only |
Degrading from and upgrading to video media
Video conference is triggered when:
Video conferencing is administratively enabled (IsVideoConferenceAllowed=true), and Conference moderator makes a video media offer that is acceptable to Media Server If one of these preconditions is not met the conference shall have only audio media mixed irrespective if all or some participants have successfully negotiated video session with Media Server. This is because the feature will not instruct the Media Server to mix video media.
When the feature has determined a video conference session state field IsVideoConference will be set to true. The conference will remain marked as video conference regardless of whether some or all participants downgrade their media to audio only.
If a conference has been determined as a video conference any one participant including the moderator can downgrade/upgrade the media to/from video by sending re-INVITE with video media description IP port set to zero (downgrade) or non-zero (upgrade). Alternatively, conference participant can re-INVITE with video media description excluded or included achieving the same result.
Video only conference
Video only communication may occur on any one participant leg provided this is acceptable to both Media Server and the participant. Video only communication can occur when a participant or media server didn’t have matching audio codecs or have mismatching parameters.
Terminating conference
The conference is considered to be terminated when the conference moderator, either:
-
has disconnected, which will trigger the feature to remove all remaining participants
-
is the last participant remaining after all other participants have disconnected.
Removing participants
The conference moderator can eject any participant at will by creating a REFER
transaction with a request that contains a Refer-to
header with a URI parameter method=BYE
and a URI referencing the participant to be ejected.
This feature removes the participant by terminating both call legs for that participant.
Re-INVITE Based Three-party conference setup overview
There is an alternative flow when setting up a conference. Under this flow, participants receive a re-INVITE on the consulting call rather than an INVITE with Replaces. This means that releasing the consulting call between the moderator and the participant is now the responsibility of the AS, rather than the UE.
In order for the re-INVITE based flow to function:
-
SCC Conference Handling configuration must be toggled on (set the
EnableSCCConfHandling
attribute totrue
) -
there is no originating iFC for the call from the moderator towards the Conference Factory PSI
-
originating and terminating SCC-AS must be implemented
-
the INVITE with Replaces sent by conferencing must trigger originating SCC processing
-
all sessions are subject to Session Tracking (this is automatically enabled when the
EnableSCCConfHandling
attribute is set totrue
)
Once the requirements are met the originating SCC-AS can implement the re-INVITE based flow. For a reference to the features used to implement this in the SCC-AS please refer to Reuse of access transfer procedures for conferencing. Configuration and flows for this capability are described in the following portion.
SCC Conference Handling Configuration
SCC Conference handling configuration data is stored in the SCCConfHandlingConfigProfileTable
profile table.
Each profile is scoped according to a Sentinel Selection Key. By default there is one profile in the table.
Each profile contains the following attributes.
Parameter | Type | Description | Default | Note |
---|---|---|---|---|
EnableSCCConfHandling |
Boolean |
Enables SCC conf handling |
false |
|
ConfFactoryPSI |
String |
SIP or TEL URI for conferencing service PSI |
none |
Needs to match the value of |
Flows
The first flow shows standard treatment where the INVITE with Replaces is passed and translated all the way through to the participant.
The second flow shows the re-INVITE based alternative enabled by the originating SCC where the INVITE with Replaces is converted to a re-INVITE on the participant’s consulting call.
Interaction with MMTel Conference Subscription feature
MMTel Conference and MMTel Conference Subscription features share the data stored in the MMTelCONFView profiles associated with a given conference if there is at least one active subscription session for the associated conferenceID
. The data is updated in the MMTel Conference feature when the conference is modified and is subsequently read by the MMTel Conference Subscription feature when it periodically polls for state changes. The ConferenceViewRemovalDelay in the MMTel Conference feature’s configuration provides a mechanism to allow all subscription sessions associated with MMTel Conference Subscription feature for the ended conference to complete before the MMTelCONFView profiles are removed.
Feature interaction
An initial INVITE
with a Replaces
header must be exempted from processing by a feature that performs call re-targeting, call barring, call rejection, or early session announcements.
Charging
Online charging uses a single OCS session for all legs of the conference:
-
The OCS Session begins when the conference creator sets up a call with the conference server (MT instance).
-
A credit check is performed before each participant is joined (event-based charging).
-
A credit check/reservation is performed on the MO instance of every participant leg.
-
The
icid
value of theP-Charging-Vector
header in the receivedINVITE
from the conference creator is copied into theP-Charging-Vector
of everyINVITE
sent towards a participant, as a way of charging correlation.
Inputs and outputs
Session state and leg manager data
Inputs
Name | Type | Format | Description | Behaviour if null/invalid | Note |
---|---|---|---|---|---|
Sentinel Selection Key |
com.opencloud.sentinel.common.SentinelSelectionKey |
selection key (for example, |
For selecting configuration data |
Feature not executed |
Session State Data |
Sentinel Script Execution Point |
enum com.opencloud.sentinel.feature.SipFeatureScriptExecutionPoint |
Determination of context of execution, such as credit check, early session, mid-dialog session |
No execution |
Session State Data |
|
Call Type |
enum com.opencloud.sentinel.common.CallType |
Determination of context of execution, such as |
NA |
Session State Data |
|
Call Leg |
com.opencloud.sentinel.multileg.Leg |
Determination of leg that receives an event |
Call terminated |
Leg Manager API |
Outputs
Name | Type | Format | Description | Note |
---|---|---|---|---|
ConferenceID |
String |
A 16-character alpha-numeric string prefixed with |
Generated by the feature when setting up moderator connection |
|
ConferenceFocusAddress |
String |
SIP URI |
URI derived from conference ID used to address the conference UA instance, such as |
Session State Data |
ControlPartLegName |
String |
Control leg name, participant side |
Session State Data |
|
ControlMRFLegName |
String |
Control leg name, Media server side |
Session State Data |
|
CurrentConnectionRequest |
|
Value object that represent request data and state of processing for joining a new participant; request that is being processed currently |
Session State Data |
|
ConnectionRequestQueue |
|
Pending requests to join new participants |
Session State Data |
|
JoiningParticipants |
|
Requests for which media bridging is in progress (MSML transaction is in progress) |
Session State Data |
|
JoinedParticipants |
|
Value objects that represent that participants that have been joined into conference including those already disconnected |
Session State Data |
|
VideoConferenceResolution |
|
Value to represent the video conference resolution used for control MRF session |
Session State Data |
|
Bandwidth |
Integer |
Bandwidth value to use for control MRF session |
Session State Data |
|
MinimumPictureInterval |
Integer |
Mpi value to use for control MRF session |
Session State Data |
|
MaximumPictureSize |
String |
Bpp value to use for control MRF session |
Session State Data |
|
FrameSize |
Integer |
Framesize value to use for control MRF session |
Session State Data |
|
ProfileLevelId |
String |
Profile-level-id value to use for control MRF session |
Session State Data |
|
Codec |
String |
Codec value to use for control MRF session |
Session State Data |
Execution of this feature can also affect the conference view during execution if a participant is added or their status has changed.
Statistics
MMTelCONF statistics are tracked by the MMTelCONF SBB and can be found under the following parameter set:
SLEE-Usage → volte.sentinel.sip service ID → MMTelCONF SBB ID.
Statistic | Incremented when… |
---|---|
FeatureInvocations |
the conference feature runs |
FeatureFsmCompletions |
the main conference FSM reaches its end state |
SentinelAborts |
Sentinel VoLTE instructs the conference feature to abort execution |
SipParseMinorFailure |
a non-fatal error occurs while attempting to read the information in a SIP message |
SipDataAccessFailure |
a problem occurs while trying to access a SIP leg or message |
SipParticipantSentByeOnActiveConnection |
a |
SipParticipantSentByeOnInactiveConnection |
a |
SipMRFSentByeOnActiveConnection |
a |
SipMRFSentByeOnInactiveConnection |
a |
ConferenceFeatureConfigurationFailure |
a problem occurs while trying to load the conference feature’s network-level configuration data |
ConferenceCoreError |
a fatal error occurs in the core conference feature FSM |
ConferenceConnectionError |
a fatal error occurs in the conference feature’s non-control connection management FSM |
ConferenceConnectionEstablished |
a non-control connection is successfully established between a conference participant and the MRF |
ConferenceConnectionMRFLegCreated |
a non-control leg to the MRF is successfully established |
ConferenceConnectionTerminated |
a fully established non-control conference connection is terminated |
ConferenceConnectionCreditCheckInitiated |
the conference feature triggers a credit check |
ConferenceConnectionParticipantSupportsVideo |
a participant has indicated that they support video in an SDP answer |
ConferenceControlConnectionError |
a fatal error occurs in the conference feature’s control connection management FSM |
ConferenceControlConnectionEstablished |
a control connection is successfully established between a conference moderator and the MRF. |
ConferenceControlConnectionTerminated |
a fully established conference control connection is terminated. |
ConferenceControlConnectionReceivedMalformedMessage |
a badly formed REFER request is received from the conference moderator. |
FromHeaderAnonymised |
the moderator has indicated they want privacy applied to the outgoing INVITE |
ConferenceMediaVideoSelected |
the moderator sets the conference up as a video session |
ConferenceMediaServerIsAccessedViaSCSCF |
the feature makes a call to the MRF via the S-CSCF |
Error scenarios
Scenario | Handling |
---|---|
Second initial request received towards conference PSI |
Report |
Non MT request received by conference PSI |
Report |
Mappers
This feature uses two different sets of mappers that conform to:
Mapping | Mapper Execution Point |
---|---|
MMTelCONFConfigWrapper.class → CreateConferenceMSML.class |
|
MMTelCONFConnectionRequestQueue.class → JoinConferenceMSML.class |
|
IncomingSipResponse.class → ResponseMSML.class |
Mapper Configuration
As mentioned in the previous section this feature uses two different sets of mappers. The set to configure depends on the media server in use with the feature. Configuring mappers can be done in the SentinelMapperSetEntryTable. The following yaml excerpts outline which profiles should be configured for each vendor.
Dialogic
SentinelMapperSetEntryTable: ${platform.operator.name}::sipcall:::MMTelConfMSML-CreateConference-Dialogic: MapperSetName: '${platform.operator.name}:' SessionType: sipcall PlanId: '' MapperExecutionPoint: '' MappingName: MMTelConfMSML-CreateConference-Dialogic ${platform.operator.name}::sipcall:::MMTelConfMSML-JoinConference-Dialogic: MapperSetName: '${platform.operator.name}:' SessionType: sipcall PlanId: '' MapperExecutionPoint: '' MappingName: MMTelConfMSML-JoinConference-Dialogic ${platform.operator.name}::sipcall:::MMTelConfMSML-Response-Dialogic: MapperSetName: '${platform.operator.name}:' SessionType: sipcall PlanId: '' MapperExecutionPoint: '' MappingName: MMTelConfMSML-Response-Dialogic
Radisys
SentinelMapperSetEntryTable: ${platform.operator.name}::sipcall:::MMTelConfMSML-CreateConference-Radisys: MapperSetName: '${platform.operator.name}:' SessionType: sipcall PlanId: '' MapperExecutionPoint: '' MappingName: MMTelConfMSML-CreateConference-Radisys ${platform.operator.name}::sipcall:::MMTelConfMSML-JoinConference-Radisys: MapperSetName: '${platform.operator.name}:' SessionType: sipcall PlanId: '' MapperExecutionPoint: '' MappingName: MMTelConfMSML-JoinConference-Radisys ${platform.operator.name}::sipcall:::MMTelConfMSML-Response-Radisys MapperSetName: '${platform.operator.name}:' SessionType: sipcall PlanId: '' MapperExecutionPoint: '' MappingName: MMTelConfMSML-Response-Radisys
Feature responses
Response | Reason |
---|---|
endSession |
Max number of participants < 3 |
featureFailedToExecute |
Multiple initial requests or non MT initial request received towards conference PSI |
featureHasFinished |
Feature has finished |
Configuration profile naming
Configuration Profile Table Name | Description | Profile Naming |
---|---|---|
MMTelCONFConfigProfileTable |
See Network Data for a detailed description of parameters |
Example configuration for conference feature where localhost:5260
is the address of the MMTel TAS:
ConfFactoryPSI | ConfMaxParticipants | ConfCascadingEnabled | ConferenceViewRemovalDelay |
---|---|---|---|
sip:conf-factory@localhost:5260 |
3 |
false |
30000 |
Conference view
The current view of a conference is stored as a series of read-only profiles (one for each participant) within the MMTelCONFViewTable
profile table.
Profile Table Name | Description | Profile Naming |
---|---|---|
MMTelCONFViewTable |
Stores the current state of a participant within a conference |
${CONFERENCE_ID}__${CONNECTION_ID} |
Parameter | Type | Description |
---|---|---|
ConferenceEndpointStatus |
String |
Current status of a participant connected, disconnected or on-hold |
ConferenceID |
String |
Unique 16-character alpha-numeric string prefixed by |
ConnectionID |
String |
Unique identifier for a participant as the uniqueness of |
ParticipantID |
String |
URI identifying the participant |
ParticipantDisplayText |
String |
participant display text |
EndpointID |
String Unique |
identifier for the endpoint |
ConferenceEnded |
Boolean |
|
LastUpdateTime |
Long |
timestamp representing the last time the profile was updated |
Conference event package
A UE may attempt to subscribe to notifications for the conference
event package. Subscriptions for the conference
event package are handled by the MMTel Conference Subscription.