Browse
 
Tools
Rss Categories

Configuring UniMRCP Modules using MRCPv2

Reference Number: AA-02291 Views: 38488 0 Rating/ Voters

Asterisk can interopt with LumenVox via MRCPv1 (RTSP) or MRCPv2 (SIP).  Below are the steps to configure Asterisk to to integrate with LumenVox via MRCPv2.  In this example, we have Asterisk and LumenVox installed on the same server with IP address = 172.18.2.50.

Configuring UniMRCP

UniMRCP has several configuration files that should have been installed:

  1. The mrcp.conf file in /etc/asterisk/
  2. The res-speech-unimrcp.conf file /etc/asterisk/
  3. A set of XML config files in /usr/local/unimrcp/conf/ and /usr/local/unimrcp/conf/client-profiles

If you do not have all of these files, you have likely missed a step in the installation. Do not continue until you have finished the installation.

Depending on whether you are going to use the functionality in res_speech_unimrcp.so or res_unimrcp.so, you will need to change different configuration files.

Configuring res_unimrcp.so

The res_unimrcp.so module relies on the /etc/asterisk/mrcp.conf file. Here is a sample version of the file you can use that is already configured to work with LumenVox, with two important changes:

mrcp.conf

[general]
default-asr-profile = speech-lumenvox-mrcp2
default-tts-profile = speech-lumenvox-mrcp2

; UniMRCP logging level to appear in Asterisk logs.  Options are:
; EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
log-level = DEBUG
max-connection-count = 100
offer-new-connection = 1
; rx-buffer-size = 1024
; tx-buffer-size = 1024
; request-timeout = 60


;; Profile for LumenVox Speech Server MRCPv2;
[speech-lumenvox-mrcp2]
; MRCP version.version = 2
; === SIP settings ===; Must be set to the IP address of the MRCP server.
server-ip = 172.18.2.50
; SIP port on the MRCP server.
server-port = 5066
; server-username = test
force-destination = 1
; === SIP agent ===
; client-ip = 0.0.0.0
; Must be set to the IP address of the MRCP client.
client-ip = 172.18.2.50
; client-ext-ip = auto
; SIP port on the MRCP client.
client-port = 5068
; SIP transport either UDP or TCP.
sip-transport = udp
; ua-name = Asterisk
; sdp-origin = Asterisk
; sip-t1 = 500
; sip-t2 = 4000
; sip-t4 = 4000
; sip-t1x64 = 32000
; sip-timer-c = 185000
; === RTP factory ===
; rtp-ip = 0.0.0.0
; Must be set to the IP address of the MRCP client.
rtp-ip = 172.18.2.50
; rtp-ext-ip = auto
; RTP port range on the MRCP client.
rtp-port-min = 4000
rtp-port-max = 5000
; === Jitter buffer settings ===
playout-delay = 50
; min-playout-delay = 20
ax-playout-delay = 200
; === RTP settings ===
ptime = 20
codecs = PCMU PCMA L16/96/8000 telephone-event/101/8000
; === RTCP settings ===
rtcp = 1
rtcp-bye = 2
rtcp-tx-interval = 5000
rtcp-rx-resolution = 1000

The three changes that must be made:

  1. Set the server-ip address to the IP address of the machine running the LumenVox Media Server.
  2. Set the client-ip address to the IP address of the machine running Asterisk.
  3. Set the rtp-ip address to the IP address of the machine running Asterisk.
  4. If LumenVox and Asterisk are running on the same server then the server-port and client-port must be different from port 5060.  Otherwise, there will be a port conflict with Asterisk. In this example, we are using port 5066 for sip-port and port 5068 for the client port.

Reload Asterisk after making these changes, and you may move on to testing the installation.

Configuring res_speech_unimrcp.so

Configuring the res_speech_unimrcp.so module is a little more complex than res_unimrcp.so. First, you must edit the /etc/asterisk/res-speech-unimrcp.conf file. Here is a sample to use:

res-speech-unimrcp.conf

[general]
; UniMRCP named profile. Options are:
;unimrcp-profile = uni2      ; UniMRCP MRCPv2 Server
;unimrcp-profile = uni1     ; UniMRCP MRCPv1 Server
;unimrcp-profile = lv1      ; LumenVox MRCPv1 Server
unimrcp-profile = lv2      ; LumenVox MRCPv2 Server (uncomment this line)

