当前位置: 首页 > 工具软件 > UniMRCP > 使用案例 >

unimrcp 配置文件说明(三)

郑帅
2023-12-01

一、环境:

PC操作系统:CentOS Linux release 7.9.2009 (Core)
gcc 版本:4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
unimrcp版本:1.7.0

本文主要是记录一下关于配置文件的研究。


unimrcp分为服务端和客户端,即 unimrcpserverunimrcpclient

二、服务端和客户端共用配置文件

文件如下:

  • logfile.xml(日志文件说明)
  • logger.xml(日志输出配置)
  • dirlayout.xml(说明目录布局的,一般不需要改动)

1、logfile.xml(日志文件说明)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Log File Document -->
<aptlogfile>
  <!--  Log File Settings
    purge-existing   是否在启动时删除已有的日志文件。
    max-age          日志文件的生存期(以天为单位)。 过时的日志文件将在启动和下一次循环时确定并删除。 设0为无穷大。  
    max-count        要存储的最大日志文件数。 如果到达,则删除最旧的日志文件。 设0为无穷大。  
    max-size         日志文件的最大大小,以Mb为单位。
  -->
  <settings
    purge-existing="false"
    max-age="0"
    max-count="100"
    max-size="8"/>
</aptlogfile>

2、logger.xml(日志输出配置)

<?xml version="1.0" encoding="UTF-8"?>
<!-- Logger Document -->
<aptlogger>
  <!--  日志输出模式
    CONSOLE       控制台输出
    FILE          文件输出
    SYSLOG        系统日志输出
    CONSOLE,FILE  控制台和文件一起输出
  -->
  <output>CONSOLE</output>

  <!--  日志输出格式
    DATE          日期输出
    TIME          时间输出
    PRIORITY      优先级输出
    MARK          文件名、行号输出
    THREAD        调用线程标识符输出
  -->
  <headers>DATE,TIME,PRIORITY</headers>

  <!--  日志输出优先级
    EMERGENCY     出现系统不可用
    ALERT         出现报警
    CRITICAL      出现至关重要的问题
    ERROR         出现异常
    WARNING       出现警告
    NOTICE        出现提示
    INFO          出现信息
    DEBUG         用于调试
  -->
  <priority>INFO</priority>

  <!--  设置默认日志源的屏蔽模式为
    NONE          按原样记录
    COMPLETE      完全屏蔽私有数据
    ENCRYPTED     加密私有数据
  -->
  <masking>NONE</masking>

  <!--
    除了默认日志源外,还可以设置其他日志源,这些日志源可能设置了不同的优先级和日志屏蔽模式。
	允许对每个日志源应用灵活的屏蔽规则。这个是使用的其他模块的日志等级配置。
  -->
  <sources>
    <source name="MPF" priority="INFO" masking="NONE"/>
    <source name="UNIRTSP" priority="INFO" masking="NONE"/>
    <source name="SOFIASIP" priority="INFO" masking="NONE"/>
  </sources>
</aptlogger>

三、服务端(unimrcpserver)

服务端会使用到的配置文件如下:

  • unimrcpserver.xml(最主要的)
  • unimrcpserver.xsd(用于描述unimrcpserver.xml内元素的文档,一般不需要改动(除非新增元素))

通常来说最后实现的结果都是需要把服务端部署到服务器上,客户端通过外网访问服务端的。所以必然需要用到外网IP和外网端口。

1、外网IP

这里的外网IP不是本机的IP,直接百度 “IP”可以得到,或者打开网站 https://www.ip138.com/ 可得。

2、外网端口

按目前的理解如下,服务端创建通讯流程如下:

  • 创建SIP代理,这里需要使用到一个外网端口(默认是8060)
  • 创建RTSP服务,这里需要使用到一个外网端口(默认是1554)
  • 创建MRCPv2代理,这里需要使用到一个外网端口(默认是1544)
  • 创建RTP通讯,这里需要用到的外网端口(默认5000 至 6000这个区间段)

这些端口都是可以修改配置的,其中RTP通讯的端口需要是连续的,是在通讯中内部根据实际情况从范围内自动分配的。

