- 博客(31)
- 收藏
- 关注
原创 2024-6-4Tuesday wireshark的bug,回放sip通话音频失败
3 在过滤器中输入过滤条件: udp.port==端口号,就可以把该通电话的rtp包筛选出来(有可能其他使用相同端口的通话的rtp包也会筛选出来,根据通话开始时间可以排除其他通话)有的时候,通过菜单 电话-voip通话找到电话后,点击 play streams 按钮,无法出现音频波形,也无法播放,这是wireshark的bug。1 通过菜单-voip通话,在列表中找到感兴趣的通话,双击它,就可以在主窗口中定位到该通话的invite包。2 展开invite的sdp,找到rtp协商端口。
2024-06-04 09:42:12
174
原创 2024-3-1 Fri 坐席websocket支持ipv6
1 tlagcgwn AgcGWCore.cs 的initSocket方法中调用startListen时,传入的IP地址,由 0.0.0.0 改成 [0:0:0:0:0:0:0:0]2 坐席网页登录时,服务器IP地址 要填入 [fe80::207:3eff:fea5:4ac1]:5678。其中中括号里面是tlagcgwn所在服务器的IPV6地址,中括号后面要跟冒号和端口号。
2024-03-01 16:40:59
170
原创 20240301Friday ping服务器,把结果写入文件(带上时间戳)
很奇怪,用 ping+awk加时间戳,再重定向到文件,文件是空的。上面的命令,中断ping之后,123.txt文件为空。
2024-03-01 15:47:49
165
原创 2024-1-18Th 绑定进程占用的cpu(设置cpu亲和力)
下面的命令设置进程freeswitch只在1-4号cpu上调度。taskset在 util-linux包里面。
2024-01-18 12:31:29
419
原创 2024-1-9 Tu 查询mysql数据库。报告异常 the given key xxx was not present in the dictionary
在客户的服务器上,tlse执行脚本的sql查询时,报告这个错误,在sql客户端里面查询不报错。在我们自己的服务器上执行脚本也不报错。百度之,需要在连接数据库的字符串里面添加 charset=utf8。
2024-01-09 11:25:57
557
原创 2024-1-7Sun 获取当前时间戳(从格林尼治时间1970-1-1 00:00:00到现在的秒数)
【代码】2024-1-7Sun 获取当前时间戳(从格林尼治时间1970-1-1 00:00:00到现在的秒数)
2024-01-07 17:52:26
398
原创 2023-9-15Friday freeswitch启动报告 sofia-internal-ua 启动失败
上次遇到过,如果 sip_profiles/internal.xml 中启用了 tls-cert 但是其指向的目录并不存在,就会报告 这个错误,说端口被占用或者IP地址不是本机地址。fs启动时报告sofia-profile-internal 启动失败,因为192.xxx.xxx.xxx:5060被占用。如果这些端口已经被其他进程占用,fs启动时也会报告时5060被占用。今天再次遇到,最终搜索网页发现,是因为 ws 的端口被占用了,也是在 internal.xml 中的配置项。就会在控制台日志窗口看到。
2023-09-15 14:44:41
307
原创 2023-7-6Th 百度飞桨tts测试
得到合成的声音文件,但是比较慢,这么短的文本都要好几秒,而且是配置比较好的服务器(40核心志强,64GB内存)。飞桨的文档也说了,cpu模式比较慢,需要GPU模式。但是那又要配置高级显卡。4 到飞桨speech开源站点(gitee),按照安装说明,用源码方式安装。3 apt 安装 build-essential(需要gcc)1 到飞桨官网,根据安装文档的指示,从百度拉取飞桨基础镜像。合成的效果还不错,比讯飞离线版自然多了。4 安装最后报了个错,但是不影响使用。2 启动镜像,进入容器。使用docker模式。
2023-07-06 21:03:05
335
原创 2023-7-4Tu 使FS事件中都带上所有通道变量 呼叫分机产生2个呼叫的原因
1 fs有的事件会携带全部通道变量,有的事件则不是。在 switch.conf.xml 里面有一个配置项 搜索 verbose-channel-events 默认为no并且被注释掉了,取消注释并配置为yes,重启fs即可使所有的事件header中都包含所有的通道变量。2 昨天测试发现,外线呼入转坐席,中间件命令fs呼叫坐席分机,fs却呼叫了两次,导致tlcardfs收到2次呼出事件,混乱了。原因是fs里面有该分机的两条注册记录。
2023-07-04 08:25:05
51
原创 2023-7-1Sat c++的 std:string::c_str()
因为返回string的函数,返回的string对象是一个临时对象。随时可能被销毁,ptr是不可靠的。返回的 const char* 指针, 当string对象离开变量作用区之后,指针就无效了。
2023-07-01 08:49:04
79
原创 2023-6-30Fri Freeswitch stop_record_session的bug
重复静音的时候,通过esl_execute 执行stop_record_sesion,传递的文件名如果是空字符串(即长度为0),可能freeswitch的esl_execute对空字符串进行了优化或者处理,传递到 stop_record_session执行函数的时候,这个空字符串变成了NULL。其次,tlcardfs也没有。静音需要断开外线与坐席的通道连接,然后停止录音,即 stop_record_session. 然后把 保存在通道结构里面的录音文件名清空。首先,tlccs没有做重复静音的拦截。
2023-06-30 15:29:33
220
原创 2023-6-16Fri ALaw,uLaw,16bitLinearPCM格式互转的c和c#代码
【代码】2023-6-16Fri ALaw,uLaw,16bitLinearPCM格式互转的c和c#代码。
2023-06-16 21:57:55
223
原创 220915浏览器网页失去焦点后,定时器被降速
javascript脚本里面通过定时器,每秒钟向服务端发送一次心跳包。在网页失去焦点5分钟后,定时器降速,服务器每分钟才能收到一次心跳,如果判断时间门槛低于1分钟,就会误判客户端心跳丢失。firefox chrome edge都是这样做的,在网页失去焦点大约5分钟后,定时器被降速为1分钟触发一次。
2022-09-15 11:14:04
358
1
原创 2022-8-9 国产cpu架构(arm)上的nload
启动 nload,如果系统有多个网卡,它可能显示一个没有启用的网卡,流量都是0,可以指定网卡,nload 后面直接跟网卡名称就行。需要监控网络流量,linux上的工具是 nload , 在鲲鹏cpu+银河麒麟OS上,可以尝试用。ncurses库比较新,configure可以猜出系统的架构是arm,不需要手工指定了。但是如果报告源无法访问就只能自己编译了。...
2022-08-09 08:10:07
688
原创 避免linux上端口长时间处于 syn_wait1状态的办法
客户端连接到服务端后,如果服务端要关闭连接(tcp),会向客户端发送close,客户端应该回复ack,如果客户端不回复ack(网线断),那么服务器上该端口会处于syn_wait1状态,默认的时间长度大约3分钟。如果服务器上重新启动程序,监听这个端口就会失败。本命令修改了/proc/sys/net/ipv4/tcp_orphan_retries这个文件的内容。默认是0,linux会重试8次,指数退让后总时间很长,改成3次就会把时长缩短到2-3秒钟。...
2022-07-19 21:39:28
603
原创 使用openssl工具生成自己的证书中报错的处理
自己创建SSL证书的步骤1 输入openssl命令,进入openssl(1)开始生成CA证书执行完成之后会生成ca-cert.pem文件(2)生成server证书执行完成生成server-cert.pem文件(3)生成client证书,与服务器生成证书差不多到此CA证书、server证书、client证书全部生成完成,导入对应的服务器或客户端则可以正常使用了在创建证书的时候,可能会报告错误:解决方法:修改 /etc/ssl/openssl.cnf 把包含的行都注释掉,即可。...
2022-06-11 10:33:17
1683
原创 freeswitch给通道变量赋值
使用set 或者 uuid_setvar如果是在呼出的时候指定,可以在originate命令里面指定,格式:在中括号里面指定,注意中括号要放在大括号的后面,不能放前面,否则originate命令会失败。
2022-06-06 12:26:32
505
原创 freeswitch的变量与事件
最近需要在esl中设置某些通道变量。然后由其他的esl客户端程序读取这些通道变量。一开始以为通道变量都会出现在事件的header中,但是测试中发现并非如此,比如 CHANNEL_CALLSTATE事件中就不会包含用户自己设置的channel variable, 不过这些变量实际上已经设置成功了,可以通过 uuid_gervar 这个api命令来获取。编码验证,在收到事件的时候,使用下面的代码:得到的输出如下:与设置的通道变量值一致,说明该变量已经存在,并且可以获取,只不过在CHANNEL_CALLS
2022-06-05 20:32:28
750
1
原创 windows10 freeswitch soundtouch 变声
1 soundtouch默认编译为静态库,项目属性的c/c++代码生成里面的运行库选项是 多线程调试MTd,但是mod_soundtouch的对应选项是多线程调试Dll:MDd,不兼容,需要把soundtouch的预编译选项改成“多线程调试DLL”2 sountouch编译结果是 SoundTouchD.lib ,需要把这个库名设置到 mod_soundtouch项目的链接输入库里3 mod_soundtouch的 mod_soundtouch.cpp文件里面声明SWITCH_MODULE_DEFIN
2022-05-06 15:42:28
842
原创 freeswitch+soundtouch 变声测试失败
在ubuntu18和centos7.9上都测试了。编译了mod_soundtouch模块(先安装了 libsoundtouch-dev模块)。呼叫两个分机通话(originate user/1005 &bridge(user/1003),正常,然后启动soundtouch(api命令: soundtouch call-uuid start 0.3p) 听不到变声后的效果,只有滋啦滋啦的噪音,用 soundtouch call-uuid stop命令可以恢复正常通话。...
2022-03-28 11:17:54
346
2
原创 人大金仓数据库.net core 开发接口
官网下载 ndp.rar 解压得到 kdbndp.dll 官网称支持,net core 3.0,实际测试,在3.1下也可以正常工作,配合dapper没问题。官网可以下载安装包,试用90天的授权文件。默认安装,用户名SYSTEM 端口号54321连接字符串范例:Server=127.0.0.1;User Id=SYSTEM;Password = tongli2004; Database = SAMPLES; Port = 54321;管理工具:数据库对象管理工具,还没有弄明白怎么切换当前数据库。
2021-05-31 19:51:15
1233
1
原创 websocket坐席,跨页面使用
客户要求在弹出的子页面中调用tlwsa呼出。因为我们的demo只是为单页面的情绪写的,所以不能直接用,要改造。1 首先,唯一的tlwsa对象,不能放在TLWSADemo.js里生成了,要放在主页面webSocketAgent.html里面生成。2 在新页面中(假设新页面是在webSocketAgent.html里用window.open打开的),通过 window.opener.tlwsa得到唯一的tlwsa对象。(这个其实就是在页面之间传递/共享对象/变量)在子页面中,这样写:<scrip
2021-04-28 16:17:31
595
原创 今天遇到的freeswtich问题。FS的日志还有提升空间
今天测试freeswtich呼叫。先后遇到多个问题。先是sip包被联通光猫路由器拦截,把5060端口改成其他端口后解决。使用vpn,修改sip_profiles/internal.xml 和 external.xml ,让fs监听在vpn的虚拟ip地址上。呼叫就不行了,呼入一通就断,呼出也是被叫应答即断。(一开始甚至怀疑是不是不能使用vpn的虚拟地址)。wireshark抓包,发现在应答200OK后,FS主动发送bye,原因码是DESTINATION_OUT_OF_ORDER,这个有误导性,以为是被叫的
2021-04-26 15:26:31
1037
原创 折腾交叉编译
源起:1 需要把cc中间件移植到国产架构服务器上,即arm64+银河麒麟2 需要提供tts,使用科大讯飞的离线tts科大讯飞的离线tts的sdk默认不提供arm上的版本,需要向科大讯飞申请,申请单需要注明编译arm上sdk的交叉编译器具体的版本(其实飞腾+麒麟,鲲鹏+麒麟,都已经有本地arm64的g++编译器了,但是科大讯飞依然要求提供交叉编译器,这个也合理,毕竟科大讯飞可能暂时也不想购买各个型号的国产架构服务器,提供交叉编译器,那么他只需要在x64架构的linux上编译就行了)先从linaro.o
2021-04-02 22:34:46
485
原创 .net core项目:添加包之后,增量部署时,除了新增包的dll文件及其依赖的dll文件,还要把项目的 deps.json文件更新过去
否则会报告找不到dll.net core项目添加包之后,增量部署时,除了新增包的dll文件及其依赖的dll文件,还要把项目的 deps.json文件更新过去。否则会报告找不到dll。
2021-03-30 19:38:54
379
原创 freeswitch-esl 呼出结果的判断
esl客户端(tlcardfs) 在判断呼出结果的时候,是在收到park事件后判断的,配合拨号计划,拨号计划里面匹配呼出接通后,通道park,esl-client收到park事件,判断通道的方向是outbound,就认为呼出接通了。但是这里有一个漏洞:因为呼出的时候,可能对呼出通道做bridge,例如坐席呼叫外线,坐席为了听回铃音,会bridge,而控制变量park_after_bridge又被设置为true,所以如果外线振铃的时候,坐席主动挂机,那么呼出的通道也是会park。这种情况下,程序会误认为呼出成
2021-03-30 11:22:19
1520
原创 快速启动一个HTTP server
python内置了一个httpserver。所以先安装python,然后到cmd,cd到网页文件所在的目录。如果python版本是 2.x,输入命令 python -m SimpletHTTPServer 8000 &如果是 3.xpython -m http.server 8000 &然后就可以在网页浏览器地址栏输入http://127.0.0.1:8000访问 index.htm 了。...
2021-03-14 20:48:55
450
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人