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分为服务端和客户端,即 unimrcpserver 和 unimrcpclient 。
文件如下:
<?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>
<?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>
服务端会使用到的配置文件如下:
通常来说最后实现的结果都是需要把服务端部署到服务器上,客户端通过外网访问服务端的。所以必然需要用到外网IP和外网端口。
这里的外网IP不是本机的IP,直接百度 “IP”可以得到,或者打开网站 https://www.ip138.com/ 可得。
按目前的理解如下,服务端创建通讯流程如下:
这些端口都是可以修改配置的,其中RTP通讯的端口需要是连续的,是在通讯中内部根据实际情况从范围内自动分配的。
<?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>
客户端会使用到的配置文件如下:
要和服务端能够通讯上有以下几个地方是必配的
<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>
这里需要配置服务器的 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>
正常这些配置完后能够和服务端通讯上。其他的细节再根据需要调整。