3、配置文件说明(unimrcpserver.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!-- UniMRCP服务器文档 -->
<unimrcpserver xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:noNamespaceSchemaLocation="unimrcpserver.xsd"
               version="1.0">
  <properties>
    <!-- 如果属性“type”设置为“auto”,IP地址由主机名隐式确定。 这是默认设置。-->
    <ip type="auto"/>

    <!-- 如果属性“type”设置为“iface”,则IP地址由一个网络接口/适配器的指定名称决定。-->
    <!-- <ip type="iface">eth0</ip>-->

    <!-- 本机内网IP地址 -->
    <!-- <ip>10.10.0.1</ip> -->
	<!-- 本机外网IP地址 -->
    <!-- <ext-ip>a.b.c.d</ext-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-uas id="SIP-Agent-1" type="SofiaSIP">
      <!-- 默认情况下,使用属性中设置的“ip”和“ext-ip”地址。这些参数可以通过“sip-ip”和“sip-ext-ip”在“sip-uas”中明确指定。-->
	  <!-- 本机内网IP地址 -->
      <!-- <sip-ip>10.10.0.1</sip-ip> -->
	  <!-- 本机外网IP地址 -->
      <!-- <sip-ext-ip>a.b.c.d</sip-ext-ip> -->
	  <!-- 本机外网端口(如果需要外网客户端访问的话) -->
      <sip-port>8060</sip-port>
	  <!-- 支持的通讯方式 -->
      <sip-transport>udp,tcp</sip-transport>
      <!-- <force-destination>true</force-destination> -->
      <!-- 该参数用于禁用soasip SDP Offer/Answer Engine Module (soa)。  
	       只有当需要与MRCPv2进行动态有效负载类型的协商,并且客户端只使用“基本呼叫”SDP提供/应答场景时,才应该这样做。
		   在禁用soa的情况下,更复杂的场景很可能无法工作。
	  -->
      <!-- <disable-soa>true</disable-soa> -->
      <ua-name>UniMRCP SofiaSIP</ua-name>
      <sdp-origin>UniMRCPServer</sdp-origin>
      <!-- <sip-t1>500</sip-t1> -->
      <!-- <sip-t2>4000</sip-t2> -->
      <!-- <sip-t4>4000</sip-t4> -->
      <!-- <sip-t1x64>32000</sip-t1x64> -->
      <sip-session-expires>600</sip-session-expires>
      <sip-min-session-expires>120</sip-min-session-expires>
      <!-- <sip-message-output>true</sip-message-output> -->
      <!-- <sip-message-dump>sofia-sip-uas.log</sip-message-dump> -->
      <!-- <extract-feature-tags>false</extract-feature-tags> -->
      <!-- <extract-call-id>true</extract-call-id> -->
      <!-- <extract-user-name>true</extract-user-name> -->
    </sip-uas>

    <!-- UniRTSP MRCPv1 signaling agent -->
    <rtsp-uas id="RTSP-Agent-1" type="UniRTSP">
      <!--
        默认情况下,使用属性中设置的“ip”和“ext-ip”地址。
		这些参数可以根据“rtsp-uas”通过“rtsp-ip”和“rtsp-ext-ip”来明确指定。
      -->
	  <!-- 本机内网IP地址 -->
      <!-- <rtsp-ip>10.10.0.1</rtsp-ip> -->
	  <!-- 本机外网IP地址 -->
      <!-- <rtsp-ext-ip>a.b.c.d</rtsp-ext-ip> -->
	  <!-- 本机外网端口 -->
      <rtsp-port>1554</rtsp-port>
      <!-- <force-destination>true</force-destination> -->
      <resource-map>
        <param name="speechsynth" value="speechsynthesizer"/>
        <param name="speechrecog" value="speechrecognizer"/>
      </resource-map>
      <max-connection-count>100</max-connection-count>
      <inactivity-timeout>600</inactivity-timeout>
      <sdp-origin>UniMRCPServer</sdp-origin>
    </rtsp-uas>

    <!-- MRCPv2 connection agent -->
    <mrcpv2-uas id="MRCPv2-Agent-1">
      <!--
        默认情况下,使用属性中设置的“ip”地址。
		这个参数可以通过“mrcp-ip”来显式地根据“mrcpv2-uas”指定。
      -->
	  <!-- 本机内网IP地址 -->
      <!-- <mrcp-ip>10.10.0.1</mrcp-ip> -->
	  <!-- 本机外网端口(如果需要外网客户端访问) -->
      <mrcp-port>1544</mrcp-port>
      <max-connection-count>100</max-connection-count>
      <max-shared-use-count>100</max-shared-use-count>
      <force-new-connection>false</force-new-connection>
      <rx-buffer-size>1024</rx-buffer-size>
      <tx-buffer-size>1024</tx-buffer-size>
      <inactivity-timeout>600</inactivity-timeout>
      <termination-timeout>3</termination-timeout>
    </mrcpv2-uas>

    <!-- 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">
      <!--
        默认情况下,使用属性中设置的“ip”和“ext-ip”地址。
		这些参数可以通过“rtp-ip”和“rtp-ext-ip”来根据“rtp-factory”明确指定。
      -->
	  <!-- 本机内网IP地址 -->
      <!-- <rtp-ip>10.10.0.1</rtp-ip> -->
	  <!-- 本机外网IP地址 -->
      <!-- <rtp-ext-ip>a.b.c.d</rtp-ext-ip> -->
	  <!-- 本机外网端口(如果需要外网客户端访问,且需要连续) -->
	  <!-- 可以通过修改最小和最大值改变范围 -->
      <rtp-port-min>5000</rtp-port-min>
      <rtp-port-max>6000</rtp-port-max>
    </rtp-factory>

    <!-- Factory of plugins (MRCP engines) -->
    <plugin-factory>
	  <!-- 这里是demo插件 -->
      <engine id="Demo-Synth-1" name="demosynth" enable="true"/>
      <engine id="Demo-Recog-1" name="demorecog" enable="true"/>
      <engine id="Demo-Verifier-1" name="demoverifier" enable="true"/>
      <engine id="Recorder-1" name="mrcprecorder" enable="true"/>

      <!-- 这个位置可以添加自己的插件 -->
      <!--  引擎可能有额外的命名("max-channel-count")和通用(name/value)参数。例如: -->
      <!--
      <engine id="Your-Engine-1" name="yourengine" enable="false">
        <max-channel-count>100</max-channel-count>
        <param name="..." value="..."/>
      </engine>
      -->
    </plugin-factory>
  </components>

  <settings>
    <!-- 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 own-preference="false">PCMU PCMA L16/96/8000 telephone-event/101/8000</codecs>
      <!-- <codecs own-preference="false">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>

  <profiles>
    <!-- MRCPv2 默认配置 -->
    <mrcpv2-profile id="uni2">
      <sip-uas>SIP-Agent-1</sip-uas>
      <mrcpv2-uas>MRCPv2-Agent-1</mrcpv2-uas>
      <media-engine>Media-Engine-1</media-engine>
      <rtp-factory>RTP-Factory-1</rtp-factory>
      <rtp-settings>RTP-Settings-1</rtp-settings>

      <!-- 基于配置文件的资源和引擎与可选属性的关联。例如: -->
      <!--
      <resource-engine-map>
        <resource id="speechsynth" engine="Demo-Synth-1"/>
        <resource id="speechrecog" engine="Demo-Recog-1">
          <attrib name="n1" value="v1"/>
          <attrib name="n2" value="v2"/>
        </resource>
      </resource-engine-map>
      -->
    </mrcpv2-profile>

    <!-- MRCPv1 默认配置 -->
    <mrcpv1-profile id="uni1">
      <rtsp-uas>RTSP-Agent-1</rtsp-uas>
      <media-engine>Media-Engine-1</media-engine>
      <rtp-factory>RTP-Factory-1</rtp-factory>
      <rtp-settings>RTP-Settings-1</rtp-settings>
    </mrcpv1-profile>

    <!-- More profiles may follow. -->
  </profiles>
</unimrcpserver>

四、客户端(unimrcpclient)

客户端会使用到的配置文件如下:

  • unimrcpclient.xml(主要的)
  • unimrcpclient.xsd(用于描述unimrcpclient.xml内元素的文档,一般不需要改动(除非新增元素))
  • unimrcp.xml(主要的)
  • lumenvox.xml(不太清楚干嘛用的)
  • nuance.xml(不太清楚干嘛用的)
  • speechpro.xml(不太清楚干嘛用的)

要和服务端能够通讯上有以下几个地方是必配的

1、unimrcpclient.xml

  <properties>
    <!-- 如果属性“type”设置为“auto”,IP地址由主机名隐式确定。这是默认设置 -->
    <ip type="auto"/>

    <!-- 如果属性“type”设置为“iface”,则IP地址由指定的网络接口/适配器名称决定 -->
    <!-- <ip type="iface">eth0</ip>-->

    <!-- IP地址也可以显式指定 -->
    <!-- 本机的内网IP地址,一定要配置 -->
    <ip>xxx.xxx.xxx.xxx</ip>
	<!-- 本机的外网IP地址,一定要配置 -->
    <ext-ip>xxx.xxx.xxx.xxx</ext-ip>

    <!-- 服务器IP地址应该明确指定,除非客户端和服务器位于同一主机上 -->
    <!-- 服务器的外网IP地址 -->
    <server-ip>xxx.xxx.xxx.xxx</server-ip>
  </properties>

2、unimrcp.xml

这里需要配置服务器的 SIP端口和 RTSP端口。
服务器IP地址如果没有配置的话默认使用unimrcpclient.xml中配置的服务器IP地址。

  <settings>
    <!-- SIP MRCPv2 settings -->
    <sip-settings id="UniMRCP-SIP-Settings">
      <!-- 服务器IP地址可以显式指定每个“sip-settings”。否则,服务器IP地址默认为属性中设置的“server- IP”,而属性默认为“IP” -->
      <!-- <server-ip>10.10.0.1</server-ip> -->
      <!-- 服务器的 SIP 外网端口 -->
      <server-port>yyyy</server-port>
      <!-- <force-destination>true</force-destination> -->
      <!-- <feature-tags>speechrecog.engine="SR-1";speechsynth.engine="SS-1"</feature-tags> -->
    </sip-settings>

    <!-- RTSP MRCPv1 settings -->
    <rtsp-settings id="UniMRCP-RTSP-Settings">
      <!-- 服务器IP地址可以显式指定的" rtp -settings"。否则,服务器IP地址默认为属性中设置的“server- IP”,而属性默认为“IP” -->
      <!-- <server-ip>10.10.0.1</server-ip> -->
      <!-- 服务器的 RTSP 外网端口 -->
      <server-port>yyyy</server-port>
      <!-- <force-destination>true</force-destination> -->
      <resource-location>media</resource-location>
      <resource-map>
        <param name="speechsynth" value="speechsynthesizer"/>
        <param name="speechrecog" value="speechrecognizer"/>
      </resource-map>
    </rtsp-settings>
  </settings>

正常这些配置完后能够和服务端通讯上。其他的细节再根据需要调整。

 类似资料: