WebRTC DTMF
作者:追风剑情 发布于:2024-2-5 11:26 分类:Unity3d
DTMF (Dual-tone Multi-frequency,双音多频) 是一种实现快速可靠传输电话号码的技术,它具有很强的抗干扰能力和较高的传输速度。
举例说明一个 DTMF 的应用场景: 用户拨打了10086,会有相应的语音提示信息,比如 “普通话请按1。For English service,press 2.” 那么 10086 如何知道用户按了哪个键?这时需要一种技术将用户按的号码通知给后台,这就是 DTMF 的用途。
DTMF 用两个特定的单音频组合信号代表数字信号,两个单音频组合信号的频率不同,代表的数字或实现的功能也不同。普通拨号电话通常有16个按键,包括10个数字键0~9和6个功能键*、#、A、B、C、D。按照组合原理,一般应有8种不同的单音频信号,因此可采用的频率也有8种,故称之为多频。
WebRTC支持DTMF的主要目的是兼容PSTN及VOIP电话网,目前只支持发送DTMF拨号数据,但不支持接收,所以还不能用于WebRTC应用程序的两端。
WebRTC 通过 RTCRtpSender.dtmf 属性获取RTCDTMFSender 对象,使用该对象发送DTMF,RTCDTMFSender的定义如下面的代码清单所示。
//RTCDTMFSender的定义
interface RTCDTMFSender : EventTarget {
void insertDTMF(DOMString tones, optional unsigned long duration = 100, optional unsigned long interToneGap =70);
attribute EventHandler ontonechange;
readonly attribute boolean canInsertDTMF;
readonly attribute DOMString toneBuffer;
};
RTCDTMFSender 属性
1.canInsertDTMF
该属性表示返回当前通道是否支持发送DTMF拨号数据,true表示支持,false表示不支持。不支持的原因是未建立连接或收发器,RTCRtpTransceiver.currentDirection 没有包含send。
如下面的代码清单所示,判断是否支持发送DTMF拨号数据,如果支持则调用方法 insertDTMF 进行发送。
//canInsertDTMF示例
if (sender.dtmf.canInsertDTMF) {
const duration =500;
sender.dtmf.insertDTMF('1234', duration);
} else {
console.log("DTMF function not available");
}
2.toneBuffer
该属性表示返回当前待发送的 DTMF 拨号数据,这些数据由 insertDTMF()方法写入,成功发送出去的 DTMF 将从缓存中删除。
RTCDTMFSender 方法
insertDTMF() 方法
调用该方法将DTMF拨号数据追加到toneBuffer,并开始异步发送,如果成功发送则触发 tonechange 事件。
RTCDTMFSender.insertDTMF(tones[, duration[, interToneGap]]);
参数:tones,包含DTMF拨号数据的字符串,如果tones为空字符串,则清空toneBuffer;duration,DTMF拨号数据持续时长,单位为毫秒,取值范围40~6000ms,默认值100ms;interToneGap,DTMF拨号之间的等待时长,单位为毫
秒,最小值为 30ms,默认值 70ms。
返回值:无。
异常:InvalidStateError,状态错误导致不能发送 DTMF 拨号数据;InvalidCharacterError,DTMF 包含了无效的拨号数据。
如下面的代码清单所示,当 RTCPeerConnection 建立连接成功时,调用 insertDTMF() 方法发送拨号数据 dialString。
//insertDTMF()方法示例
function handleCallerIceConnectionstateChange() {
log("Caller's connection state changed to " + pc.iceConnectionState) ;
if (pc.iceConnectionState === "connected") {
log("Sending DTMF:"+ dialstring);
dtmfSender.insertDTMF(dialString, 400, 50);
}
}
RTCDTMFSender 事件
tonechange 事件
每成功发送一条DTMF拨号数据,即触发异常tonechange事件,对应事件柄ontonechange。通过事件的属性tone可以判断具体的拨号数据,如果tone是空字符串,则表示所有拨号数据都已经发送完了。
下面的代码清单演示了 ontonechange 事件句柄的用法,如果 event.tone 不为空,则打印拨号数据,如果为空,则断开连接。
//ontonechange事件句柄示例
dtmfSender.ontonechange = (event) => {
if (event.tone !== "") {
log("Tone played: " + event.tone);
} else {
log("All tones have played. Disconnection.");
}
};
标签: Unity3d
日历
最新文章
随机文章
热门文章
分类
存档
- 2024年11月(3)
- 2024年10月(5)
- 2024年9月(3)
- 2024年8月(3)
- 2024年7月(11)
- 2024年6月(3)
- 2024年5月(9)
- 2024年4月(10)
- 2024年3月(11)
- 2024年2月(24)
- 2024年1月(12)
- 2023年12月(3)
- 2023年11月(9)
- 2023年10月(7)
- 2023年9月(2)
- 2023年8月(7)
- 2023年7月(9)
- 2023年6月(6)
- 2023年5月(7)
- 2023年4月(11)
- 2023年3月(6)
- 2023年2月(11)
- 2023年1月(8)
- 2022年12月(2)
- 2022年11月(4)
- 2022年10月(10)
- 2022年9月(2)
- 2022年8月(13)
- 2022年7月(7)
- 2022年6月(11)
- 2022年5月(18)
- 2022年4月(29)
- 2022年3月(5)
- 2022年2月(6)
- 2022年1月(8)
- 2021年12月(5)
- 2021年11月(3)
- 2021年10月(4)
- 2021年9月(9)
- 2021年8月(14)
- 2021年7月(8)
- 2021年6月(5)
- 2021年5月(2)
- 2021年4月(3)
- 2021年3月(7)
- 2021年2月(2)
- 2021年1月(8)
- 2020年12月(7)
- 2020年11月(2)
- 2020年10月(6)
- 2020年9月(9)
- 2020年8月(10)
- 2020年7月(9)
- 2020年6月(18)
- 2020年5月(4)
- 2020年4月(25)
- 2020年3月(38)
- 2020年1月(21)
- 2019年12月(13)
- 2019年11月(29)
- 2019年10月(44)
- 2019年9月(17)
- 2019年8月(18)
- 2019年7月(25)
- 2019年6月(25)
- 2019年5月(17)
- 2019年4月(10)
- 2019年3月(36)
- 2019年2月(35)
- 2019年1月(28)
- 2018年12月(30)
- 2018年11月(22)
- 2018年10月(4)
- 2018年9月(7)
- 2018年8月(13)
- 2018年7月(13)
- 2018年6月(6)
- 2018年5月(5)
- 2018年4月(13)
- 2018年3月(5)
- 2018年2月(3)
- 2018年1月(8)
- 2017年12月(35)
- 2017年11月(17)
- 2017年10月(16)
- 2017年9月(17)
- 2017年8月(20)
- 2017年7月(34)
- 2017年6月(17)
- 2017年5月(15)
- 2017年4月(32)
- 2017年3月(8)
- 2017年2月(2)
- 2017年1月(5)
- 2016年12月(14)
- 2016年11月(26)
- 2016年10月(12)
- 2016年9月(25)
- 2016年8月(32)
- 2016年7月(14)
- 2016年6月(21)
- 2016年5月(17)
- 2016年4月(13)
- 2016年3月(8)
- 2016年2月(8)
- 2016年1月(18)
- 2015年12月(13)
- 2015年11月(15)
- 2015年10月(12)
- 2015年9月(18)
- 2015年8月(21)
- 2015年7月(35)
- 2015年6月(13)
- 2015年5月(9)
- 2015年4月(4)
- 2015年3月(5)
- 2015年2月(4)
- 2015年1月(13)
- 2014年12月(7)
- 2014年11月(5)
- 2014年10月(4)
- 2014年9月(8)
- 2014年8月(16)
- 2014年7月(26)
- 2014年6月(22)
- 2014年5月(28)
- 2014年4月(15)
友情链接
- Unity官网
- Unity圣典
- Unity在线手册
- Unity中文手册(圣典)
- Unity官方中文论坛
- Unity游戏蛮牛用户文档
- Unity下载存档
- Unity引擎源码下载
- Unity服务
- Unity Ads
- wiki.unity3d
- Visual Studio Code官网
- SenseAR开发文档
- MSDN
- C# 参考
- C# 编程指南
- .NET Framework类库
- .NET 文档
- .NET 开发
- WPF官方文档
- uLua
- xLua
- SharpZipLib
- Protobuf-net
- Protobuf.js
- OpenSSL
- OPEN CASCADE
- JSON
- MessagePack
- C在线工具
- 游戏蛮牛
- GreenVPN
- 聚合数据
- 热云
- 融云
- 腾讯云
- 腾讯开放平台
- 腾讯游戏服务
- 腾讯游戏开发者平台
- 腾讯课堂
- 微信开放平台
- 腾讯实时音视频
- 腾讯即时通信IM
- 微信公众平台技术文档
- 白鹭引擎官网
- 白鹭引擎开放平台
- 白鹭引擎开发文档
- FairyGUI编辑器
- PureMVC-TypeScript
- 讯飞开放平台
- 亲加通讯云
- Cygwin
- Mono开发者联盟
- Scut游戏服务器引擎
- KBEngine游戏服务器引擎
- Photon游戏服务器引擎
- 码云
- SharpSvn
- 腾讯bugly
- 4399原创平台
- 开源中国
- Firebase
- Firebase-Admob-Unity
- google-services-unity
- Firebase SDK for Unity
- Google-Firebase-SDK
- AppsFlyer SDK
- android-repository
- CQASO
- Facebook开发者平台
- gradle下载
- GradleBuildTool下载
- Android Developers
- Google中国开发者
- AndroidDevTools
- Android社区
- Android开发工具
- Google Play Games Services
- Google商店
- Google APIs for Android
- 金钱豹VPN
- TouchSense SDK
- MakeHuman
- Online RSA Key Converter
- Windows UWP应用
- Visual Studio For Unity
- Open CASCADE Technology
- 慕课网
- 阿里云服务器ECS
- 在线免费文字转语音系统
- AI Studio
- 网云穿
- 百度网盘开放平台
- 迅捷画图
- 菜鸟工具
- [CSDN] 程序员研修院
- 华为人脸识别
- 百度AR导航导览SDK
- 海康威视官网
- 海康开放平台
- 海康SDK下载
- git download
交流QQ群
-
Flash游戏设计: 86184192
Unity游戏设计: 171855449
游戏设计订阅号