- 博客(412)
- 资源 (19)
- 收藏
- 关注
原创 Sipp 读取 WAV 文件格式要求
SIPp 支持两种形式的音频文件:1. **WAV 文件** - 但只是跳过 WAV 文件头,**不进行任何格式转换**2. **裸音频数据文件** (raw samples)关键点:无论是 WAV 还是裸数据,音频数据本身必须已经是编码后的格式。
2025-12-16 17:43:32
288
原创 AI 生成的FreeSWITCH 呼出流程深度分析freeswitch-1.10.12.-release
| |<--200 OK--------| (先应答)|<--ANSWERED----------------------------| (获胜) ||--返回Peer2----------->| | |**文件位置:** `src/mod/applications/mod_commands/mod_commands.c:5080`
2025-12-08 20:00:00
607
1
原创 Ubuntu 上编译安装 SIPp 3.7.5
SIPp 是一个广泛使用的 **SIP 协议压力测试和功能测试工具**,支持 UDP、TCP、SCTP、TLS 等多种协议。本文以 **Ubuntu 系统** 为例,介绍如何从官方源码安装 **SIPp 3.7.5**,并解决常见编译问题。
2025-11-25 16:55:02
368
原创 Cursor 使用记录:C/C++ 开发者
Cursor 不只是一个 AI 编辑器,它是 VS Code 的“强化版助手”。在底层开发中,它能:快速解释复杂 C 逻辑;自动生成注释与声明;辅助调试 ASan 报告;帮助优化内存与性能问题。
2025-11-15 00:00:00
1040
1
原创 Linux C 文件操作系统调用
是最基本的 I/O 接口;提供元信息与控制;结合锁与同步机制,可构建高可靠的文件系统操作。掌握这些系统调用,是深入理解 Linux I/O 模型(如异步 I/O、epoll)的前提。
2025-11-06 06:00:00
671
原创 POSIX 文件锁机制
POSIX 文件锁是 UNIX 系统中最基础的进程同步机制之一。它:灵活可配置;提供区域锁定;但需要各方遵守锁协议。多进程同时访问数据库或索引文件;日志轮转或状态文件更新;与flock不兼容的跨平台程序。分布式文件系统(NFS、CephFS等);线程级同步(应使用 pthread 互斥锁)。
2025-10-28 22:00:00
721
原创 Ceph 简介
Ceph 是一个功能强大的分布式存储系统,具有高可扩展性、高可靠性和多种存储模式。无论是云存储、大数据、虚拟化还是高性能计算,Ceph 都可以提供高效的存储解决方案。虽然它的部署和管理可能会有一定的复杂性,但对于需要处理大规模数据存储的企业和组织,Ceph 仍然是一个值得考虑的优秀选择。
2025-10-23 21:00:00
743
原创 Linux /etc/fstab 文件 —— 文件系统自动挂载的核心配置
优点注意事项启动自动挂载,系统管理更自动化配置错误可能导致系统无法启动统一定义磁盘和网络文件系统建议先用测试支持 UUID/LABEL 提升稳定性使用_netdev处理网络挂载。
2025-10-15 08:00:00
977
原创 天气API
杭州的天气见鬼了,热死在秋天里。如果我们想要获取天气信息,怎么办?可以通过的免费 API 获取并显示一个城市的天气统计数据(温度、湿度、气压、天气状况等)。
2025-10-10 16:45:27
370
原创 使用 C++ 开发 Vim 插件
Vim 的插件开发通常用或者,但有时我们希望利用来完成复杂功能,例如代码分析、语法检查、文本处理等。实现方式一般是:用 C++ 写一个可执行程序;Vim 插件通过system()调用这个程序;捕获结果并展示。这样就能把。
2025-09-25 17:00:02
450
原创 Cursor 编辑器:面向 AI 编程的新一代 IDE
Cursor 是一款内置 AI 能力的代码编辑器,它基于 Visual Studio Code 开发,因此对开发者来说几乎没有学习成本。简单来说,它就是把AI 对话 + 智能补全 + 代码生成无缝集成进了日常开发环境。—— 把 AI 放在核心,而不是外挂。如果说 VS Code 是最通用的代码编辑器,那么 Cursor 正在尝试成为最聪明的代码编辑器。对于希望把 AI 深度融入日常开发的程序员来说,Cursor 值得一试。
2025-09-09 17:54:36
1964
2
原创 C/C++ 与 Lua 互相调用详解
Lua 是一门轻量级、嵌入式的脚本语言,常常与 C/C++ 结合使用。通过嵌入 Lua,可以让应用程序获得灵活的配置、脚本化逻辑和可扩展性。本文将介绍如何在,以及如何让。最后给出一个,可以直接编译运行。
2025-09-05 13:52:53
654
1
原创 GitLab 配置 Pipeline 的过程
build:编译、打包、镜像构建等。test:单元测试、集成测试、代码质量检查等。deploy:部署到测试环境或生产环境。GitLab CI/CD Pipeline 提供了一套强大而灵活的自动化工具,使得开发团队能够快速迭代、自动化测试和安全部署。配置的核心在于 .gitlab-ci.yml文件,通过合理设计阶段、任务和触发规则,就能搭建适合团队需求的流水线。无论是简单的编译与测试,还是复杂的微服务部署,GitLab CI/CD 都能满足需求。
2025-08-28 17:50:49
1124
原创 Linux file 命令
file命令是 Linux 下一个轻量但非常实用的文件分析工具,尤其在:不信任文件扩展名时批量检测文件类型时自动化脚本中过滤文件类型时都能发挥重要作用。
2025-08-15 08:00:00
538
原创 PBX Feature Code(功能码)
自定义拨号规则:在Dialplan中添加自定义功能码,如*400开启录音。权限与分组控制:针对特定用户或用户组开放/禁用某些功能码。功能扩展脚本:通过Lua、Perl、Python等脚本扩展Feature Code的功能逻辑。多语言支持:针对不同语言环境定制Feature Code的语音提示。上述配置实现拨打*400即可开启通话录音。Feature Code作为PBX系统中便捷高效的控制接口,大大简化了用户对复杂呼叫功能的操作流程。
2025-08-05 15:07:37
850
原创 雨中参观浙江受降纪念馆
这一场雨,从细如呢语,到倾盆如诉,仿佛是那段烽火岁月的注脚。走出馆门,我把伞撑开,带着敬意与沉思,在雨中缓步离开。那不是欢腾的胜利,而是沉默中的清算,是数百万同胞生命换来的最终对峙。照片里爆炸的一刻,火光如泪,桥梁断裂,却挺直了不屈的民族脊梁。天色阴沉,细雨如丝,打在伞面上发出轻微的“嗒嗒”声。雨声在寂静街巷中回响,仿佛是从远处历史深处传来的低语,引导着我缓缓走近这座记载民族苦难与抗争的纪念场所。穿过灰色石阶,雨点敲打着透明雨棚,水珠沿伞骨滴落,耳边只有风声与雨声,仿佛脚步都被这沉重的历史压得轻缓。
2025-08-01 16:37:42
184
原创 FreeSWITCH 中的 <macro> 实现机制
macro>FreeSWITCH 的<macro>提供了一种高效、可维护的方式来构建可复用的语音提示逻辑模块。对于构建复杂的语音交互系统,合理设计 macro 结构可以显著提升代码整洁性和复用性,是每一个使用 FreeSWITCH 的开发者都应掌握的重要工具。如果你正在自定义 voicemail 模块、构建 IVR 系统,建议深入学习 FreeSWITCH 的<macro>和<say>用法,并结合调试工具(如和fs_cli)跟踪执行流程,以达到灵活、精细控制语音交互的目的。
2025-07-29 10:01:10
383
原创 多台机器的vscode连接同一个SSH服务器冲突问题
有两台电脑: 笔记本和台式机作为客户端机器,GIT代码存放在服务器上,两台客户端机器同时通过vscode访问服务器上的GIT仓库。先配置的台式机一直工作正常。后配置的笔记本连接后,一直有冲突。
2025-07-18 01:00:00
603
原创 开源 SIP 协议栈介绍
Sofia-SIP 是用 ANSI C 开发的事件驱动型 SIP 协议栈,被广泛用于 FreeSWITCH 等通信系统中。PJSIP 是一套跨平台的 C 语言多媒体通信库,涵盖 SIP、SDP、RTP、ICE 等协议,适用于桌面和移动平台。reSIProcate 是由 SIPfoundry 社区发起的 C++ SIP 协议栈项目,具备较强的可扩展性和功能完整性。Kamailio 是基于 SIP Express Router(SER)的高性能 SIP 服务器项目,支持大规模分布式部署。
2025-07-08 16:13:14
1364
2
原创 _nta_incoming_timer 函数解析
在 Sofia-SIP 协议栈中,是一个核心定时器函数,用于处理。它不仅实现了 SIP RFC 中的多个关键定时器(如 Timer G、H、I、J、P1、P2、N1),还精细地管理了事务状态队列中的生命周期。本文将逐段剖析该函数,帮助你从源码角度全面理解 SIP 入站事务定时处理逻辑。
2025-07-02 11:00:01
815
原创 _nta_outgoing_timer() 函数解析
是 Sofia-SIP 中的定时器控制核心,负责管理出站事务的生命周期,符合 SIP 协议中多个定时器(A~K)的设计规范。理解这个函数有助于:调试 INVITE 重传、状态卡住等问题;分析 TCP 切 UDP 的连接降级行为;理解 FreeSWITCH 等基于 Sofia 的 SIP 实现内部事务状态机的实际运作。
2025-06-25 06:00:00
911
原创 SIP 协议中的定时器
名称默认值描述T1500msRTT 基准单位T24s非 INVITE 重传最大间隔T45s网络层最大响应延迟(用于完成状态)SIP 协议通过定时器机制补偿了 UDP 的不可靠性,同时也控制事务状态机的生命周期。理解这些定时器的定义及作用,对于调试通话建立失败、消息重传、事务挂起等问题具有重要价值。
2025-06-20 10:06:30
1206
原创 RTP MOS计算:语音质量的数字评估
MOS 是一个范围在1(差)到 5(优)MOS 分数感知质量描述5优秀无感知失真4良好稍有失真3可接受明显但可接受2差质量差,难以接受1非常差无法通信MOS 是 VoIP 语音质量评估中的关键指标。通过结合 RTP 参数与 E-model 算法,我们可以实现对语音质量的自动量化评估。在大规模部署或运维场景中,它能够有效发现通话质量问题,并提升用户满意度。
2025-06-12 21:00:00
1179
原创 使用 AddressSanitizer 检测栈内存越界错误
栈内存越界通常表现为对局部数组或变量的非法访问:写入超出数组边界读取未定义的栈空间这类错误在编译阶段不会报错,运行阶段也可能不会立刻崩溃,因而很难发现。栈内存越界是一种常见的低级错误,极易引发程序崩溃或漏洞。AddressSanitizer 提供了即时、高精度的栈越界检测功能,是定位此类错误的利器。养成使用编译调试程序的习惯,有助于在开发阶段及时发现问题。
2025-05-12 18:30:00
679
原创 使用 AddressSanitizer 检测堆越界错误
堆越界是 C/C++ 中隐蔽而危险的错误类型;ASan可以快速检测并定位这类问题,极大提升程序的安全性;编写 C/C++ 代码时应特别注意内存边界,防止访问越界。
2025-05-06 18:30:00
606
原创 AddressSanitizer(ASan)简介
是一个编译期与运行期结合的检测工具,它通过在程序编译时插入额外的检查代码,并在运行时监控内存访问,帮助开发者发现隐藏的内存问题。ASan 主要应用于C/C++项目,但也支持部分Rust和其他需要手动内存管理的语言。高检测率:可以发现绝大多数常见的内存错误性能开销小:相比传统的工具(如 Valgrind),ASan 速度更快(通常仅慢 2x 左右)易于集成:只需重新编译即可使用,不需要修改源代码。
2025-05-01 05:15:00
887
原创 Git 配置 GPG 提交签名
使用 GPG 对 Git 提交进行签名,可以证明该提交确实是你本人提交的。这在团队协作和代码审核中非常有用,GitHub/GitLab 等平台也会显示 “Verified” 标签。
2025-04-21 08:00:00
997
原创 lws_callback_on_writable 函数解析
它的任务是:检查连接状态;如果还可以写,则注册一个“下次写就绪时回调我”的请求;回调将触发或类似事件,让用户在回调中调用写数据。如果你在写来请求“我想写数据”,框架在下一次poll()中发现可以写时就会回调你。
2025-04-15 06:00:00
849
原创 丢失的“Edit with IDLE“右键菜单项
昨天晚上,上高一的儿子安装python之后,发现右击.py文件没有"Edit with IDLE"菜单项,和老师课堂的环境有差异,让我帮他找回来。通过上述方法,可高效为Python文件添加右键编辑选项,提升开发体验。为实际Python版本号后,以管理员身份运行脚本)若频繁操作注册表,可创建批处理文件(
2025-04-01 08:47:20
1183
原创 SSML(Speech Synthesis Markup Language)简介
SSML(Speech Synthesis Markup Language,即语音合成标记语言)是一种基于 XML 的标记语言,旨在为文本到语音(TTS,Text-to-Speech)转换提供丰富的控制能力。它允许开发者定义语音合成的各种参数,如语速、音量、音调、停顿、发音等,从而提升语音合成的自然度和可控性。SSML 由 W3C(万维网联盟)定义,是语音合成技术的重要标准,广泛用于智能语音助手、IVR(交互式语音应答)系统、播报系统等应用。
2025-03-26 17:12:01
1207
原创 GDB调试时打印通道变量
在 GDB 中打印链表时,可以通过逐步解开指针并打印每个节点的内容来查看链表的结构。在调试freeswitch时,有时候需要找到某个通道变量的值。怎么办呢?,这通常是一个链表结构,所以你需要逐层访问每个指针并查看它的内容。假设你已经有了channel和variables。
2025-03-18 03:00:00
343
原创 freeswitch通过uuid定位session并发送event
在 FreeSWITCH 的 C 代码中,可以通过。将其发送到指定的会话(session)。
2025-03-03 03:30:00
539
FreeSWITCH clustering with OpenSIPS
2020-04-22
Asterisk: The Definitive Guide, 3rd Edition
2013-01-25
FreeSWITCH Cookbook
2013-07-01
VoiceXML基础教程
2011-09-22
FreeSWITCH 1.0.6
2012-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