; UniMRCP logging level.  Options are:
; EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
log-level = DEBUG

; Preloaded grammars
[grammars]
;grammar-name = path-to-grammar-file

; MRCPv2 properties (recognizer and generic header fields)
; http://tools.ietf.org/html/draft-ietf-speechsc-mrcpv2-20#section-9.4
[mrcpv2-properties]
Recognition-Timeout = 20000
No-Input-Timeout = 15000

; MRCPv1 properties (recognizer and generic header fields)
; http://tools.ietf.org/html/rfc4463#section-8.4
[mrcpv1-properties]
Recognition-Timeout = 20000
No-Input-Timeout = 15000

You will want to make sure that the only profile not commented out is lv2 so it is ensured of being the default profile.

The settings for lv2 are defined in /usr/local/unimrcp/conf/client-profiles/lumenvox.xml. Again, here is a sample to use:

lumenvox.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- UniMRCP client document -->
<unimrcpclient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../unimrcpclient.xsd" version="1.0">
  <settings>
    <!-- SIP MRCPv2 settings -->
    <sip-settings id="LumenVox-SIP-Settings">
      <!-- Server address should be explicitly specified, it defaults to "ip" address set in the properties. -->
      <server-ip>172.18.2.50</server-ip> 
      <server-port>5066</server-port>
      <!-- <force-destination>true</force-destination> -->
    </sip-settings>
    
    <!-- RTSP MRCPv1 settings -->
    <rtsp-settings id="LumenVox-RTSP-Settings">
      <!-- Set to value of the LV Media Server's IP address -->

      <server-ip>127.0.0.1</server-ip>
      <server-port>554</server-port>
      <!-- <force-destination>true</force-destination> -->
      <resource-location></resource-location>
      <resource-map>
        <param name="speechrecog" value="recognizer"/>
      </resource-map>
    </rtsp-settings>
  </settings>
  
  <profiles>
    <!-- LumenVox MRCPv2 profile -->
    <mrcpv2-profile id="lv2">
      <sip-uac>SIP-Agent-1</sip-uac>
      <mrcpv2-uac>MRCPv2-Agent-1</mrcpv2-uac>
      <media-engine>Media-Engine-1</media-engine>
      <rtp-factory>RTP-Factory-1</rtp-factory>
      <sip-settings>LumenVox-SIP-Settings</sip-settings>
      <rtp-settings>RTP-Settings-1</rtp-settings>
    </mrcpv2-profile>
    
    <!-- LumenVox MRCPv1 profile -->
    <mrcpv1-profile id="lv1">
      <rtsp-uac>RTSP-Agent-1</rtsp-uac>
      <media-engine>Media-Engine-1</media-engine>
      <rtp-factory>RTP-Factory-1</rtp-factory>
      <rtsp-settings>LumenVox-RTSP-Settings</rtsp-settings>
      <rtp-settings>RTP-Settings-1</rtp-settings>
    </mrcpv1-profile>

  </profiles>
</unimrcpclient>

You must change the server-ip value in the SIP MRCPv2 section to the IP address of the LumenVox Media Server. In addition, the server-port must match the setting in mrcp.conf file

Finally, you must make one or two changes to /usr/local/unimrcp/conf/unimrcpclient.xml:

