自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

朱东宁的专栏

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

原创 画面中定位汉字串的外轮廓

我们做的项目需要匹配两张图片,比如机顶盒输出的视频,设置的菜单画面有很多汉字,并不需要认出这些汉字,通过标注汉字串的轮廓,对比两张图片的轮廓位置和大小,就可以判断画面相似度,进而判断当前处于哪个菜单。 那么,如何定位这些汉字串的轮廓呢? 请看原图: 最容易想到的方法是先使用opencv的...

2020-06-01 20:17:15 50 0

原创 大规模sip信令存储、查询和实时跟踪的实现

15年前运营商的核心网还是七号信令(SS7),那时候的信令采集、监控和检测系统还很落后,基本上就是给交换部门一个实时跟踪呼叫的工具,如果需要查询历史信令,很麻烦,需要倒库,查询速度超慢。当时一个朋友想挖掘呼叫的数据,于是我在本地网已经收敛好的信令上,做了一个信令采集、存储和快速检索系统,性能远超当...

2020-05-10 15:23:01 79 0

原创 如何实现单机大规模并发SIP语音呼叫?

锁定目标:单机5千 多大叫大,1千还是1万?好吧,暂定为5000或以上。带宽不够?千兆网。硬盘太慢?SSD。 本文不考虑IO的限制,只讨论结构和模式。 开源世界Voip领域最响亮的牌子应该是FreeSwitch,使用者众多,它能实现如此大规模的单机并发吗?我认为:不行。 为什么不行?因为它...

2020-03-11 16:55:13 178 0

原创 程序员如何辅导儿子做数学?

靠山吃山,当然是借助编程了。 我家的孩子上小学三年级,比较喜欢数学,课外在深圳上学而思的创新预备班。去年寒假开始我教他学习C语言编程,每天1个小时左右,说是教,其实大部分时间是他自己看大部头的《C Primer Plus》,也算是半自学。每天在我给他的旧13寸MacBook Pro上用VS Co...

2020-02-20 14:48:26 236 0

原创 GSM音频编码的优化和写入wav文件

GSM是voip中较为常见的一种编码,压缩率比很高,写到wav文件每秒只占用1.6k字节(接近于g729),是普通g711格式的五分之一,对录音来说可节省大量磁盘空间。生成的wav文件,可能是不牵涉到专利的原因,在各种操作系统下都能够播放。 1、使用IPP的codec GSM的编解码通常使用开...

2019-12-24 14:33:10 182 0

原创 录音程序移植到Linux心得

我曾经写过一篇文章“如何实现一个voip录音系统”,后来还描述了持续改进的思路,但该程序只支持64位windows环境,现在很多主流的软交换--如常见的Asterisk、vos等--都运行在linux下,移植到Linux很有必要,很多情况下可以不用交换机镜像就进行录音。 程序是使用C/C++开发...

2019-11-25 11:22:44 91 0

原创 使用ipp静态库,ipp-samples在linux下的make过程

折腾了两天终于搞定,现在把折腾的过程记录一下。 1、先安装ipp8,运行install.sh进行安装,安装过程选择评估版,因为我们也只是需要它的库,使用并不影响。 2、安装cpp_studio_xe_2013_sp1_update2,和1一样,运行install.sh,比较简单。 ----我...

2019-11-21 15:46:40 152 0

原创 移植C/C++到嵌入式Linux下程序崩溃的问题

最近将自己开发的SIP协议栈移植到ARM芯片下的嵌入式Linux,遇到一个奇怪问题,这篇小文简要记录解决过程。 相同的代码在windows下、CentOS Linux下都正常,交叉编译到ARM芯片的64位Linux下总是崩溃,估计堆栈、内存被破坏,用Valgrind没办法定位到具体的出错位置。经...

2019-08-06 16:28:33 121 0

原创 感觉好极了----MacBookPro15苹果笔记本外接4K显示器

作为一个中年程序员,视力越来越差,于是不惜血本加了一个4K屏,效果很是不错。 我的本本是带Touch Bar的15寸MacBook Pro,Type-C,带4个接口: 装了个虚拟机Parallels Desktop 13for Mac,装了win10和CentOS 7,编程大部分时间使用w...

2019-06-14 16:42:04 14563 0

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

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

2018-09-19 11:33:22 265 1

原创 改进后的电话语音机器人

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

2018-08-06 16:12:26 213 0

原创 编程两得

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

2018-07-22 17:34:18 122 0

原创 更聪明的电话语音机器人

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

2018-07-14 12:37:22 435 0

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

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

2018-04-08 16:54:24 467 5

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

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

2017-09-10 11:00:08 285 0

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

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

2017-05-20 15:03:53 2139 0

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

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

2017-04-18 12:14:08 820 0

原创 关于Linux下的高精度定时器

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

2017-03-20 10:16:01 1885 0

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

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

2016-12-19 18:28:09 2596 4

原创 C++动态配置的实现

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

2016-11-12 23:04:25 963 0

原创 纯软的SIP语音服务器API

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

2016-04-20 10:05:29 4803 37

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

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

2016-01-23 17:54:57 2720 2

原创 如何实现一个voip录音系统

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

2015-07-18 11:27:51 5711 3

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

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

2015-05-08 17:41:48 1501 0

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

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

2014-09-29 21:31:38 2606 0

原创 移动4G初步使用感觉

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

2014-04-08 10:29:58 1176 1

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

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

2013-08-31 13:18:08 4782 10

