Sip audio session

Version 4 (Adrian Georgescu, 03/14/2009 09:51 am) → Version 5/28 (Adrian Georgescu, 03/23/2009 07:04 pm)

== sip_audio_session ==
[[TOC(SipTesting*, sip_*, xcap*,depth=2)]]

To use this script you must to have a valid [wiki:SipSettingsAPI configuration].
[[Image(http://www.tech-invite.com/img/cf3665/cf3665-31.gif, align=right)]]

=== Description ===

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.

Source code: [source:scripts/sip_audio_session.py scripts/sip_audio_session.py]

{{{
adigeo@ag-oxygen:~$sip_audio_session --help adigeo@ag-imac3:~$sip_audio_session -h
Usage: sip_audio_session [options] [target-user@target-domain.com]

This script can sit idle waiting for an incoming audio call, or perform an
outgoing audio call to the target SIP account. 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 --account-name=NAME
The account name from which to use for any outgoing traffic. read account settings.
Corresponds to section Account_NAME in the
configuration file.
If
not supplied, the default account section
Account
will be used. read.
-c [FILE], --config_file=[FILE] --sip-address=SIP_ADDRESS
The path SIP address of the user in the form user@domain
-p PASSWORD, --password=PASSWORD
Password
to a configuration file use to use. authenticate the local account.
This overrides the setting from the config file.
-n DISPLAY_NAME, --display-name=DISPLAY_NAME

Display name to use for the local account. This
overrides the setting from the config file.
-o IP[:PORT], --outbound-proxy=IP[:PORT]
Outbound SIP proxy to use. By
default location a lookup of the configuration
domain is performed based on SRV and A records. This
overrides the setting from the config
file.
-s [stdout|file|all|none], --trace-sip=[stdout|file|all|none]
-s, --trace-sip Dump the raw contents of incoming and outgoing SIP
messages. messages (disabled by default). The argument specifies
where the messages
are to be dumped.
-j [stdout|file|all|none], --trace-pjsip=[stdout|file|all|none] -t EC_TAIL_LENGTH, --ec-tail-length=EC_TAIL_LENGTH
Print PJSIP logging output. The argument specifies Echo cancellation tail length in ms, setting this to 0
where the messages are will disable echo cancellation. Default is 50 ms.
-r SAMPLE_RATE, --sample-rate=SAMPLE_RATE
Sample rate in kHz, should be one of 8, 16 or 32kHz.
Default is 32kHz.
-c CODECS, --codecs=CODECS
Comma separated list of codecs
to be dumped. used. Default is
"speex,g711,ilbc,gsm,g722".

-S, --disable-sound Disables initializing Do not initialize the sound card. soundcard (by default the
soundcard is enabled).

--auto-answer -j, --trace-pjsip Print PJSIP logging output (disabled by default).
--auto-hangup
Interval after which to answer hangup an incoming on-going call
(disabled (applies only to outgoing calls, disabled by default).
If the option is specified but
the interval is not, it
defaults to 0 (answer (hangup the call
as soon as it starts ringing).
connects).

--auto-hangup --auto-answer Interval after which to hangup answer an on-going incoming call
(applies only to outgoing calls, disabled (disabled by default).
If the option is specified but
the interval is not, it
defaults to 0 (hangup (answer the call
as soon as it
connects).
starts ringing).

}}}

=== Example for incoming session ===

{{{
adigeo@ag-imac3:~/Business/Personal$sip_audio_session
Accounts available: 'alice', 'as', 'bob', 'ew', 'ewt', 'mrg', 'pbx', 's', 'tf', 'umts', 'umts_test', 'unet', 'unet_test', default
Using default account: 31208005169@ag-projects.com
Registering ""Adrian G." <sip:31208005169@ag-projects.com>" at 81.23.228.129:5060
REGISTER was successful
Contact: sip:HZ1BYFQtHR@192.168.1.6:49421;transport=udp (expires in 300 seconds)
Available control keys:
h: hang-up the active session
r: toggle audio recording
t: toggle SIP trace on the console
<> : adjust echo cancellation
SPACE: hold/on-hold
Ctrl-d: quit the program
?: display this help message
Waiting for incoming session...
Detected NAT type: Port Restricted
Incoming session...
Incoming audio session from "sip:adi@umts.ro", do you want to accept? (y/n)
Session established, using "speex" codec at 32000Hz
Audio RTP endpoints 192.168.1.6:40064 <-> 81.23.228.150:56618
Remote SIP User Agent is "sip2sip-0.4.0-pjsip-1.0.1-r2453"
Call is put on hold
Call is taken out of hold
Ending session...
Session ended by local party.
Session duration was 6 seconds
}}}

=== Example for outgoing session ===

{{{
adigeo@ag-imac3:~$sip -a umts ag@ag-projects.com
Accounts available: 'alice', 'as', 'bob', 'ew', 'ewt', 'mrg', 'pbx', 's', 'tf', 'umts', 'umts_test', 'unet', 'unet_test', default
Using account 'umts': adi@umts.ro
Call from "Adi UMTS" <sip:adi@umts.ro> to sip:ag@ag-projects.com through proxy udp:85.17.186.7:5060
Available control keys:
h: hang-up the active session
r: toggle audio recording
t: toggle SIP trace on the console
<> : adjust echo cancellation
SPACE: hold/on-hold
Ctrl-d: quit the program
?: display this help message
Ringing...
Ringing...
Ringing...
Session established, using "speex" codec at 32000Hz
Audio RTP endpoints 192.168.1.6:40048 <-> 81.23.228.150:56616
Remote SIP User Agent is "sip2sip-0.4.0-pjsip-1.0.1-r2453"
Remote party has put the call on hold
Remote party has taken the call out of hold
Session ended by remote party.
Session duration was 6 seconds

}}}

=== Ongoing sessions ===

During an ongoing session you can record the audio stream in a file by pressing r. You can hangup by pressing h.