VXML介绍
1:VoiceXML的目标之一:互联网和公用电话网的信息共享
2:VoiceXML的目标之二:简化语音业务的开发
:3:VoiceXML的目标之三:音资源控制高级功能(ASR与TTS控制)
:4:VXML的格式与语法
:5:VXML例1:放音收号
: 6: VXML例2:IVR
7:VXML与CCXML\CPL\SCML的比较
:8:MRFC与XML
:9:某公司的VXML功能列举
CCXML
CCXML语言介绍
CCXML控制元素
CCXML脚本举例
CCXML的呼叫流程控制功能
VXML与CCXML的结合
VXML与CCXML对于SIP呼叫客户端的作用
SCXML
RFC6230与RFC6231(Media Control Channel Framework)
HTTP协议的作用
某公司媒体服务器白皮书
HP OpenCall
相关文献
MRFC软件架构分析
===============================
VoiceXML
VXML介绍
VXML标准文本:http://www.w3.org/TR/2007/REC-voicexml21-20070619/
VoiceXML(Voice Extensible Markup Language,,语音可扩展标记语言)定义了如何使用语音识别、语音合成、互联网访问、数据库访问、语音文件播放、DTMF输入等功能开发一个完整的语音应用系统。VoiceXML2.0最终草案在2003年由W3C推出,并得到AT&T、IBM、Lucent Technologies、以及Motorola 等公司的支持。
VoiceXML语音浏览的实现主要依赖于语音处理技术和类似于Web浏览技术的语音浏览技术。在 VoiceXML语音浏览器的支持下,电话用户可以用语音输入和传统的按键输入方式通过电话与电话语音应用系统进行对话交流,电话语音应用系统则用语音的方式与用户对话。在此过程中, 语音识别 ASR和语音合成 TTS等语音处理技术起着重要的作用。
VoiceXML语音浏览技术也是电话语音应用系统的关键技术。与HTML类似,VoiceXML使得电话语音应用系统根据对话流程所处的状态和具体应用领域的业务需求将当前对话流程转向由互联网 URI 链接定义的下一个对话流程。在对话流程的定义中,不仅可以访问互联网上的 URI 文件,而且还可以访问互联网和局域网内的数据库。同时,Web浏览技术的引进使电话语音应用系统与互联网有机地结合,使电话语音应用系统以开放式的方式呈现给电话用户。
VoiceXML的目标
为应用开发者屏蔽底层的、平台相关的细节
分离交互代码和服务逻辑
提高应用在不同平台的可移植性
既能提供对简单应用快捷开发,也提供对复杂应用语言级的支持
单文档表示多次交互,减少了Client/Server交互负荷
VoiceXML的目标之一:互联网和公用电话网的信息共享
互联网与公用电话网长期以来出于分离状态。随着互联网的飞速发展和互联网信息的迅速增加,让庞大的电话用户群(包括固定电话用户群和移动电话用户群)访问互联网信息和享用互联网提供的服务显得越来越重要。VoiceXML的问世,无疑对互联网服务商、运营商以及内容提供商都提供了一个极好的商机。
首先,VoiceXML 浏览技术是开放式的,VoiceXML 浏览器可以浏览互联网上的任何公开的文件和数据,这使得电话用户可以借助于语音处理技术通过电话访问互联网信息。例如,电话用户可以通过VoiceXML浏览器收听网上新闻、查询网上数据库、下载和收听语音文件(如音乐、歌曲、留言、语音邮件等)。因而,VoiceXML浏览技术的使用,使得互联网的信息能够自然地流向公用电话网。
与此同时,VoiceXML 浏览技术还可以将公用电话网的信息传送给互联网。公用电话网信息与互联网信息不同之处在于前者是动态的、以语音形式为主并且随着电话对话流的结束而消失。然而,在有些电话语音应用系统中,需要将对话流所产生的信息保存起来,以便将来通过 Web 浏览器进行访问。例如,用户的语音留言和对话过程等都可以利用 VoiceXML 浏览技术通过电子邮件或文件的形式传到互联网中进行保存,此后,互联网用户和电话用户就可以分别通过 Web浏览器和 VoiceXML浏览器访问这些信息。
VoiceXML 浏览技术的引入,使互联网和公用电话网得以有机地结合,使两网信息可以互相流动,从而使互联网与公用电话网达到信息共享。
语音互联网 Internet
VoiceXML HTML
语音浏览器 WEB浏览器
语音网页 WEB网页
语音超链接 文本超链接
声音 文本
这些都被XML所支持。
互联网与电话网的桥梁 包括:
丰富的互联网信息与庞大的电话用户群
解决互联网与电话网的分离
语音与网站交流
- 电话收听网上信息
- 电话提取网上数据库
- 与网页对话
- ……
-互联网联结
访问WEB网页
访问Internet数据库
-互联网浏览技术
语音浏览器
语音网页
语音超链接
语音输入、语音输出
互联网技术的发展和普及
庞大的信息储存
丰富的网上服务
用户数量剧增
互联网访问终端剧增
问题:互联网与公用电话网分离
VoiceXML的目标之二:简化语音业务的开发
电话语音应用系统的传统开发模式是利用 CTI 技术将语音卡、交换机等各系统构件组织和集成起来,开发人员因此需要熟悉相关的底层编码并深入了解有关硬件的编程接口才能建立一个传统的电话语音应用系统。Voice XML 的出现则不仅改变了电话语音应用系统的使用方法和使用范围,而且给电话语音应用系统的开发过程带来全新的概念和模式,使电话语音应用系统的开发实际上成为“语音网页”的开发。
首先,VoiceXML 浏览器的使用可以使开发人员从繁琐的编程细节中解脱出来。开发过程不需要了解各系统构件(如语音识别、语音合成、语音卡、交换机等)的编程接口,而是类似于 Web 网页的开发,只需编写 VoiceXML 脚本。开发人员因此能够把精力放在应用系统的业务流程上。
其次,开发过程简单、快捷。开发人员不需要掌握C/C++或Java 等高级计算机编程语言便可以开发一个完整的电话语音应用系统,并且所开发出来的系统往往比传统开发方式开发出来的系统更开放、功能更强大。
开发过程简单、快捷,类似开发WEB网页
对开发人员要求较低
系统易维护、修改、和扩充
代码可重用性好
……
大量潜在的开发人员
大量的信息和丰富的服务
任何时间、任何地点用电话获取信息和享受服务
提高工作和生活效率改变工作和生活方式
VoiceXML的目标之三:音资源控制高级功能(ASR与TTS控制)
语音识别(ASR – Automated Speech Recognition)
语音到文本的转换
DTMF输入+语音输入
IBM、Dragon Systems、Nuance、Speechworks、Infotalk, etc.
语音合成(TTS – Text to Speech)
文本到语音的转换
语音文件输出 +文本输出
Nuance、科大讯飞、捷通华声,etc.
VXML的格式与语法
VoiceXML是一种脚本文件格式,下面是一段播放欢迎音的脚本,用于给用户播放welcome.wav音文件。
1 <?xml version="1.0"?>
2 <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
3 <form>
4 <block>
5 <audio src="welcome.wav"/> 注:这里表示由系统播放这个wav音,其中可以带文件路径。
6 </block>
7 </form>
8 </vxml>
除了带放音文件信息外,其它控制放音的参数也可以携带,包括H.248中的an/apf 包中的各种控制参数。
VXML的框架性XML元素如下:
<vxml>
VoiceXML的主元素,必不可少
<form>
一个form单元
<block>
一个form item,其中可以放置执行单元
<prompt>
一个执行单元,用于放音
VXML用于控制流程的XML元素如下:
clear
变量清空
var
变量定义
prompt
放音
reprompt 重放音
goto
submit 流程跳转
if else
else if 流程分支的判断
return 返回subdialog调用
exit 退出
throw
抛出事件
assign 变量赋值
script
脚本操作
常用的标准session变量
Session.telephone.ani
系统主叫
Session.telephone. dnis
系统被叫
field: 收集用户输入的域
name
结果变量名
expr
产生初始值变量表达式
cond
判断是否选择该item被执行的表达式
type
数据类型,相当于有这样的类型的语法
slot
域的关键字名,用于接受语音识别结果
modal
是否屏蔽该field以外的所有的语法
filled:用于指明某一个或者多个域被用户输入所填充后的处理流程
prompt :播放提示语音 如<prompt>欢迎进入本系统</prompt>
bargein
提示音是否能不用户打断
bargeintype
打断类型(2.0新增),支持识别打断
cond
判断是否播放的条件表达式
count
计数(在选择规则中使用)
timeout
用户超时时间
bargeintype:打断方式为:
energy 能量或者DTMF按键
speech 语音或者DTMF按键
recognition 语音识别成功或者DTMF按键
audio :播放语音,嵌套文本表示当该语音文件不可获得时,用嵌套的文本以TTS播放
src 语音文件的URL地址
expr 动态决定语音文件的URL地址
当有src属性时,该属性被屏蔽
value :将表达式值的运算结果输出为语音或者TTS文本
expr 输出表达式
例子:
<prompt>
<value expr="n*n"/> is the square of <value expr="n"/>.
</prompt>
放音内容
TTS放音
<prompt>请您输入呼叫的号码</prompt>
<prompt>您呼叫的号码是:<value expr=“mynumber”/></prompt>
播放WAV语音
<prompt> <audio src="mynumber.wav"/> </prompt>
<prompt>
<audio src=“mynumber.wav”>
请您输入呼叫的号码 </audio>
</prompt>
<prompt> <value expr=“raudio1”/> </prompt>
混合TTS文本、WAV语音
<prompt>
欢迎进入本系统
<audio src=”mywelcome.wav"/>
本系统最近菜单修改如下:
<audio src=”newtitle.wav"/>
</prompt>
VXML例1:放音收号
<field name=“exercise" type="digits"> 注:系统进入收号流程,以下是收号的digitmap参数定义。它会被MRFC转化为H.248参数
<property name=“maxdigit” value=“1”/> <!—最大收号位数-->
<property name="interdigittimeout" value=“1”/> <!—收号间隙时间 -->
<property name=“cancelchar” value=“*”/> <!—默认取消键-->
<property name=“termchar” value=“#”/> <!—默认结束键-->
<prompt>
<audio src=“c:\voice\*.vox”>您好! </audio> 注:系统放一段语音,同时进入收号流程,它会被MRFC转化为H.248对应的an包、DD/CE包。
</prompt>
<filled>
<if cond=" exercise == 1"> 注:收号结果自动赋值给变量exercise ,其值为1或2时则执行不同javascript脚本。
<goto next=“*.jsp"/>
<elseif cond=" exercise == 2"/>
<goto next=“*.jsp"/>
<else/>
</if>
</filled>
VXML例2:IVR
在电话银行、基于电话的客户服务、语音邮件大范围应用的今天 ,人们已经非常熟悉按键式交互语音应答系统( IVR) ,但这种系统并不完善:首先 ,按键式菜单的逐层输入方式 ,容易让用户在输入过程中产生混淆;其次 ,按键式菜单的功能简单 ,已经不能满足人们使用的要求。随着语音识别(ASR)技术、文语转换( TTS)技术走向成熟 ,一种通过电话访问 Internet 网络的新方式 ———VoiceXML 诞生了。VoiceXML 是 W3C 定义的可扩展标记语言(XML)的一种扩展 ,根据播放的提示信息、口述的命令、要记录和识别的语音或按键音输入 ,实现人与计算机之间的交互对话。VoiceXML 的标准化将简化 Web 上具有语音响应服务的个性化界面的创建 ,使人们能够通过语音和电话访问网站上的信息和服务。
下面给出的是使用 VoiceXML 的一个程序示例:
< ? xml version =″ 1. 0″? >
< ? vxml version =″ 2. 0″? >
< form id =″ weather-infor″ >
< block >欢迎使用天气预报服务< / block >
< field name =″ state″ >
< prompt >哪个省? < / prompt >
< grammar src =″ state. grxml″type =″ application/ grammar + xml″ /
>
< filed name =“城市” >
< prompt >城市名? < / prompt >
< grammar src =″ city. grxml″ type =″ application/ grammar + xml″ / >
< field/ >
< block >
< submit next =″ / servlet/ weather″namelist =“城市 省” / >
< / block >
< / form >
< vxml >
C(计算机) :欢迎访问天气预报服务 ,哪个省
H(人) :河北
C:城市名?
H:石家庄
C:天气晴朗…
这是一个简单的 VoiceXML 文档 ,执行时输出所在城市天气的合成语音。< vxml >可以看作一个包含会话的容器 ,所有的 VoiceXML 文档都是由一系列会话构成的。一个VoiceXML文档(或称为请求的一组文档)构成了一个对话式的有限状态机。用户总是处于某一对话状态(或称为会话) 。每一个会话决定要转移到的下一个会话。转移由 URI指定 ,URI定义下一个要使用的文档和会话。当一个会话没有指定后继者或指明退出对话状态时操作才会终止。
VXML与CCXML\CPL\SCML的比较
VXML脚本可以控制实现播放或录制多媒体、DTMF收号、留言、语音识别、IVR 等媒体应用。
VXML不仅可以用于媒体控制,更广泛的应用在于:用XML元素高度抽象出了语音业务事件、连接、对话及会议实体、呼叫状态机,从而使语音业务的开发流程具有可移植性。
举例:底层平台1支持PSTN 七号接口的呼叫控制协议。底层平台2支持SIP呼叫或H.248呼叫。
只要这两个平台同时支持VXML,那么同样的VXML脚本可以在两个平台间进行移植,方便了应用系统(当需要提供语音、短信功能时)的跨平台应用。上层应用的开发人员不需要理解底层呼叫控制、呼叫协议的细节,只需要大致了解呼叫流程就可以利用VXML进行开发。
类似的功能还有W3C的CCXML、IETF的 CPL和JAIN 论坛的SCML。
表 1比较了这 3语言的底层协议和底业务接口模型。CPL主要面向 SIP 和H.323,不是和底层协议完全无关的语言。CCXML 和 SCML 是与底层协议无关的语言。CCXML 基于JTAPI接口,SCML语言基于JCC接口。
表 2 比较了这 3 种语言所适用的业务种类。CPL 以呼转为设计重点,呼叫处理模型简单。 JCC相当于JTAPI的简化,因而SCML的呼叫处理模型弱于CCXML, CCXML可以配合 VoiceXML使用,VoiceXML是开发对话系统的语言,功能非常强大。
表 3 比较了这 4种语言在变量控制和流程控制方面的一些差异。CPL、SCML这两种语言比较简单,不支持循环和并发操作。CCXML具有循环和并发的能力,能够编写出复杂的业务流程。
通过以上三个方面的比较可以看出,CCXML基于JTAPI的业务接口模型,对话音类业务的描述支持最强,同时具有完备的变量和流程控制支持,更适合描述基于传统电话的话音业务。但是,CCXML 对数据类业务的描述缺乏支持,需要底层平台进行扩展。
MRFC与XML
SIP AS可以下发Voice XML脚本,控制MRFC\MRFP执行媒体控制功能。
SIP AS可以通过SIP信令携带VoiceXML脚本或Voice XML URI给MRFC,MRFC可以通过解析脚本,并转化为H.248协议或SIP MSML协议,利用这两个协议中的媒体控制功能来表达VoiceXML脚本的要求,用来控制MRFP执行放音、收号、会议、IVR的功能。
VXML的流程控制功能较差,MRFC只有在流程较单一的呼叫场景中使用它。
比如要实现多方通话,
方案一:AS可以用SIP 控制多方通话流程,在各个指示放音控制的SIP信令(发给MRFC)中携带VXML脚本,指示放音文件与播放参数。MRFC将之转化为H.248包发给MRFP。这对MRFC要求实现多方通话流程的控制。
方案二:AS也可以直接使用CCXML,这样AS与MRFC之间的SIP流程就得到简化,主要的会话控制由CCXML来执行,CCXML脚本中嵌入VXML脚本来控制放音参数。由用户自己在MRFC或AS定义CCXML脚本。AS直接在SIP invite中发给MRFC即可。MRFC将CCXML脚本解析后,对应到SIP呼叫状态与H.248流程。
Voice XML脚本文件可以放在SIP AS或Web Server中。
Web Server中也可以存放音频文件、视频文件。
举例如下:
AS通过RFC4240,在INVITE消息的Request-URI中携带以下dialog标记,其中携带了VXML脚本地址。
sip:dialog@mediaserver1.net;voicexml=http://vxmlserver1.net/cgi-bin/scripta.vxml
MRFC利用HTTP接口,向Web Server取得VXML脚本文件后执行脚本。
某公司的VXML功能列举
VoiceXML支持的标准
支持voiceXML Version 2.1 规范
支持SRGS Version 1.0 (语音识别语法规范)(比如:DTMF 输入)
支持SSML Version 1.1 (语音合成标记语言)
功能如:实现DTMF 识别、语音视频播放控制、语音视频录制。扩展voiceXML 元素和属性,并整合CCXML,完成复杂的语音应答系统。
1) 语音视频播放
可播放wav、mp3 等格式的音频文件;(具体格式要看媒体服务器)
可播放wmv、3gp 等格式的视频文件;(具体格式要看媒体服务器 )
支持文件远程访问;
可配置播放时间、播放次数以及速度等;(播放次数和速度不支持属于较高级功能)
可配置DTMF 来控制快进、回退、停止播放等;(快进和回退属于较高级功能)
支持多个音频或视频文件的拼接播放;(属于较高级功能)
2) 语音视频录制
可录制wav、mp3 等格式的音频文件;(具体格式要看媒体服务器)
可录制wmv、3gp 等格式的视频文件;(具体格式要看媒体服务器 )
支持文件存储、删除;(具体要看MRC )
可配置录制文件保存位置、录制最大时间、录制静音时间、终止DTMF 等;
3 ) DTMF 识别
支持SRGS 的DTMF 语法;(有简单的,有复杂的)
支持通配符”?”的DTMF 模糊输入;
4) 其他扩展
扩展了Session 变量,voiceXML 脚本可引用CCXML的Session 变量,便于CCXML与VXML 通信;
扩展了<record>元素属性,便于控制语音视频录制;
5) 系统配置
可通过命令行或web browser 配置系统参数;(目前两者都不支持)
专门工具VQuicker 撰写voiceXML 脚本,使定制脚本简单快捷;(目前未实现)
4. 应用
在各种IVR 应用中,包括视频交互式应用,采用CCXML 和voiceXML 可快速完成复杂的交互式系统。常见有以下应用:
1) Voice&Video Mail 语音视频邮箱
2 ) Voice&Video Attendant 接线员
3) Call Center 呼叫中心
4 ) Voice&Video Conference 语音视频会议
应用—电话书店
一个有十种图书小书店,每本书都有书名和书价。用户可以说出书名来购买图书,在不知道有哪些书的时候可以说“查询”来获取所有书名,可以说“结帐”系统计算出总书款并报读;
系统在用户呼入时提示用户输入帐号,没有帐号直接按#键进入。如果帐号为123,口令也为123则是vip用户,对其书价打8折,用subdialog实现计算书价的功能,并在用户帐号不同时分别调用
用户可以说“留言”时进入录音功能并录制不长于30秒的留言并可以回放确认。
使用NBest对用户输入产生一种以上结果时让用户按键确认;
用户在寻求帮助时转接人工。
使用动态脚本实现用户购书后产生订单号,用户可以查询订单内容和状态。
CCXML
SIP AS可以下发CCXML脚本,控制MRFC执行呼叫控制功能。
CCXML语言介绍
CCXML(Call Control eXtensible Markup Language,呼叫控制可扩展标志语言)是W3C 语音浏览器工作组发布的呼叫控制语言,它基于XML定义了一系列开放标准的呼叫控制API。CCXML结合VoiceXML可以提供高级的电话呼叫控制功能,它允许开发人员通过简单的方式编写XML脚本,进行编程,功能包括:电话系统的呼入、呼出和各种呼叫转移功能,并提供复杂的会议服务。
CCXML可以使复杂的动作很容易地程序化,诸如有条件的接收呼叫(包括中间呼叫处理事件)、各种呼叫转移、复杂的多方会议控制,以及复杂的多方呼叫处理和控制,包括主动呼出呼叫的管理等。VoiceXML可以为CCXML提供语音媒体的控制功能。
通用业务实体的抽象
CCXML对传统电话业务实体的抽象基于JTAPI模型。每个CCXML应用程序由控制和管理下表列出的对象的CCXML文档集合组成:
CCXML 会话:一个 CCXML 会话可以由一个正在执行中的 CCXML 文档组成,也可以由一系列 CCXML文档组成;每个正在并发执行的文档是一个单独的会话,并且能够被唯一的标识和引用。
连接:连接可以是“呼叫腿”(真实的电话连接),或者是与话音对话相关的系统资源。连接之间,连接与会议对象之间的媒体流由CCXML解析器跟踪并且占用系统资源,但是不需要专门的标识,因为它们有其端点标识。连接的所有者可以使用<move>从一个会话移到另一个会话。
会议对象:一个会议对象模型化了混合媒体流的资源。为了适应最广泛的底层电话呼叫控制定义,CCXML假想了一个单独的会议对象。
对话:当一个对话活动时,它可以使用单向或双向的媒体流和连接或会议对象交互,通常是由象 VoiceXML这样的对话环境控制。
下图展示了各业务实体之间的关系:
CCXML不提供任何与呼叫方交互的机制, 而是依赖于诸如 VoiceXML之类单独的对话环境。当要求与呼叫方交互时,CCXML会话能够创建一个单独的对话来完成交互。在对话结束后,一个异步事件被发送到该CCXML会话,会话能够使用对话环境返回的任意的结果以决定下一步的动作。
CCXML程序通过CCXML语言中定义的标签操作这些实体。 它们也可以发送和接收与这些实体相关的异步事件。
事件处理模型
电话应用程序需要实时的接收和处理大量的事件。这些事件来自程序自身以外-可能来自底层的电话平台或者其它事件源。对于许多电话应用来说,这一事件处理机制是必需的。
事件处理是 CCXML最强大的功能之一。CCXML事件能够在任意时间发送,能够来自许多事件源。每个 CCXML会话都能够发送和接收事件。外部和内部事件的传送和接受都有平台中叫作“事件I/O 处理器”的逻辑组件控制。平台能够支持多种事件 I/O 处理器并且每一种都可支持不同的外部事件格式(例如:SOAP,JMS,SIP,Simple HTTP 或者其它的事件传输方式)。每一个运行中的 CCXML解析器都有一个队列,解析器将传入的事件放到该队列中。一个<eventprocessor>由一个隐含的事件处理器解析算法(EHIA)解析。
CCXML文档浏览器必须支持一组核心的电话相关的事件集。下图展示了各类事件间的关系。这些事件集设计的足够抽象,能够独立于底层的网络协议和业务接口。
计算语义的表达
CCXML的计算语义以ECMAScript Compact Profile(即ES-CP ECMA-327)为基础表达。CCXML 表达式是有效的 ECMAScript 表达式,可以赋值给具有有效 ECMAScript 名字的变量。
许多CCXML元素具有多个 ECMAScript表达式属性。CCXML语言不保证这些表达式的以特定的顺序求值。同时,一些如<transition>的元素可能也可能不对所有的属性求值。所以包含有副作用表达式的属性会导致与实现相关的行为。规范不推荐在应用中使用具有副作用表达式的属性。
CCXML 语言是事件驱动的。现在我们来介绍事件驱动的概念,我们可以把事件看作:
事件可以是电话系统发送给 CCXML 应用程序并驱动 CCXML 应用程序执行相应呼叫控制功能的消息。
事件也可以由用户编写的 CCXML 应用程序、CCXML Interpreter 或者被 CCXML Interpreter 调用的 Voice 应用程序生成。
事件处理:所谓“处理”,我们指的是事件可以发出和接收。事件处理可以使用 <eventprocessor> 和 <transition> 元素完成。等待处理的事件保存在一个队列中。<eventprocessor> 元素从队列中取出的一个可用的事件。
ECMAScript 和 JavaScript 类似,是 CCXML 内使用的脚本语言。CCXML 中所用的 ECMAScript 规范是基于 ECMAScript Compact Profile(ES-CP,也成为 ECMA-327)的一种工业标准脚本语言。ES-CP 是为资源受限的设备量身定做的,CCXML 选择它是为了提高效率
CCXML控制元素
脚本控制和执行
<script>——与ECMA327 兼容的ECMAScript(javascript)
<if> , <elseif>, <else>——逻辑判断
<fetch> , <goto>——脚本执行跳转
<createccxml>——生成子程序
<exit>——退出
<log>——调试功能
dialogs
<dialogprepare>
<dialogstart>
<dialogterminate>
<send>, <cancel>
发送/取消事件(如发送terminate trasfer 到voice xml, email 通知,传真)
电话控制
<accept>
<reject>
<createcall>
<disconnect>
conference
<createconference>
<destroyconference>
实现draft 中的计引用数模型
<join> ,<unjoin>
1. join , unjoin 可在 connection 和connection, conection 和dialog, connection 和
conference , conference 和dialog 间执行
2. 三种 join 动作支持(<join>, <createcall>, <dialogprepare>)
3. 实现connection 和 dialog 的one-input/multi-output 媒体属性模型
4. session, connection, dialog 结束,资源和媒体属性自动处理
标准的事件集
fetch.done
error.fetch
ccxml.loaded
ccxml.kill
ccxml.created
error.createccxml
dialog.started
dialog.exit
error.dialog
error.dialog.notstarted
dialog.preparred
error.dialog.notprepared
error.send.failed
send.successful
cancel.successful
connection.alerting
connection.progressing
connection.connected
connection.disconnected
connection.failed
error.connection
connection.signal
conference.created
conference.destroyed
conference.joined
conference.unjoined
error.conference.create
error.conference.destroy
error.conference.join
error.conference.unjoin
error.conference
CCXML脚本举例
以下举例1-5摘自:IBM developerWorks ,其它摘自CCXML标准文本。
CCXML举例1:<eventprocessor>和<transition>元素
每个 CCXML脚本都需要一个<eventprocessor>元素,它控制脚本的执行。<eventprocessor>还负责处理事件队列:从队列中去掉第一个事件并选择要执行的转换。
<transition>元素定义了根据收到的事件要执行哪一个 CCXML元素。<transition>元素都包含在<eventprocessor>元素内。
下面的例子说明了如何处理即将到来的呼叫。从即将到来的呼叫收到的第一个事件是 connection.ALERTING事件。当连接转换到警告状态时将生成这个事件。收到该事件时,将使用<accept>元素接受这次呼叫。
<?xml version="1.0" encoding="UTF-8"?>
<ccxml version="1.0">
<eventprocessor>
<!-- Accepts an incoming call-->
<transition event="connection.ALERTING" name="evt">
<accept connectionid="evt.connectionid"/>
</transition>
</eventprocessor>
</ccxml>
<transition>元素的 event属性表明哪一个事件将导致<transition>的执行。上例中,在接收到 connection.ALERTING事件时选择<transition>。<transition>元素中的 name属性是一个 ECMA变量,事件的细节将保存在其中。
在<transition>元素内部,子元素按照脚本的顺序执行,因此首先执行的是<accept>元素。这个元素将导致电话系统层连接该呼叫。属性 connectionid必须包含即将到来的呼叫所标记的连接标识符。该例中,这个标记包含在 connection.ALERTING事件的形式中。您可以从这个事件获得关于连接的信息。
CCXML举例2:事件属性
所有的事件都有属性,在 W3C规范中可以找到完整的属性列表。比如, connection.ALERTING事件包含关于事件的 name、connectionid、protocol、info attribute和 connection属性的信息。connection属性提供了到连接对象的访问,其中包含关于连接的更多信息。访问这些信息可以使用下面的符号:
evt.name
evt.connectionid
evt.protocol
其中 evt是在<transition>元素中为事件指定的名字。这样就可以从 connection.ALERTING事件中获得 connectionid,然后使用这个 ID告诉<accept>元素接受哪次呼叫。
<!-- Accepts an incoming call-->
<transition event="connection.ALERTING" name="evt">
<accept connectionid="evt.connectionid"/>
</transition>
CCXML举例3:<dialogstart>元素
如果<accept>元素成功完成,那么接下来生成的事件就是 connection.CONNECTED。这个事件可以采用类似的方式处理,但是在这个<transition>中将在这次呼叫上启动一个对话。
<transition event="connection.CONNECTED" name="evt">
<dialogstart src="'welcome.vxml'" type="application/xml+vxml"/>
</transition>
这里采用了同样的符号处理 connection.CONNECTED事件。<dialogstart>元素在<transition>元素内部使用。<dialogstart>元素将启动一个对话,对话和这个特定的连接关联。
使用 src属性指定初始对话文档的 URI引用。这是将加载并执行的对话文档。src属性必须等于一个返回字符串的 ECMAScript表达式。包围“welcome.vxml”的单引号表示这是一个字符串。如果省略单引号,则“welcome.vxml”被解释成一个变量并尝试对这个变量求值从而造成错误。也可以使用变量包含文档 URI。
新的对话在单独的逻辑线程上执行,因此对话的执行不会阻塞 CCXML会话中其他事件的处理。<dialogstart>元素中还指定了 type属性。这是文档的 MIME类型,该例中使用的是 VoiceXML文档并制定了相应的 MIME类型。。
CCXML举例4:<<disconnect> 元素
对话完成时,CCXML 会话接受一个 dialog.exit 事件。这个时候可以断开呼叫连接。
<transition event="dialog.exit" name="evt">
<disconnect connectionid="evt.connectionid"/>
</transition>
<disconnect> 元素中必须指定要断开的连接的 connectionid。这个信息从 dialog.exit 事件中检索,以保证对话刚刚完成的呼叫就是要断开连接的呼叫。
CCXML举例4:basic.xml 的完整代码
在这个例子中,您所创建的 CCXML 脚本可以应答呼叫、向呼叫方播放对话,然后在对话结束时断开呼叫连接。
下面是完整的代码:
<?xml version="1.0" encoding="UTF-8"?>
<ccxml version="1.0">
<eventprocessor>
<!-- Accepts an incoming call -->
<transition event="connection.ALERTING" name="evt"> 注:这个事件可以由SIP的180消息触发。
<accept connectionid="evt.connectionid"/>
</transition>
<!-- Starts VoiceXML dialog on a separate thread -->
<transition event="connection.CONNECTED" name="evt"> 注:这个事件可由SIP的200消息触发。
<dialogstart src="'welcome.vxml'" type="application/xml+vxml"/> 注:通话
</transition>
<!-- Disconnects the call when dialog finishes -->
<transition event="dialog.exit" name="evt"> 注:这个事件可由SIP 的bye消息触发。
<disconnect connectionid="evt.connectionid"/>
</transition>
</eventprocessor>
</ccxml>
CCXML举例5:voting.ccxml 应用程序统计不同电话号码的呼叫次数。
<?xml version="1.0" encoding="UTF-8"?>
<ccxml version="1.0">
<!-- Global variable to store the number of calls to 1001 --> <var name="count1001" expr="0"/> 注:分别定义几个变量,初值是0 <var name="count1002" expr="0"/> <var name="countother" expr="0"/>
<eventprocessor>
<transition event="ccxml.loaded"/>
<!-- Accepts an incoming call --> <transition event="connection.ALERTING" name="evt"> 注:这个事件可以由SIP的180消息触发。 <accept connectionid="evt.connectionid"/> </transition>
<!-- Starts VoiceXML dialog on a separate thread --> <!-- Counts the number of times 1001 and 1002 are dialed --> <!-- Logs the dialed number --> <transition event="connection.CONNECTED" name="evt"> 注:这个事件可以由SIP的200消息触发。 <dialogstart src="'welcome.vxml'" type="application/xml+vxml"/> <if cond="evt.connection.local=='1001'"> 注: evt.connection.local取自SIP消息的被叫号码(req-uri或to)。 <assign name="count1001" expr="count1001 + 1"/> 注:被叫号码匹配成功,则某个变量加1 <log expr="'Call number ' +count1001+ ' to 1001'"/> <elseif cond="evt.connection.local=='1002'"> <assign name="count1002" expr="count1002 + 1"/> <log expr="'Call number ' +count1002+ ' to 1002'"/> </elseif> <else> <assign name="countother" expr="countother + 1"/> <log expr="'Call number ' +countother+ ' to another number - ' +evt.connection.local"/> </else> </if> </transition>
<transition event="dialog.started"/>
<!-- Disconnects the call when dialog finishes --> <transition event="dialog.exit" name="evt"> <disconnect connectionid="evt.connectionid"/> </transition>
<transition event="connection.DISCONNECTED"/>
<!-- Catches any errors --> <transition event="error.*" name="evt"> 注:如果 CCXML 代码中出现错误,就会造成错误事件。event 属性使用了星号(*)形式的通配符,因此该 <transition> 元素和任何以“error.”开始的事件匹配。比如,当 CCXML 脚本包含语义错误时将生成 error.ccxml。<log> 元素的结果输出到文件 ccxml_app_log 中 <log expr="evt.name + ' occurred, with error condition ' + evt.error"/> </transition>
<!-- Catches any missed events --> <transition event="*" name="evt"> 注:记录所有未处理的事件 <log expr="evt.name + ' event was caught'"/> </transition>
</eventprocessor>
</ccxml> |
每个连接事件都包含一个连接对象,这个对象包含一些不同的参数,其中之一是本地号码(呼叫方拨入的号码)。这个值通过计算 evt.connection.local 得到,其中 evt 是 <transition> 中给定事件的名称。该例中使用 evt.connection.local 确定呼叫的号码和要增加的变量。
这里使用 <var> 创建了三个变量。这些变量的值可以使用 <assign> 元素修改,这个元素和 <var> 非常相似。name 属性指定了变量的名称, expr 属性决定了变量的新值。
<if> 和 <elseif> 元素都有一个 cond 属性。它是结果为真或者假的 ECMAScript 表达式:
当 evt.connection.local 的值是 1001 时,<if> 的结果为真。这样将执行 <if> 元素之后,<elseif>、<else> 或者 </if> 之前的所有元素。在上例中,<assign> 是第一个要执行的元素,它向全局变量 count1001 加 1。count1001 的新值也被记录下来。
如果 evt.connection.local 的结果不是 1001,则测试 <elseif>。如果拨入的号码是 1002,则执行包含在 <elseif> 标签中的语句。
如果 <if> 和 <elseif> 的条件都不成立,则执行 <else> 元素。该例中向 countother 变量加 1,并把拨入的号码记录下来。
逻辑能够分别统计不同号码的呼叫次数,因此提供了简单的投票应用程序所需要的功能。所有的呼叫方都听到同样的对话,但拨入的号码分别计算。
ccxml.loaded 事件是当启动新的 CCXML 会话并且 CCXML 脚本已经加载的时候生成的。通过该事件可以在不呼叫的情况下启动执行。
dialog.started 事件是当一个 <dialogstart> 元素成功完成时生成的。
connection.DISCONNECTED 事件是在 <disconnect> 成功执行之后,或者平台已经断开连接发出通知时生成的。
CCXML举例6 :Accept or Reject a Call。来自:
This CCXML document shows an example of how to process a incoming call event and answer or reject the call based on the phone number of the calling party
<?xml version="1.0" encoding="UTF-8"?>
<ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml">
<eventprocessor>
<transition event="connection.alerting">
<log expr="'The number called is' + event$.connection.remote + '.'"/>
<if cond="event$.connection.remote == 'tel:+18315551234'"> 注:当振铃时(对应Sip的180消息),MRFC发现被叫号码是tel:+18315551234,则拒绝这个呼叫。
<log expr="'Go away! we do not want to answer the phone.'"/>
<reject/> 注:MRFC会发起sip bye消息。
<else/>
<log expr="'We like you! We are going to answer the call.'"/>
<accept/>
</if>
</transition>
<transition event="connection.connected">
<log expr="'Call was answered,Time to disconnect it.'"/> 注:进入呼叫时(对应sip 的200消息)记录日志。
<disconnect/>
</transition>
<transition event="connection.disconnected">
<log expr="'Call has been disconnected. Ending CCXML Session.'"/>
<exit/>
</transition>
</eventprocessor>
</ccxml>
CCXML举例7:Simple Dialog。来自:
http://www.w3.org/TR/2011/REC-ccxml-20110705/
This is an example of running a simple VoiceXML dialog from CCXML. The application answers an incoming phone call and then connects it to a VoiceXML dialog that returns a value that is then logged to the platform:
dialog.ccxml:
<?xml version="1.0" encoding="UTF-8"?>
<ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml">
<!-- Lets declare our state var -->
<var name="state0" expr="'init'"/>
<eventprocessor statevariable="state0">
<!-- Process the incoming call -->
<transition state="init" event="connection.alerting">
<accept/>
</transition>
<!-- Call has been answered -->
<transition state="init" event="connection.connected">
<log expr="'Houston, we have liftoff.'"/>
<dialogstart src="'dialog.vxml'"/> 注:进入通话态后按'dialog.vxml'脚本控制媒体播放并自动转化用户语音成一串号码。
<assign name="state0" expr="'dialogActive'" />
</transition>
<!-- Process the incoming call -->
<transition state="dialogActive" event="dialog.exit">
<log expr="'Houston, the dialog returned [' + event$.values.input + ']'" /> 注:用户说完话后,dialog结束,系统自动将识别出的号码写到日志中。
<exit />
</transition>
<!-- Caller hung up. Lets just go on and end the session -->
<transition event="connection.disconnected">
<exit/>
</transition>
<!-- Something went wrong. Lets go on and log some info and end the call -->
<transition event="error.*" >
<log expr="'Houston, we have a problem: (' + event$.reason + ')'"/>
<exit/>
</transition>
</eventprocessor>
</ccxml>
dialog.vxml:
<?xml version="1.0"?>
<vxml xmlns="http://www.w3.org/2001/vxml" version="2.0">
<form id="Form">
<field name="input" type="digits"> <prompt>
Please say some numbers ... 注:MRFP播放这段话,需要具有TTS(Text To Speech)功能,能根据文本输入,自动产生语音
</prompt>
<filled>
<exit namelist="input"/> 注:MRFP执行ASR(Automatic Speech Recognition),能根据用户输入的语音,识别出结果,如一串号码。
</filled>
</field>
</form>
</vxml>
CCXML的呼叫流程控制功能
CCXML可以支持会议、IVR应用,见CCXML标准文本。
11: Complex Examples
11.1: Calling Card Application
11.2: Conferencing application
11.3: Personal Assistant
MRFC与CCXML
CCXML是与底层协议(比如SIP、H.248、H.323,甚至七号信令,CCXML的各种事件可由底层协议来触发)无关的一种语言,MRFC可以充当CCXML引擎:它可以解析CCXML脚本,根据当前收到的SIP消息(RFC4240),转化为用于呼叫控制的SIP信令,并控制MRFP执行媒体控制功能。
注:可以参见 CCXML举例4、CCXML举例5、CCXML举例6,MRFC在invite中收到ccxml脚本后,根据SIP呼叫过程中不同触发点触发不同的ccxml事件,进入特定的脚本中,比如统计某个被叫号码的呼叫次数、按脚本执行TTS、ASR功能。
当AS下发的是CCXML 1.0的脚本, MRFC需要通过CCXML解析器将CCXML中的控制指令转换成SIP MSML/H.248的控制指令,实现对MRFP设备的控制;以及对外发起SIP会话请求、创建或控制会议。见下图:
图:MRFC接受CCXML的控制
VXML与CCXML的结合
VXML定义了人与计算机之间的语音交互过程,应用于各种交互式语音应答应用,广泛应用于各种呼叫中心系统。VXML常与CCXML结合在一起,用于复杂的媒体面控制流程、复杂的呼叫控制流程。
二者的分工是:CCXML脚本捕获各种呼叫事件,按事件执行各个VXML脚本。VXML控制语音视频的播放、录制、DTMF识别,并将结果返回给CCXML脚本(如引用CCXML的Session变量)
CCXML用于建立、监视和关闭电话呼叫、会议,VXML用于控制语音播放、放音收号。
VXML只能支持单用户访问,没有多方通话控制,后者由CCXML支持。
CCXML较复杂,且部分功能与VXML功能重合。
比如AS(sip+CCXML)控制媒体服务器(sip+vxml)放音。AS、媒体服务器平台底层支持SIP协议的通信,并支持CCXML\VXML脚本解析器。开发人员很容易在两个平台上利用CCXML,VXML开发本领域的语音应用。注:复杂的语音、短信业务流程,可能需要扩展CCXML,VXML标签,并需要底层SIP协议支持。
VXML与CCXML对于SIP呼叫客户端的作用
可以开发新的业务流程,并与Html应用结合。比如将原客户端(原来的功能只有简单的消息交流、VOIP会话)变为 微博客户端、微信客户端、网络会议中心、话务员终端。原来的普通用户可以选择将自己注册成话务员,多个话务员可以合成一个话务员组,由服务器进行排队选择。
原客户端的开发商只需要提供客户鉴权、验证功能、基本呼叫功能与CCXML解析器即可。作为客户资源的拥有者。
原服务器可以开发成呼叫中心、呼叫排队机、话务台服务器。。。
SCXML
RFC6230与RFC6231(Media Control Channel Framework)
RFC6230 Media Control Channel Framework
RFC6231 An Interactive Voice Response (IVR) Control Package for the Media Control Channel Framework
draft-ietf-mediactrl-mixer-control-package-14.txt
RFC 6230提供另外一种媒体控制协议,它定义了一种用于建立媒体控制通道的框架,它让Client(可由AS充当)与Server(可由MRFC充当)之间建立一条TCP连接(即媒体控制通道),在这个TCP连接上可以让Client与Server之间传输特定的媒体控制指令。
图:Media Control Channel Framework协议架构图
这些指令均是以CFW开头的文本指令,可以建立和维护四种事务,指令中可以携带各种控制字段及特定的XML元素。不同指令会产生不同的响应返回给发起方。这四种事务如下:
CONTROL事务:用于传送控制信息,
REPORT事务:用于上报执行结果
K-ALIVE事务:用于保活媒体通道,例如,经过NAT或防火墙等设备
SYNC事务:用于双方同步Control包功能集及其它信息。
RFC6230在SIP信令中定义了一种新的SDP消息体类型application/cfw,通过在Client与Server之间交换Invite/200/ack 事务(invite与200的消息体中携带了用于建立TCP连接及CFW通道的信息),可以建立TCP通道。之后Client就可以请求server执行媒体控制功能。
RFC 6231中定义了用于IVR控制的XML元素与控制模型。
draft-ietf-mediactrl-mixer-control-package-14定义了用于会议和mixer的XML元素与控制模型。
图:MRFC与MRFP接受Media Control Channel Framework控制
SCTP连接在RFC 6231中定义。
HTTP协议的作用
RFC 2616 HTTP(Hyper Text Transfer Protocol)
RFC 2246 TLS(Transport Layer Security)
MRFC通过HTTP或HTTPs向Web服务器得到VoiceXML、CCXML脚本文件或音视频文件。
MRFC从SIP AS得到HTTP文件路径(Http URI)后,MRFC会通过HTTP协议或HTTPs协议,作为HTTP Client向第三方Web服务器(或支持Web接口的SIP AS)获取VoiceXML脚本文件,包括VoiceXML脚本文件、CCXML脚本文件、音频文件、视频文件等。
MRFC得到脚本文件后进行解析并执行。
MRFC得到音频、视频文件后以文件共享或NFS的方式将文件发给MRFP。
某公司媒体服务器白皮书
基于Excel_DSP2的媒体服务器技术白皮书
媒体服务是指采用数字信号处理技术对语言、图像等媒体信号进行编码、解码、合成等操作,可以提供录音、放音、会议等功能。媒体服务器就是利用数字信号处理技术提供以上功能的服务模块。Suntek 媒体服务器主要是针对语音体的服务器,在Suntek IPS 中,它为IVR和ICS模块提供了录音、放音、收发DTMF、会议、语音邮箱等功能,并为IVR和ICS提供了一套标准的媒体服务的操作接口。详见IPS 的相关资料。之前,Suntek媒体服务器主要采用板卡作为基本的媒体处理关键硬件设备,这些板卡按提供的功能分类有语音卡、传卡、会议卡等,实际上,相当部分的板卡后来演变成同时能够提供语音、传 和会议功能的多功能板卡;按照总线结构主要有ISA、PCI、CPCI 几种类型,对应的媒体服务器也分为ISA/PCI媒体服务器和CPCI 的媒体服务器。
功能描述
系统功能描述按照放音、录音、收发 DTMF、会议、语音邮箱几个功能项进行描述。
放音功能
系统支持对某个通道(话路)或某个会议的放音功能,当对通道放音时,占用这个通道的用户可以听到系统放出的提示音;当对会议放音时,整个会议中的所有用户(包括双向连到会议的用户和单向连到会议的用户)都可以听到系统的提示音。系统可以按照指定的文件进行放音,可以指定从文件中的某个位置(字节数)开始播放,指定播放的长度(字节数) , 目前支持的文件格式有PCM和ADPCM两种。其中PCM格式为8K,支持 A律和 u律两种。ADPCM格式支持6KHz 和8KHz采样率,精度为4bit。
在放音过程中,用户可通过按键进行打断当前放音,用户可通过IVR流程设置一些可以打继的按键,系统收到其中的一个即停止放音。
为了提高放音性能,系统采用了缓冲(cache)技术。系统的语音文件保存在文件服务器上,DSP2 卡通过 NFS 协议访问文件服务器上的文件。有两种方式对文件进行 cache:一种是固定 cache,通过配置文件(VIF 文件,VocabularyIndex File),这些文件第一次播放时,DSP2卡从文件服务器上把文件内容读取到DSP2卡的cache中,接下来再用到这个语音文件中的时候,DSP2卡先判断这个文件是否在cache中,如果是,则直接从cache中取到播放,固定cache的文件只要播放一次后就会一直存在cache中,除非系统Reset或清除cache中的内容。可将单个文件从cache中清除,也可以清零所有的cache内容。另外一种是动态cache,这些文件没有写到VIF文件中,系统每次播放时,如果cache中有空间,就先缓存到cache中,下次播放如果还在cache中,则不再到文件服务器取,直接使用cache中缓存的数据;当有其它文件需要经常播放,而此时cache没有多余空间的时候,DSP2 卡会将这部分不经常使用的文件从 cache 中清除。对于播放其中一段的文件,DSP2 卡只缓存播放的这一段的内容。固定的、经常用到的文件需要写到VIF文件中,而临时产生的文件则使用动态cache的方式,写到VIF文件中的语音文件,如果其内容有了改变,需要将DSP2cache中的内容清除,以便下次播放时,系统能够从文件服务器上取到更新后的文件内容。
系统所有的合成音(Mix play)都定义在VIF文件中。媒体服务器对合成音的播放有一个限制:一次播放的最大数目为32个,超过32个的时候必须分成两次播放。
录音功能
系统支持对某个通话(或话路)或某个会议的录音功能。当对通话录音时,占用这个通道的用户的声音被录制到文件服务器上,以指定的路径和文件名存取;当对会议中的某个用户录音时,录到的是这个被加入的会议的声音,当对会议录音时,录到的是整个会议的声音。
录单支持两种模式:添加和覆盖(Append or Modify)。添加模式的含义是:如果语音文件中已经存在,则打开这个语音文件,本次录音录到的数据添加到这个文件的后面。覆盖的含义是:如果文件已经存在,则把这个文件清零,从头开始保存录音数据。如果文件不存在,则添加和覆盖是一致的:打开一个新文件存储录音数据。
录单支持的文件格式有PCM和ADPCM,其中PCM格式为8KHz,支持A律和u律两种。ADPCM支持6KHz 和8KHz采样率,采样精确度为4bit。在录音过程中,用户可通过按键停止录音。用户可通过IVR流程设置一组打断键,系统收到其中之一即停止录音。
用户可设定录音的最大时长,当时间到时,系统自动停止录音。用户可设置录音开始的触发电平,当声音达到此强度时开始录音;用户可设置录音结束的触发电平和检测时间,当声音低于这个电平并持续规定的时间时,系统自动停止录音。录音文件的大小只受文件服务器的限制。
收发 DTMF功能
系统支技DTMF发送和检测功能,DTMF按键包括0、1、2、3、4、5、6、7、8、9、*、#、a、b、c、d。系统在发送DTMF时可以DTMF之间加入延迟,延迟时间以毫秒计,最小延迟不得小于20ms。
会议功能
会议功能分普通会议和监控会议两种。
系统支持大容量会议功能,单个会议可达到 128 方可听可讲,并支持 2048方的广播;会议的编码方式为A律;会议支持固定方数和动态方数。固定方数在会议创建时即指定会议的最大参加方数,最多只有这么多人参加会议,动态方数可以在会议的进行过程中一直加入与会者,直到下面两种情形之一:
1、达到单个会议的最大容量(128方) ;
2、系统的总的会议资源数已用完。如系统的会议方数为256方,已经分别有64方,36 方,72 方的三个会议,现在新创建一个会议,已经有 84 方用户在会
议中,则新的用户不能再加入这个会议。
会议中可以接收用户的 DTMF 按键,可知道是哪个用户按键,可听可讲按键可被其它用户听到(注:这一点不符合平台要求,平台要求一个用户的按键音不能被会议中的其它用户听到)。
可以对会议进行录音和放音。会议放音只能放一次,不能同时对一个会议放多个音(这一点不符合平台要求。 )
监控会议(Monitor corference)用于对话务员的录音和监听,这种会议方式在 MFDSP 和 DSP ONE 卡中都支持,在 DSP2 卡中其容量大大增加。单个 DSPChip 支持 256 方 Monitor corference,单个 DSP Stream(半个 chip)支持128方,也就是说,一个DSP Stream可支持 64路同时录音和监听。
DSP2卡放音所用的语音和录音所产生的语音都存放在文件服务器上, DSP2卡与文件服务器之间通过以太网相连,DSP2 卡的 I/O 有三个网口可实现与服务器的网络连接。
DSP2与文件服务器之间采用NFS协议,DSP2 卡支持NFS2.0。NFS协议包括 mount(文件系统挂接),unmount(文件系统解除挂接),lookup(文件查找) ,Read(读文件),Write(写文件)等调用,可以实现网络文件的异地共享访问。语音以文件的形式保存在文件服务器上,可按目录分录存储,系统目前支持8k*8bit 的PCM格式和8k*4bit 格式。
DSP2卡的功能主要分成三大类:
l 信号音类
这里又分成两类, 一类是信号音产生, DSP2支持 A律和μ律的通用信号音产生,原来所有的MFDSP卡和 DSP ONE卡支持的信号音类型都可以用通用信号音产生(Universal Tone Generation)资源提供。另一类是信号音接收,包括有:
DTMF(A律和μ律)
MFR1(A律和μ律)
MFR2(A律和μ律)
CPA(A律和μ律)
Energy Detection(能量检测)
l 会议类
统一会议(Unified Conference)
监控会议(Monitor Conference)
支持DTMF的会议(DTMF Clamped Couference)
l 录音/放音
每个DSP的chip 只能配置这三种类型中的某一种,譬如如果一个DSP chip的Rcv0配置了DTMF(A律),那这个chip就不可以再配置录/放音功能或任何一种会议功能,
资源点(Resource Point)
为了控制系统的容量, Excel提供不同型号的DSP2卡 (不同的Module个数),Excel还在软件级进行了限制,设计了资源点的控制方式。
资源点如同买东西时支付的货币单位,多少个资源点可以购买一个服务功能。例如:一路 DTMF 收发功能需要消耗 5 个资源点,一路录音或放音需要消耗 12 个资源点,一路会议需要消耗 8 个资源点。这样,通过购买和配置资源点的数目,可以控制并发的服务功能的数量。采用资源点的好处还在于当你需要多种不同的服务同时存在时,只要总的资源数大于等于这些同时进行的服务所占用的资源点数时,系统就正常提供服务。不需要分别确定哪种服务需要多少路。
在进行系统配置,确定所用资源点时,需要注意一路语音(vox)需要一个DTMF收发和一个录音/放音,因此一路语音需要的资源点为5+12=17。
另外还需要注意一点,每个 DSP Module 内置了 2048 个资源点,也就是说如果你购买了一块CSP-DSP-1320的DSP2卡, 你就有了2048*2=4096个资源点。如果你的业务总共需要 10240 个资源点,你需要购买的 License 为10240-4096=6144个资源点。
NFS 服务器
NFS服务器访问性能直接影响到DSP2卡的录放音的性能, 目前测试到的情
况是:
1) 采用Power Leader服务器,2.4G HZ XEON CPU、512M RAM、40GB HDD,可并发放音512路,并发录音120路;
2) 采用Dell Power Edge 4600,2.6G HZ XEON CPU、512M RAM、4 个40GBHDD,硬盘采用 RAID0,可并发放音 1360 路,并发录音 300 路+放音 300路。
3) 采用Net App (专用的文件服务器) , 可并发放音1560路,并发录音1300路。DSP2 卡的信号音收发和会议功能无性能问题,会议大量方数情况下的语音质量问题未进行测试。
HP OpenCall
HP OpenCall 是开发和部署下一代语音、数据和融合服务的全面的电信级平台,它能够连接任何网络,使人们能够在同一个基础架构上进行通信、访问信息和进行交易。HP OCMP(OpenCall Media Platform)是 HP OpenCall产品族中的媒体平台。OCMP 在语音服务方面具有很强的扩展能力,能够在其基础上快速开发和安全部署新一代消息、门户和增强的语音交互式服务。
OCMP 平台可获取不同类型的网络(PSTN、CDMA、GSM、NGN、3G)和系统资源以提供呼叫服务。OCMP 通过 CCAPI 管理呼叫、分配并维护呼叫所需的资源;在OClet 层,各种上层应用 (称为 OClet)与媒体资源进行交互;VoiceXML环境提供 VoiceXML 网关和解释器,可支持 VoiceXML1.1/2.0 应用;通过基于Web的管理界面可以控制平台的运行配置; ISUP协议栈及TSC信令卡相互配合,可接入 SS7 信令网;中间件及 TMC媒体卡提供对语音媒体的控制。
HP OCMP 提供了完整成熟的 VoiceXML平台,支持VoiceXML2.0。在此平台上可以实现一个具有完整业务逻辑的语音应用。