当前位置: 首页 > news >正文

DTMF三种模式(SIPINFO,RFC2833,INBAND)

转自:http://www.tuicool.com/articles/n6Vb2iJ

 

1、DTMF(双音多频)定义:由高频音和低频音的两个正弦波合成表示数字按键(0~9 * # A B C D)。

2、SIP中检测DTMF数据的方法:SIPINFO、RFC2833、INBAND

1)SIPINFO

为带外检测方式,通过SIP信令通道传输DTMF数据。没有统一的实现标准,目前以Cisco SIPINFO为标准,通过SIPINFO包中的signal字段识别DTMF按键。注意当DTMF为“*”时不同的标准实现对应的signal=*或signal=10。SIPINFO的好处就是不影响RTP数据包的传输,但可能会造成不同步。

2)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参数。

3)INBAND

为带内检测方式,而且与普通的RTP语音包混在一起传送。在进行INBAND DTMF检测时唯一的办法就是提取RTP数据包进行频谱分析,经过频谱分析得到高频和低频的频率,然后查表得到对应的按键,进行频谱分析的算法一般为Goertzel,这种算法的实现也很简单,网上有很多可以下到,但建议采用定点算法,浮点算法效率很低。

在选择压缩比很高码率很低的codec,比如G.723.1和G.729A等,建议不要使用INBAND模式,因为INBAND DTMF数据在进行复杂编解码后会产生失真,造成DTMF检测发生偏差或失败。

另外,还特别需要注意的一点就是很多SIP UA中INBAND都是伴随着RFC2833和SIPINFO同时发生的,这时需要区别对待,最好选择RFC2833和SIPINFO

转载于:https://www.cnblogs.com/x_wukong/p/6116436.html

相关文章:

  • Oracle学习(一):Oracle数据库基础
  • js 单例
  • Nginx 指定不产生日志类型(不记录图片日志)
  • php对二维数组求差集
  • uplodidy代码
  • jQery简单Tab选项卡效果
  • 用linux mail命令发送邮件时指定发送人
  • SMTP补充
  • js中网页的一些宽度和高度问题
  • ASP.net 使用ConfigurationManager获取连接字符串
  • react native TypeError network request failed
  • 自定义插件学习-弹框2
  • mybatis指定jdbctype
  • Java端实现RedisPUB/SUB(订阅发布)
  • 开源镜像源(转自[tanghuimin0713的博客])
  • 07.Android之多媒体问题
  • egg(89)--egg之redis的发布和订阅
  • Golang-长连接-状态推送
  • gops —— Go 程序诊断分析工具
  • hadoop集群管理系统搭建规划说明
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • interface和setter,getter
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript中的对象个人分享
  • orm2 中文文档 3.1 模型属性
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 闭包--闭包之tab栏切换(四)
  • 从重复到重用
  • 高程读书笔记 第六章 面向对象程序设计
  • 高度不固定时垂直居中
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 驱动程序原理
  • 实战|智能家居行业移动应用性能分析
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • hi-nginx-1.3.4编译安装
  • kubernetes资源对象--ingress
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.ajax,axios,fetch三种ajax请求的区别
  • ${ }的特别功能
  • $GOPATH/go.mod exists but should not goland
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • .form文件_SSM框架文件上传篇
  • .NET delegate 委托 、 Event 事件
  • .NET Micro Framework初体验(二)
  • .Net Web窗口页属性
  • .Net6 Api Swagger配置
  • .NET的数据绑定
  • .net和php怎么连接,php和apache之间如何连接
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET中使用Redis (二)
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @TableLogic注解说明,以及对增删改查的影响
  • @Transient注解