PJSIP的DTMF简单实现,回调函数:on_dtmf_digit

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
PJSIP源码比较强大,先说一下DTMF是什么?

双音多频 DTMF(Dual Tone Multi Frequency),双音多频,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信号有16个编码。利用DTMF信令可选择呼叫相应的对讲机   
双音多频信号(DTMF),电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。   在使用双音多频信号之前,电话系统中使用一连串的断续脉冲来传送被叫号码,称为脉冲拨号。脉冲拨号需要电信局中的操作员手工完成长途接续(早期方法,很老很古董)。   双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。   
双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频。每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。

通过调用回调函数就可以达到目标
static void on_dtmf_digit(pjsua_call_id call_id, int digit)

在PJSIP例子中:
pjsip-apps\src\pjsua\pjsua_app.c(5418):    app_config.cfg.cb.on_dtmf_digit = &call_on_dtmf_callback;

实现部分:

/*
* DTMF callback.
*/
static void call_on_dtmf_callback(pjsua_call_id call_id, int dtmf)
{
    PJ_LOG(3,(THIS_FILE, "Incoming DTMF on call %d: %c", call_id, dtmf));
}

转至:http://www.zhimax.com/article/vc/on_dtmf_digit.html


PJSIP 检测通话过程中对方手机发送过来的in-bnad DTMF(no rfc2833)按键信息 最近做项目有用到在PJSIP客户端接收手机通过过程中发送过来的DTMF按键信息,刚开始查了一点资料发现pjsip有相应的方法,在pjsua_config  cfg; 这个结构体的通过设置此回调函数cfg.cb.on_call_state貌似就可以实现 ,之后就开始实践了。用pjsip客户端+freeswitch+x-lite进行试验,试验相当顺利,心情那个激动啊。但是没激动多久,当我放到正式的运营 阅读详情

相关推荐

C++ TAPI编程实战:Windows电话通信模块开发指南

电话通信编程接口(TAPI)是Windows平台实现硬件抽象化通信的核心技术,它通过客户端-服务提供者模型,将应用程序与底层电话硬件(如语音卡、VoIP网关)解耦。其原理基于异步事件驱动机制,开发者通过统一的API调用,由TAPI管理层翻译为硬件指令,从而实现拨号、接听、媒体流控制等功能。这一技术价值在于显著提升了代码可移植性和开发效率,尤其在呼叫中心、自动外呼(IVR)等企业通信系统中应用广泛。本文聚焦于C++原生TAPI开发,深入解析从初始化、事件处理到DTMF检测的完整实现流程,为构建稳定可靠的通信模

weixin_30315723的博客 345

基于Qt5.9.1(MSVC) PJSIP网络电话源代码,带pjsip2.8 lib库,保证正常编译运行

近期要开发一个windows基于QT 的PJSIP网络电话小项目,查了很多资料,均未有一个完整可编译运行的参考资料,经过几天的调试整理,终于搞定了这个小项目,同时把pjsip 2.8编译完成的库分享给大家,在H:\pjsip\pjproject-2.8\lib里(大家根据自己的路径进行调整),我用的是libpjproject-i386-Win32-vc14-Debug.lib,几个库都能用,只需要修改.pro文件里的配置即可,如有问题可联系我,pjsip2.8相关头文件、源文件及生成库可到百度网盘下载

pjsip dtmf发送和接收(pjsua)

DTMF(双音多频,Dual-Tone Multi-Frequency)是一种用于电话系统的信号技术,通过组合两个不同频率的音频信号来表示数字和符号。当用户按下电话键盘上的数字或符号时,电话会生成两个特定频率的音调,交换机接收并解码这些信号以确定用户拨打的号码。DTMF广泛用于IVR系统,用户通过按键选择菜单选项,如银行查询账户余额或航空公司查询航班信息,系统根据用户输入的DTMF信号提供相应服务。在电话会议中,DTMF信号用于控制会议功能,如静音、取消静音或邀请其他参与者,确保会议的顺利进行。

weixin_45413401的博客 423

pjsip 实现 DTMF 数据获取,并解析按键信息

背景: 业务需要在 android 设备上添加支持通过网关拨打客户电话,并根据客户按键反馈执行相应的操作 平台: RK3399 + Android 7.1 + pjproject-2.4 步骤: 对 sip 这块小白一枚,接到任务后做了如下操作: 1 了解 pjsipDTMF,并编译出所需要的库 这里参考了:《 https://www.cnblogs.com/lijingchen...

Twpra的笔记 2979

android自动发送dtmf,如何在Android上使用pjsip发送dtmf

我正在尝试在voip呼叫期间发送dtmf。 为了做到这一点我使用如何在Android上使用pjsip发送dtmf?mCall.dialDtmf(String.valueOf(dtmf));MCALL它的调用方式PJSIP。 当这个函数被调用我赶上例外:04-25 16:03:57.867 19670-19670/kphoneapp.kymera.kvoip.myapplication W/Syst...

weixin_33743292的博客 451

pjsua manual 手册

pjsua帮助手册(中文) 原文地址 : http://www.pjsip.org/pjsua.htm 介绍   PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。 它虽然只有很简单的命令行界面,但是功能齐全。 SIP功能: 多个id(帐户注册); 多个呼叫; 支持IPv6(在1

