Media Recording On Demand

Overview

Here is an example of the SIP3 Media Quality Widget which helps to classify most of the problems within just a few seconds:

Media Quality Widget

However, there are some situations where detailed quality analysis is still required. In such situations, VoIP engineers usually have to capture an entire call session (including RTP streams) and analyze it in Wireshark manually.

Often case, capturing an entire call session is not an easy thing because of the amount of servers and VoIP traffic. To automate it and provide a better user experience the SIP3 team designed and implemented Media Recording On Demand feature.

Let’s see how you can configure a set of filters to capture entire call session (including RTP streams in FULL or GDPR modes) and analyze it later in Wireshark.

Usage

Here is an example of recording.yml file with Media Recording On Demand configured:

recording:
  enabled: true
  filters:
    - filter: "sip.src_addr=26.03.19.93 sip.user=desi"                        (1)
      mode : 0                                                                (2)
    - filter: "rtp.host=RTP_ENGINE_1 rtp.r_factor<75 rtp.duration>10000"      (3)
      mode : 1                                                                (4)
1 SIP signaling filter that enables recording of session from 26.03.19.93 and to or from user desi.
2 FULL mode. In this mode SIP3 will record full RTP packets including voice payload.
3 Media quality filter that enables recording of Media sessions with host RTP_ENGINE_1, R-Factor calculated from RTP less that 75 and duration of RTP stream more than 10000ms (10 seconds)
4 GDPR mode. In this mode SIP3 will record only headers of RTP packets without voice payload.

Now more about filters.

Filters

The Media Recording On Demand feature support two types of filters:

  1. Signaling filters - applied at the codec negotiation phase.

  2. Media filters - applied to each periodic RTP Report handled by Salto.

Configuration of Media Recording On Demand may contain multiple filters of both types. SIP3 loads and uses filters in the order defined in configuration. The first matching filter’s recording mode will be applied to matched Call/Media session.

Modes

Each filter controls a Media Recording Mode. SIP3 supports FULL and GDPR modes:

Mode Value Description

FULL

0

Full RTP/RTCP and related ICMP packets with the voice payload included.

GDPR

1

Only headers of RTP/RTCP and related ICMP packets without the voice payload.

In addition to GDPR compliance GDPR mode also requires way less storage space (economy is about 75%).

Recording Mode can’t be overridden for the same Media Session.

Expressions

Each filter consists of one or more attributes expressions (similar to what you could see in the Advanced Search document) separated with a space. Attributes expressions are very simple syntactic constructions:

<attribute><operator><value>

SIP3 supports 3 main attributes types: String, Boolean, Number. In meantime each of the types support a certain list of operators:

Operator Types Description

=

String, Boolean, Number

Equals

!=

String, Boolean, Number

Not equals

>

Number

More than

<

Number

Less than

=~

String

Regular expression

A filter is matched when all attributes expressions are True.

"'sip'" attributes

Attribute Type Description

sip.src_addr

String

Signaling source IP address

sip.dst_addr

String

Signaling destination IP address

sip.addr

String

Signaling source or destination IP address

sip.src_host

String

Signaling source host

sip.dst_hodt

String

Signaling destination host

sip.host

String

Signaling source or destination host

sip.caller

String

Caller

sip.callee

String

Callee

sip.user

String

Caller or Callee

Custom sip.*

String, Boolean

Custom User Defined Attribute

“rtp” and “rtcp” attributes

Attribute Type Description

rtp.src_addr, rtcp.src_addr

String

RTP/RTCP source IP address

rtp.dst_addr, rtcp.dst_addr

String

RTP/RTCP destination IP address

rtp.addr, rtcp.addr

String

RTP/RTCP source or destination IP address

rtp.src_host, rtcp.src_host

String

RTP/RTCP source host

rtp.dst_host, rtcp.dst_host

String

RTP/RTCP destination host

rtp.host, rtcp.host

String

RTP/RTCP source or destination host

rtp.mos, rtcp.mos

Float

RTP/RTCP MoS value

rtp.r_factor, rtcp.r_factor

Float

RTP/RTCP R-Factor value

rtp.duration, rtcp.duration

Integer

RTP/RTCP media stream duration in milliseconds

rtp.one_way

Boolean

One-way RTP media stream. Please, use this attribute in combination with rtp.duration to make sure that RTP stream has already started some time ago.