原创 多进程互斥对象排队

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

2013-04-21 20:46:22 2156 0

原创 如何对Intel IPP库进行静态链接

在多媒体codec方面,IPP库公认是高性能的库,而且价格也不贵,对发布也没什么限制。我们的客户强烈需要G729的codec,最近我尝试使用IPP库,效果确实不错。 不过最新IPP(v7.1)的全部运行时动态库多达85个,225M,如果每次发布都要带这么多dll,就算带来所谓的自动识别CPU并进...

2012-09-17 11:04:10 4569 2

原创 eyeBeam采用TCP传输的一个BUG

最近在给自己开发的SIP协议栈增加了TCP传输,需要找其他SIP客户端测试。免费的xlite版本只能使用UDP,但专业版eyeBeam可以指定UDP、TCP或TLS。 不知道eyeBeam使用的什么SIP协议栈,TCP存在下面的问题: 由eyeBeam发起呼叫,Invite是用TCP传输的...

2012-04-13 23:03:09 1921 0

原创 我的2011年终总结

老当益壮,继续热衷技术, 2011一如既往地搞技术,商业上不成功。 技术上做了: 1.sip协议栈和高性能媒体库。提供SDK方式和平台方式。 2.sip和三汇卡的结合。提供SDK方式和平台方式。 3.sip客户端。提供SDK方式和平台方式。 4.改进的语音识别引擎。SDK方式。 5...

2011-12-31 17:55:19 1174 1

原创 对一篇预言的评论

英国资深IT技术记者Tim Anderson,写了一篇文章:Flash,Silverlight,Win32:2011三大垂死平台 http://news.csdn.net/a/20111128/308166.html   我的评论: 作者就是个大嘴。不过还算诚实:“在Microsoft发布...

2011-11-28 12:50:16 768 0

原创 通俗易懂介绍sip协议和媒体库

1. 信令和媒体    和7号信令或ISDN PRI信令一样,SIP只是控制会话的信令协议。    让我们先看看传统的电话信令,电话和信令在E1电路上传输。每个E1有32个时隙(0-31),每个时隙的带宽是64KBPS,整个E1的总带宽就是64k×32 = 2048K,也就是

2011-10-14 19:02:42 4810 0

原创 实现了一个Full Proxy SIP服务器

简单的完成SIP客户端注册和消息转发到服务器,媒体流不必关心,由客户端之间直接rtp,这类服务器较容易实现,收费的产品如mixiSipServer(老外开发的,较为常见),我写的免费LxjSipServer(没有路数限制,无需安装,没有广告,在这里可以免费下载:http://ww

2011-09-22 11:29:34 2039 3

原创 院士选举,丑陋

这次中科院院士选举出了件大事。著名生物学家饶毅,第一轮就被刷下来了,他写文章宣布从此不再参选:从今以后不候选中国科学院院士 饶毅是牛叉人物,他作为通讯作者,曾在生命科学领域影响因子最高的著名学术期刊《Cell》发表过三篇文章,在英国《自然》杂志上发表过三篇,在同样是顶级学术

2011-08-21 09:57:57 4520 7

原创 蓝星际SIP协议栈和媒体库

开源的协议栈很多了,为什么我要写一个新的协议栈呢?开源协议栈复杂,效率低下。因为他们试图面面俱到,有点协议栈还试图兼容或转换H323。没有一个简单的。在我看来,要搞明白一个开源协议栈内部的构造并加以灵活应用,并不比我从底层开发一个新的适应性强调协议栈来的容易。再说,我喜欢自造车轮

2011-07-20 13:26:41 2504 0

原创 写软件的眼光看装修

我那年轻妻子充满想象力,是个追求完美的人,最近被装修弄得痛苦不堪(注:我也是)。她设计了家具的颜色,木地板的颜色,客厅的颜色,主卧的颜色,儿童房的颜色,厨房的颜色,洗手间的颜色。她精心将阳台设计成一个地板为榻榻米的书房,在大客厅也设计了整整一面墙的书架,让我的书有安身立命之所。她还设计了4个衣柜,...

2011-06-17 11:49:00 1034 0

原创 微软和WebSocket有仇?

<br />--微软IE9为啥还不支持WebSocket等HTML5特性<br /><br />呼叫中心的座席客户端和网页的结合,一直是个麻烦事。因为服务器经常会主动给客户端发送消息,如来电弹屏。一般办法要么客户端内嵌浏览器,要么制作一个OCX控件,OCX控件只...

2011-04-11 16:07:00 6077 5

原创 CTI中间件产品有前途吗

<br />整个CTI市场都日暮西山,何况中间件产品?<br /><br />不看好的原因有:<br />1.CTI原本是为电话语音而设计的,现在互联网深入人们的生活,获取信息的渠道更多更方便,语音通信萎缩了。技术的发展方面,SIP一定会占据主流,其...

2011-03-23 12:45:00 1229 0

原创 乱世女英雄--评程序员先驱霍珀

年轻时看《三国演义》,群雄纷争,豪杰并起,看得热血沸腾之时,常常掩卷慨叹,为啥我没有出生在这样的年代? 要是自己“有幸”躬逢乱世,搞不好也是个刘备曹操孙权,最不济也能是个周瑜或曹操下面的谋士。因此有人总结出老不读三国,就是怕老了还雄心勃起,躁动不安。 最近一口气读完《优雅人生--格雷斯.霍珀和...

2011-03-05 13:42:00 2047 0

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