Franck的专栏 1177

pjsua帮助手册(中文)

原文地址 : http://www.pjsip.org/pjsua.htm 介绍   PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。 它虽然只有很简单的命令行界面,但是功能齐全。 SIP功能: 多个id(帐户注册); 多个呼叫; 支持IPv6(在1.2版本中添加); PRACK(100rel,RFC...

weixin_33713707的博客 836

PJSUA手册

其中在pjsip-apps/src/下的PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。它虽然只有很简单的命令行界面,但是功能齐全。 PJSUA手册 Pjsua是一个开源的命令行SIP UA(软电话),是PJSIP,PJNATH和PJMEDIA的实现。尽管它只是简单的命令行展现,但是它具有很多特性。 简介           S

smllyy的学习时间轴 4778

pjsip中添加视频

在sdp中添加视频信息 在Invite消息的sdp中添加视频信息sdp信息中视频的rtp端口的生成 视频处理模块的添加视频收发以及回放 rtp发送Rtp接收远端视频回放本地视频回放 视频工作线程 发送线程接收以及回放线程 1.                   在sdp中添加视频信息 添加sdp信息中的视频部分主要通过下面两个步骤处理。 1.1

qyjandroid的专栏 2179

整合第三方媒体栈到PJSIP2.x的PJSUA-LIB

对PJSUA-LIB中媒体定制处理在应用中有实际意义,例如:在安卓5.x系统下,硬件编解码、视频预览等功能已被安卓封装的极其方便易用(被封得也很死),且硬件解码设置时同时设定渲染设备的surfaceview,解码后会自动渲染。视频效果很好,且不易受界面线程影响。视频预览、硬件编解码在安卓方实现,编码后的h264媒体流,在定制后的PJSUA-LIB中RTP封包后,调用媒体传输端口的send_rtp功

北京老向 blog 1888

DTMF采用RFC2833进行带内传输的实现

摘要:    本文主要说明采用RFC2833标准进行DTMF传送的方法和格式。关键字:RFC2833,RTP,DTMF 一.IP电话传送DTMF的方式       DTMF就是双音多频,我们日常生活中拨打电话的过程中经常会用到,如拨打用户的分机号码,输入帐号和密码等。而随着IP电话的大量使用如何实现传送DTMF成为IP电话中的一个技术问题。目前传送DTMF信号普遍有两种方式

lihao_ningxia的专栏 1万+

PJSIP学习笔记15 -- PJSUA应用程序中的会议桥

aaaaa可以使用PJSUA程序控制台命令cl来查看系统中的conference_port未拨打电话时,如下:Port#00[24KHz/20ms/1] Master/sound transmitting to: Port#01[24KHz/20ms/1] ringback transmitting to: Port#02[24KHz/20ms/1] ...

twd_1991的专栏 3684

Pjsip笔记之pjsip使用示例

学习一个程序,最希望的就是有个demo,通过demo的API调用逻辑,跟踪程序的执行过程,了解里面的设计。 Pjsip一个最简单的示例就是simple_pjsua.c,位于:pjsip_apps/src/samples目录下。不到200行的代码。却演示了pjsip初始化到拨打电话和挂点电话的API调用逻辑。 主要的逻辑在main函数中: pjsua接口使用时,需要创建、初始化、开始和销毁

croop520的专栏 1万+

VOIP DTMF inband 原理与实现方法

本文来自 csdn ucser,    http://blog.csdn.net/perfectpdl   转载注明出处,谢谢! DTMF 叫多音双拼,也叫二次拨号, voip 承载dtmf 有三种方法,inband, rfc 2833(最新rfc 为4733,ims里面引用),和 sip info 方法。 inband方式是把按键产生的buffer放到语音rtp流里面一起传输而不

RTC hacker 5218

PJSIP简介配置和PJLIB基础库的使用

PJSIP实现是为了能在嵌入式设备上高效实现SIP/VOIP. 1.PJSIP库的主要特征: 1).极具移植性.(Extremely portable)    当前可支持平台包括:    * Win32/x86 (Win95/98/ME, NT/2000/XP/2003, mingw).    * arm, WinCE and Windows Mobile.    *

tianyu的专栏 - Linux site:blog.csdn.net/wishfly 1万+

Dialog 三种退出方式的回调分析

AlertDialog三种退出方式到底做了什么?

Mupceet 1万+

pjsip demo 完整案例

pjsip demo 完整案例 【下载地址】pjsipdemo完整案例 这是一个基于pjsip的完整开源案例,展示了从初始化、注册、建立通话到挂断通话的全流程。pjsip作为开源的SIP协议栈和媒体框架,支持语音、视频和即时消息等多种功能,广泛应用于跨平台开发。本案例经过内部测试,确保实际可运行,旨在帮助开发者更好地理解...

gitblog_06725的博客 501
上一篇: PJSIP在线程中调用出现提示注册线程pj_thread_register的解决方案
下一篇: PJSIP简介配置和PJLIB基础库的使用
sunjianjun1981
博客等级 码龄18年 73粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值