朱东宁的专栏

SIP协议栈,语音技术,IVR,Call Center,内存数据库

排序:
默认
按更新时间
按访问量

无锁:高性能录音系统根本性改进

当并发呼叫增加到1千以上(交换机端口镜像过来的流量达150M),含多种语音编码时(如g711A、U和g729等),录音系统性能出现下降,如丢录音,丢包,卡顿甚至崩溃等情况。 经过彻底改进和优化,录音系统运行非常顺畅,可以长时间稳定运行而不会丢失任何数据。 下面记录一下改进的关键部分。 1、抓...

2018-09-19 11:33:22

阅读数:34

评论数:0

改进后的电话语音机器人

拙文“更聪明的电话语音机器人”解决了电话语音机器人的两个痛点,即模糊识别和关键词配置,但从实际的效果看,关键词(词槽)配置还是简单了一些,实际应用需要将词槽串接起来。经过改进后的例子如下: cfg = """ {   "i...

2018-08-06 16:12:26

阅读数:67

评论数:0

编程两得

1、dll导出函数,不可用stdcall: 最近写了个Dll,同时编译了64位和32位版本,64位一切正常,32位版本有问题。调用程序使用动态加载方法,GetProcAddress()定位函数地址总是返回NULL。后来发现导出函数名不应该使用_stdcall描述。 错误:extern &...

2018-07-22 17:34:18

阅读数:46

评论数:0

更聪明的电话语音机器人

有人说AI应用最重要的是工程实现,而不仅仅是算法,诚哉斯言。电话语音机器人目前应用最多的是电话营销,我接过几个这样的电话,挺傻的,基本听不懂人话。我也见过一些所谓的电话机器人界面,配置十分复杂,每个关键字要配置一个节点,存储到数据库,运行的时候关键字匹配,需要在数据库里做上百个sql查询,查来查去...

2018-07-14 12:37:22

阅读数:146

评论数:0

SIP服务器提供REST格式的API并新增分段录音

底层的API要用较为复杂的状态机,开发起来有一定难度。REST即Http+Json方式,相对容易集成。新增分段录音,即在录音时进行VAD(活动语音检测),检测到开始说话,上报一个消息,说话中检测到足够长的停顿,再上报一个消息,并另起一个新录音文件。分段录音应用于智能交互(AI),侦听到说话可打断正...

2018-04-08 16:54:24

阅读数:147

评论数:3

徒劳的择校——小学择校的科学分析

为了上个心目中的好小学,家长们空前焦虑,有钱的买学位房孟母三迁,没钱的租房,甚至托关系找中介,学校皆有价,世路难行钱作马,让我们这些程序员家长要熬夜写多少代码。。。 可惜,这个钱花冤枉了,本文将证明,上什么小学是一样的。 当然,我会加一个重要条件:同一体制下的公立小学。如果不同机制...

2017-09-10 11:00:08

阅读数:178

评论数:0

使用谷歌浏览器内核控件DCEF3拦截弹出的新页面到新标签页

DCEF3控件TChromium有个事件OnBeforePopup,我们可以在这个事件函数里加上自己的逻辑,最后一个参数是返回参数bool &Result,置为true表示自己来处理,置为false表示使用默认行为,即弹出一个新的窗口。 对于构造多标签页浏览器,我们的应用逻辑是在...

2017-05-20 15:03:53

阅读数:1097

评论数:0

IP录音增加对H248即MEGACO协议的支持

传统的媒体网关设备的控制协议是基于H248即MEGACO协议,这个协议和SIP协议不一样。 而且,H248的底层传输协议一般采用SCTP协议。这给IP录音软件开发带来了挑战。 实现思路: 1、最大限度兼容原有录音系统结构,使用原有的SIP机制;MEGACO消息中的Context值相当...

2017-04-18 12:14:08

阅读数:683

评论数:0

关于Linux下的高精度定时器

操作系统的默认定时器的精度是很低的,比如在windows下调用Sleep(20)延时20毫秒,实际上80毫秒都可能。 做媒体服务器,免不了需要高精度的定时器,比如语音会议,需要很精确地每20毫秒进行一次混音并通过rtp发送。 我们的媒体库原来只在windows下实现,使用了windows写的高...

2017-03-20 10:16:01

阅读数:837

评论数:0

在C++Builder6中使用DCEF3嵌入谷歌内核浏览器

历史原因,我有个客户端程序是使用BCB6写的,里面使用了CppWebBrowser控件,众所周知,这个控件使用的是IE内核,对HTML5的兼容性太差,面临很多问题,有些问题甚至即使改注册表将内核版本强制使用为IE11也解决不了。于是寻找Chrome内核的嵌入使用。 一开始走了不少弯路,想直接使用C...

2016-12-19 18:28:09

阅读数:1471

评论数:4

C++动态配置的实现

先说一下需求,是在做录音系统中遇到的:录音文件名需要生成唯一的字符串,这个串一般由主叫号码、被叫号码、日期、时间等加上下划线作为分隔符组成,但出于兼容性考虑,某些用户希望能按他们自己的顺序来构成文件名。 除了文件名,录音文件存放路径也需要动态的配置,比如: 基础路径/日期/ 或: ...

2016-11-12 23:04:25

阅读数:571

评论数:0

纯软的SIP语音服务器API

以前的语音服务器如呼叫中心、IVR等应用,一般是用语音板卡完成,如三汇和东进的数字卡,模拟卡。如今软交换是趋势,有的运营商甚至可以提供基于IMS的sip中继,再使用语音卡就不合适了。纯软的语音系统,部署起来也简单,只要弄一台普通的PC或服务器就可以,录音也存放在该机器上。 我们自己开发的SIP...

2016-04-20 10:05:29

阅读数:3104

评论数:19

旧作:民科的一个样本--反重力和引力波董长军师傅

最近引力波“诺贝尔哥”郭树森红遍网络,此人乃典型民科。我翻出2007年写的一篇旧文,题为“民科的一个样本”,讲述一个汽车司机出身的民科董师傅的故事,董师傅也是“引力波”的大玩家,人家还得到政府资助呢。本文当年投给方舟子,以bluesen笔名发表在新语丝网站上。自以为生动有趣,重贴以博大家一笑。

2016-03-01 15:58:45

阅读数:1098

评论数:0

跨平台、高性能的媒体转发服务器实现

最近实现了一个媒体转发服务器,代码可以编译成windows(64位或32位,可以编译为service),Linux,Mac OS X等多种平台。 sip客户端一般是躲在内网,要跨nat如果采用stun一类的技术,除了客户端麻烦外,需要部署stun服务器,而且不能解决所有类型的nat,最佳解决方案是...

2016-01-23 17:54:57

阅读数:2334

评论数:2

如何实现一个voip录音系统

如何实现一个高效率的voip录音系统? 采用了无锁缓冲区--环形队列。 sip消息处理和rtp包处理采用独创的写锁和读锁。

2015-07-18 11:27:51

阅读数:4378

评论数:3

我实现的内存数据库JDBC驱动

我去年做了个内存数据库,自以为功能很强大。内存数据库是独立运行的程序,客户端通过socket访问,传送SQL语句并得到结果,为此我提供了一个C接口的客户端API。 但如果要做到更好的通用性,必须照顾IT世界数量最多的两类人:java程序员和c#程序员。c#我的同事封装了ado.net驱动。这几天我...

2015-05-08 17:41:48

阅读数:1423

评论数:0

使用线程间通信之条件变量

最近用C++写安卓下的一个通讯程序,作为jni库给java调用,采用多线程轮询遇到一个问题描述如下: A线程收到数据,放入队列,是生产者。 B、C、D若干个线轮询训消息队列,如果队列有数据就取出进行处理,没数据就Sleep(T)休息,问题是这个T值取多大合适?取大了消息处理不及时,取小了手机cpu...

2014-09-29 21:31:38

阅读数:2309

评论数:0

移动4G初步使用感觉

  我是移动全球通的最早用户,原先的套餐90多元,很多免费话费,免费短信,用不完,浪费严重。我还有电信的一个133号码,也送很多话费和3G流量,也基本用不完。原先是一机双卡,携带固然方便,但打电话、发短信经常不知道该用哪个号码,因此原本就有独立两个手机的打算。 到移动营业厅换了一个4G...

2014-04-08 10:29:58

阅读数:1120

评论数:1

光大证券毁在一个笨蛋程序员手里

好端端一个大型证券公司,无端端就毁在一个笨蛋程序员手里。 美国人说一个优秀程序员顶20个普通程序员,我要说一个坏程序员顶200个好程序员,当然是他的破坏性。

2013-08-31 13:18:08

阅读数:3916

评论数:9

多进程互斥对象排队

写了个操作硬件端口的程序,会被5个进程调用,但硬件端口在同一时刻只能被一个进程独占调用。 最简单的方法是通过操作系统提供的互斥对象:   // 获取互斥标志 int WaitProcessIdle() {   while(1){       _processHd = CreateMu...

2013-04-21 20:46:22

阅读数:2080

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