Page MenuHomePhabricator

Sip Audio Session
Updated 1,696 Days AgoPublic

This script can be used for interactive audio session or for scripting alarms. The script returns appropriate shell response codes for failed or successful sessions. The script can be setup to auto answer and auto hangup after predefined number of seconds, detects SIP negative response codes, missing ACK and the lack of RTP media after a session has been established. Once the media stream is connected, the outcome of the ICE negotiation and the selected RTP candidates are displayed.

This script is available in the Sip Clients package which must be installed separately from the SIP SIMPLE client SDK package.
adigeo@ag-blink:~$sip-audio-session -h
Usage: sip-audio-session [options] [user@domain]

This script can sit idle waiting for an incoming audio session, or initiate an
outgoing audio session to a SIP address. The program will close the session
and quit when Ctrl+D is pressed.

Options:
  -h, --help            show this help message and exit
  -a NAME, --account=NAME
                        The account name to use for any outgoing traffic. If
                        not supplied, the default account will be used.
  -c CONFIG_DIRECTORY, --config-directory=CONFIG_DIRECTORY
                        The configuration directory to use. This overrides the
                        default location.
  -s, --trace-sip       Dump the raw contents of incoming and outgoing SIP
                        messages.
  -j, --trace-pjsip     Print PJSIP logging output.
  -n, --trace-notifications
                        Print all notifications (disabled by default).
  -S, --disable-sound   Disables initializing the sound card.
  --auto-answer         Interval after which to answer an incoming session
                        (disabled by default). If the option is specified but
                        the interval is not, it defaults to 0 (accept the
                        session as soon as it starts ringing).
  -u AUTO_ANSWER_URIS, --auto-answer-uris=AUTO_ANSWER_URIS
                        Optional list of SIP URIs for which auto-answer is
                        allowed
  -i EXTERNAL_ID, --external-id=EXTERNAL_ID
                        id used for call control from external application
  -v SPOOL_DIR, --spool-dir=SPOOL_DIR
                        Spool dir for call control from external applications,
                        default is /var/spool/sipclients/sessions
  -t, --enable-default-devices
                        Use default audio devices
  --auto-hangup         Interval after which to hang up an established session
                        (disabled by default). If the option is specified but
                        the interval is not, it defaults to 0 (hangup the
                        session as soon as it connects).
  -b, --batch           Run the program in batch mode: reading input from the
                        console is disabled and the option --auto-answer is
                        implied. This is particularly useful when running this
                        script in a non-interactive environment.
  -d, --daemonize       Enable running this program as a deamon.

Incoming Session

adigeo@ag-blink:~$sip-audio-session 
Using account 31208005169@ag-projects.com
Logging SIP trace to file "/Users/adigeo/Library/Application Support/Blink/logs/sip_trace.txt"
Logging PJSIP trace to file "/Users/adigeo/Library/Application Support/Blink/logs/pjsip_trace.txt"
Available audio input devices: None, system_default, Built-in Input, Built-in Microphone
Available audio output devices: None, system_default, Built-in Output
Using audio input device: Built-in Microphone
Using audio output device: Built-in Output
Using audio alert device: Built-in Output

Available control keys:
  s: toggle SIP trace on the console
  j: toggle PJSIP trace on the console
  n: toggle notifications trace on the console
  p: toggle printing RTP statistics on the console
  h: hang-up the active session
  r: toggle audio recording
  m: mute the microphone
  i: change audio input device
  o: change audio output device
  a: change audio alert device
  <>: adjust echo cancellation
  SPACE: hold/unhold
  Ctrl-d: quit the program
  ?: display this help message

2009-08-25 16:37:12 Registered contact "sip:hxsyungk@192.168.1.124:59164" for sip:31208005169@ag-projects.com 
at 81.23.228.150:5060;transport=udp (expires in 600 seconds).
Other registered contacts:
  sip:31208005169@192.168.1.123:5060 (expires in 274 seconds)
  sip:kwbfxyvl@192.168.1.124:59116 (expires in 522 seconds)
  sip:ilmegvkp@192.168.1.124:59003 (expires in 339 seconds)
  sip:31208005169@192.168.1.1;uniq=5B2860C44383A3D6705629A7E1FB8 (expires in 1162 seconds)
Detected NAT type: Port Restricted
Incoming audio session from 'sip:adi@umts.ro', do you want to accept? (y/n)
Audio session established using "speex" codec at 16000Hz
Audio RTP endpoints 192.168.1.124:50378 <-> 85.17.186.6:58868
RTP audio stream is encrypted
Remote SIP User Agent is "Blink-0.9.0"
Remote party has put the audio session on hold
Audio session is put on hold
Audio session ended by remote party
Session duration was 6 seconds
2009-08-25 16:37:44 Registration ended.

Outgoing Session

adigeo@ag-blink:~$sip-audio-session -a umts ag@ag-projects.com
Using account adi@umts.ro
Logging SIP trace to file "/Users/adigeo/Library/Application Support/Blink/logs/sip_trace.txt"
Logging PJSIP trace to file "/Users/adigeo/Library/Application Support/Blink/logs/pjsip_trace.txt"
Available audio input devices: None, system_default, Built-in Input, Built-in Microphone
Available audio output devices: None, system_default, Built-in Output
Using audio input device: Built-in Microphone
Using audio output device: Built-in Output
Using audio alert device: Built-in Output

Available control keys:
  s: toggle SIP trace on the console
  j: toggle PJSIP trace on the console
  n: toggle notifications trace on the console
  p: toggle printing RTP statistics on the console
  h: hang-up the active session
  r: toggle audio recording
  m: mute the microphone
  i: change audio input device
  o: change audio output device
  a: change audio alert device
  <>: adjust echo cancellation
  SPACE: hold/unhold
  Ctrl-d: quit the program
  ?: display this help message

Initiating SIP audio session from 'sip:adi@umts.ro' to 'sip:ag@ag-projects.com' via sip:85.17.186.7:5060;transport=udp...
Audio session established using "speex" codec at 16000Hz
ICE negotiation succeeded in 1s:412
Audio RTP endpoints 192.168.1.124:50852 (ICE type host) <-> 192.168.1.124:50871 (ICE type host)
RTP audio stream is encrypted
Audio session is put on hold
Remote party has put the audio session on hold
Detected NAT type: Port Restricted
Ending audio session...
Audio session ended by local party
Session duration was 7 seconds

Alarm System

sip-audio-session script can be used for end-to-end testing of a SIP service including the RTP media path. The following failures can be detected:

  • Timeout
  • Negative response code
  • Lack of RTP media after the SIP session has been established
  • Missing ACK

To setup the alarm system start periodically a caller script from a monitoring software using the following arguments:

sip-audio-session --auto-hangup user@domain

Where the user@domain has been configured as the SIP account of the listener, can be an answering machine on the PSTN network. The caller script hangs up after each call. The shell return code can be used to determine if the session setup has failed.

To receive calls and answer them automatically you can also use sip_audio_session script as follows:

sip-audio-session --auto-answer 10 --batch --auto-answer-uris alice@example.com --daemonize

Optional you can provide a list or URIs from which calls are accepted with --auto-answer-uris parameter. One can hangup a call in progress from external applications by touching a file called stop in the spool directory of the session. The spool directory is /var/spool/sipclients/sessions/call-id where call-id is the real SIP call-id of each session.

You must run the script as user root. The --daemonize option puts the client in the background and the logging goes to /var/log/syslog. The program saves its pid file to /var/run/sip_audio_session.pid.

Last Author
adigeo
Last Edited
Apr 13 2020, 2:09 PM