unimrcpclient.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- UniMRCP client document -->
<unimrcpclient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="unimrcpclient.xsd" version="1.0" subfolder="client-profiles">
  <properties>
    <!-- By default, network interface (IP address) to bind to will be implicitly identified. 
         Alternatively, it can be explicitly set.
    -->
    <!-- <ip type="auto"/> -->

    <!-- Set to the actual IP address of this machine. -->
    <ip>172.18.2.50</ip>

    <!-- <ext-ip>a.b.c.d</ext-ip> -->
    <!-- <server-ip>a.b.c.d</server-ip> -->
  </properties>

  <components>
    <!-- Factory of MRCP resources -->
    <resource-factory>
      <resource id="speechsynth" enable="true"/>
      <resource id="speechrecog" enable="true"/>
      <resource id="recorder" enable="true"/>
      <resource id="speakverify" enable="true"/>
    </resource-factory>

    <!-- SofiaSIP MRCPv2 signaling agent -->
    <sip-uac id="SIP-Agent-1" type="SofiaSIP">
      <!-- By default, "ip" and "ext-ip" addresses set in the properties will be used. 
           They still can be explicitly specified (overriden) here.
      -->
      <!-- <sip-ip>10.10.0.1</sip-ip> -->
      <!-- <sip-ext-ip>a.b.c.d</sip-ext-ip> -->
      <sip-port>8062</sip-port>
      <sip-transport>udp</sip-transport>
      <ua-name>UniMRCP SofiaSIP</ua-name>
      <sdp-origin>UniMRCPClient</sdp-origin>
      <!-- <sip-t1>500</sip-t1> -->
      <!-- <sip-t2>4000</sip-t2> -->
      <!-- <sip-t4>4000</sip-t4> -->
      <!-- <sip-t1x64>32000</sip-t1x64> -->
      <!-- <sip-message-output>true</sip-message-output> -->
      <!-- <sip-message-dump>/tmp/sofia-sip.log</sip-message-dump> -->
    </sip-uac>

    <!-- UniRTSP MRCPv1 signaling agent -->
    <rtsp-uac id="RTSP-Agent-1" type="UniRTSP">
      <max-connection-count>100</max-connection-count>
      <!-- <request-timeout>5000</request-timeout> -->
      <sdp-origin>UniMRCPClient</sdp-origin>
    </rtsp-uac>
    
    <!-- MRCPv2 connection agent -->
    <mrcpv2-uac id="MRCPv2-Agent-1">
      <max-connection-count>100</max-connection-count>
      <offer-new-connection>false</offer-new-connection>
      <rx-buffer-size>1024</rx-buffer-size>
      <tx-buffer-size>1024</tx-buffer-size>
      <!-- <request-timeout>5000</request-timeout> -->
    </mrcpv2-uac>
    
    <!-- Media processing engine -->
    <media-engine id="Media-Engine-1">
      <realtime-rate>1</realtime-rate>
    </media-engine>
    
    <!-- Factory of RTP terminations -->
    <rtp-factory id="RTP-Factory-1">
      <!-- By default, "ip" and "ext-ip" addresses set in the properties will be used. 
           They still can be explicitly specified (overriden) here.
      -->
      <!-- <rtp-ip>10.10.0.1</rtp-ip> -->
      <!-- <rtp-ext-ip>a.b.c.d</rtp-ext-ip> -->
      <rtp-port-min>4000</rtp-port-min>
      <rtp-port-max>5000</rtp-port-max>
    </rtp-factory>
  </components>
  
  <settings>
    <!-- common (default) RTP/RTCP settings -->
    <rtp-settings id="RTP-Settings-1">
      <jitter-buffer>
        <adaptive>1</adaptive>
        <playout-delay>50</playout-delay>
        <max-playout-delay>600</max-playout-delay>
        <time-skew-detection>1</time-skew-detection>
      </jitter-buffer>
      <ptime>20</ptime>
      <codecs>PCMU PCMA L16/96/8000 telephone-event/101/8000</codecs>
      <!-- <codecs>PCMU PCMA L16/96/8000 PCMU/97/16000 PCMA/98/16000 L16/99/16000</codecs> -->
      <!-- enable/disable RTCP support -->
      <rtcp enable="false">
        <!-- RTCP BYE policies (RTCP must be enabled first)
              0 - disable RTCP BYE
              1 - send RTCP BYE at the end of session
              2 - send RTCP BYE also at the end of each talkspurt (input)
        -->
        <rtcp-bye>1</rtcp-bye>
        <!-- rtcp transmission interval in msec (set 0 to disable) -->
        <tx-interval>5000</tx-interval>
        <!-- period (timeout) to check for new rtcp messages in msec (set 0 to disable) -->
        <rx-resolution>1000</rx-resolution>
      </rtcp>
    </rtp-settings>
  </settings>  
</unimrcpclient>

It is important that the <ip> value in the first <properties> section be set to the IP address of the machine running Asterisk. Also verify that the <codecs> setting in the RTP/RTCP section section is correctly set as shown above.

Reload Asterisk after making these changes, and you may move on to testing the installation.