很多站长朋友们都不太清楚phprfc2833,今天小编就来给大家整理phprfc2833,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 什么是RFC2833 2、 IP电话中的 sip RFC2833 与 sip RFC3261 有区别吗? 3、 什么是DTMF信号? 4、 RFC2833中净荷值101和97有什么区别 5、 【freeswitch】IVR按键输入的分析 什么是RFC2833您好!
RFC
Request For Comments (RFC)-意即“请求注解”,是一系列以编号排定的文件。文件收集了有关网际网路相关资讯,以及UNIX和网际网路社群的软体文件。目前RFC文件是由Internet Society(ISOC)所赞助发行。
基本的网际网路通讯协定都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对於网际网路新开发的协定及发展中所有的记录。因此几乎所有的网际网路标准都有收录在RFC文件之中。
RFC的历史
RFC文件格式最初作为ARPA网计划的基础起源于1969年。如今,它已经成为IETF、Internet Architecture Board (IAB)还有其他一些主要的公共网络研究社区的正式出版物发布途径。最初的RFC作者使用打字机撰写文档,并在美国国防部国防前沿研究项目署(ARPA)研究成员之间传阅。1969年12月,他们开始通过ARPANET途径来发布新的RFC文档。第一份RFC文档由洛杉矶加利福尼亚大学(UCLA)的Steve Crocker撰写,在1969年4月7日公开发表的RFC 1。当初Crocker为了避免打扰他的室友,是在浴室里完成这篇文档的。
在1970年代,很多后来的RFC文档同样来自UCLA,这不仅得益于UCLA的学术质量,同时也因为UCLA是ARPANET第一批Interface Message
Processors (IMPs)成员之一。由Douglas Engelbart领导的,位于Stanford Research Institute的Augmentation Research Center (ARC)是四个最初的ARPANET结点之一,也是最初的Network Information Centre,同时被社会学家Thierry Bardini记录为早期大量RFC文档的发源地。
从1969年到1998年,Jon Postel一直担任RFC文档的编辑职务。随着美国政府赞助合同的到期,Internet Society(代表IETF),和南加州大学 (USC)Information Sciences Institute的网络部门合作,(在IAB领导下)负责RFT文档的起草和发布工作。Jon Postel继续担任RFC编辑直到去世。随后,由Bob Braden接任整个项目的领导职务,同时Joyce Reynolds继续在团队中的担任职务。
庆祝RFC 30周年的RFC文件是RFC 2555。
RFC文件的架构
RFC文件只有新增,不会有取消或中途停止发行的情形。但是对於同一主题而言,新的RFC文件可以声明取代旧的RFC文件。RFC文件是纯ASCII文字档格式,可由电脑程式自动转档成其他档案格式。RFC文件有封面、目录及页首页尾和页码。RFC的章节是数字标示,但数字的小数点后不补零,例如4.9的顺序就在4.10前面,但9的前面并不补零。RFC1000这份文件就是RFC的指南。
RFC文件的产生
RFC文件是由Internet Society审核后给定编号并发行。虽然经过审核,但RFC也并非全部严肃而生硬的技术文件,偶有恶搞之作出现,尤其是4月1日愚人节所发行的,例如RFC2324的「超文字咖啡壶控制协定(Hyper Text Coffee Pot Control Protocol)」还乍有其事的写了HTCPCP这样看起来很专业的术语缩写字。以及如前面所提到纪念RFC 30周年庆的RFC文件。
以下是几个较为稳定的RFC链接,以及几个重要的标准化组织的网站链接
>>>
RFC的官方站点,可以检查RFC最及时的更新情况
最重要的Internet组织之一
RFC查询非常强大(可以以FTP登录下载全部RFC文档)
ISO-国际标准化组织
IEEE-电气与电子工程师协会
ANSI-美国国家标准化组织
ITU-国际电信同盟
中文网站:
中国协议分析网
至于RFC2833,则用于DTMF数字信号、电话音和电话信号的RTP负载格式!
IP电话中的 sip RFC2833 与 sip RFC3261 有区别吗?RFC2833是二次拨号的协议,例如你一般打10086后电话接通,电话那边要求你按下某个键,你按下这个键后要发送什么样的信息出去,这个就是2833协议要干的事情,3261协议是关于怎么用sip建立通话的。
什么是DTMF信号?DTMF( Double Tone Multi一Frequency)即双音多频,是用两个特定的单音频组合信号来代表数字信号以实现其功能的一种编码术。
DTMF信号有16个编码,其中有10个数字键0~9和6个功能键*、#、A、B、C、D。由于按照组合原理,一般应有8种不同的单音频信号。因此可采用的频率也有8种,故称之为多频,又因它采用从8种频率中任意抽出2种进行组合来进行编码,所以又称之为“8中取2”的编码技术。
扩展资料:
传送DTMF信号普遍有三种方式:
1、通过通信协议传输(SIP信令)
用SIP信令的INFO方法携带DTMF信号,没有统一的实现标准,目前以Cisco SIPINFO为标准,通过SIPINFO包中的signal字段识别DTMF按键。注意当DTMF为“*”时不同的标准实现对应的signal=*或signal=10。
SIPINFO的好处就是不影响RTP数据包的传输,但是因为SIP控制信令和媒体传输(RTP)是分开传输,很容易造成DTMF信号和媒体包不同步。
2、 通过RTP的数据内容传输(Inband)
In Band是指直接将DTMF的音频数字信号不经任何处理直接打成RTP包在IP网中传输。其中可能和用户的语音媒体流混合在一起传输。
程序要获知哪个包有DTMF信号,是什么DTMF信号,必须提取RTP数据包进行频谱分析,经过频谱分析得到高频和低频的频率,然后查表得到对应的按键。
在选择压缩比很高码率很低的codec,比如G.723.1和G.729A等。主要缺陷是由于网络丢包的影响,有时会造成DTMF信号丢失,而且DTMF音混合在语音包中,容易产生偏差,造成信号失真。
3、通过rfc2833的规则和格式包传输
通过RTP传输,由特殊的rtpPayloadType即TeleponeEvent来标示RFC2833数据包。同一个DTMF按键通常会对应多个RTP包,这些RTP数据包的时间戳均相同,此可以作为识别同一个按键的判断依据,最后一包RTP数据包的end标志置1表示DTMF数据结束。
另外,很多SIP UA 包括IAD都提供TeleponeEvent的设置功能如3CX Phone,Billion-IAD,ZTE-IAD等默认的TeleponeEvent都为101,但可以人为修改,这时要求在进行RFC2833 DTMF检测之前需事先获取SDP协商的TeleponeEvent参数。
参考资料来源:百度百科-DTMF
RFC2833中净荷值101和97有什么区别没什么区别,0-95是静态类型值,96-127是动态类型值,一般2833包中用96作为净荷值,用97作为帧类型值,这也不是固定的,只要通信双方能确定就行,所以不管是97还是101,只是证明这是一个合法的2833包,仅此而已
【freeswitch】IVR按键输入的分析IVR按键输入的一个核心能力的处理DTMF。
Freeswitch自身有处理DTMF的能力。
FS共支持三种DTMF处理方式,分别为inband、rfc2833、sipinfo
1.1.INBAND
INBAND为带内检测方式,而且与普通的RTP语音包混在一起传送。
1.2.RFC2833
RFC2833即识别一种特殊RTP报文,报文格式如下,其中Event ID表示按键值,同一个DTMF按键通常会对应多个RTP包,这些RTP数据包的时间戳均相同,此可以作为识别同一个按键的判断依据,最后一包RTP数据包的end标志置1表示DTMF数据结束。
另外,很多SIP UA默认的TeleponeEvent都为101,但可以人为修改,这时要求在进行RFC2833 DTMF检测之前需事先获取SDP协商的TeleponeEvent参数;
1.3.SIPINFO
SIPINFO为带外检测方式,通过SIP信令通道传输DTMF数据。这种方式甚至比RFC2833更有效。但是由于SIP信令和RTP收发采用的是不同的端口,所以可能会造成收到DTMF和实际的声音不同步。
配置文件conf/sip_profile/internal.xml和external.xml
internal和external是单独配置的,关于DTMF都有相同的配置项
<param name="dtmf-type" value="rfc2833"/>
这个值默认好像是注释的。注释的默认为inband。
value的值可以是none或者rfc2833。
使用rfc2833的情况下,FS只需要解析RTP流程中的event事件即可。
不过使用rfc2833要求线路或者对端支持这种方式,如果不支持,可以使用inband方式交给FS处理。
某些语音网关可以处理inband的DTMF,然后生成rfc2833rtp event。但是一些设备会存在准确率的问题
FS内部使用了一个队列dtmf_inqueue存储了dtmf结构体。 所有从rtp中获取的dtmf事件压入到该队列。
然后供需要使用的地方从队列中弹出
FS处理inband的DTMF需要调用两个APP。
start_dtmf/stop_dtmf。
在dialplan里直接调用这两个APP即可。网上大部分的教程是通过dialplan的。
如果使用命令,在发起呼叫的时候可以通过originate的参数带上。如下
start_dtmf/stop_dtmf是默认的mod_dptool里的,于此类似的还有一个模块 mod_spandsp 也提供了两个APP:spandsp_start_dtmf/spandsp_stop_dtmf
个人感觉这个效果会更好一点。
如果使用inband的方式的话请注意几点:
存在一些场景,在一条腿上获取到了dtmf事件,但是需要转给其他腿。特别是在bridge的时候。
FS在bridge的时候,默认会处理这种情况。
它会把腿1的dtmf都传给腿2.
如果不想传的话,设置参数bridge_filter_dtmf。
关于phprfc2833的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。