自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 Freeswitch 通过sofia_contact查找分机原理

1.3、profile不存在,也不是*,默认domian下,在第一个profile中找分机;做过基于FreeSwitch 作为PBX的朋友应该都把FreeSwitch作为模拟网管来使用过得经历吧!2、如果未指定profile,不指定domain,则在第一个profile和默认domain下赵分机;1.1、profile存在,则在默认domian下当前设置的profile中找分机;1.2、profile未*,则在默认domian下中所有profile中找分机,;代码层面做了“兼容”

2025-12-26 11:41:55 50

原创 Freeswitch 通过SIP REFER进行通话转移

C1的通话需要转移到C2采用的就是 SIP REFER的通话转移方案,C1 主动发起 REFER SIP信令到前置系统(如VOS,SBC,前提是它们支持sip-refer),请求通话转移,结束信令以及释放媒体通道。企业有2套呼叫中心,分别是呼叫中心C1和呼叫中心C2,客户通过企业热线号码呼入先进入到C1,因为业务规则的原因,需要把电话转接到C2上的IVR或者坐席进行进一步服务。其目的是为了让大家明白通过fs来做SIP REFER,因此这里SBC,C1,C2都采用fs来模拟。软电话A用1000注册到C2;

2025-12-26 10:57:20 73

原创 Freeswitch中通过LUA发送、订阅事件

freeSwitch中通过订阅事件,获取到各种实时信息,对通话进行精确的控制。freeswitch.EventConsumer:订阅一个事件,获取内容。freeswitch.Event创建一个事件,然后添加内容,最后发出。通过bind订阅所需事件。

2025-12-25 11:47:19 295

原创 Linux下C程序动态库.so和静态库.a的生成和使用

这个错误是在动态库执行的时候经常会遇到,说找不到这个.so文件,如果放在/lib或者/usr/lib下,那么默认就能找到。比如程序的源文件为:main.c【我创建的目录是/root/host/my_program/asoc/my_program】比如程序的源文件为:test.c【我创建的目录是/root/host/my_program/asoc/my_program】我在路径/root/host/my_program/asoc/include下创建下面的文件。下面通过一个小栗子介绍如何生成一个动态库。

2025-12-24 20:09:52 533

原创 对于电商复购的理解和认识

成功的复购策略是“润物细无声”的,它让用户在需要的时候第一个想到你,并且因为良好的体验和额外的激励而选择再次购买。企业应结合自身品类特点,识别核心复购场景,并利用数字化工具,构建个性化的用户旅程,最终实现可持续的增长。个性化推荐:“买了A商品的人,也买了B商品”或“根据您的喜好,推荐进阶款C”。无理由退换货、快速响应的客服、问题产品的主动解决,能极大提升信任感,为复购打下坚实基础。打通小程序、APP、官网、线下店的数据,确保用户各渠道的积分、优惠券、会员等级一致。

2025-12-22 09:35:12 801

原创 呼叫中心FAQ

1、 什么叫呼叫中心? “呼叫中心”是公司企业为用户服务而设立的。早在80年代,欧美等国的电信企业、航空公司、商业银行等为了密切与用户联系,应用计算机的支持、利用电话作为与用户交互联系的媒体,设立了”呼叫中心“(call center),也可叫做“电话中心”,实际上就是为用户服务的“服务中心”。 现代的呼叫中心又叫作客户服务中心,它是一种基于CTI技术、充分利用通信网和计算机网的多项功能集成,并与企业连为一体的一个完整的综合信息服务系统,利用现有的各种先进的通信手段,效地为客户提

2025-12-12 14:17:37 462

原创 RFC 5627 SIP中文翻译

GRUU背后的基本思想很简单。GRUU由某个SIP域颁发,通常可以路由到这个域内的一台proxy。反过来,SIP域负责维护GRUU和特定UA实例之间的绑定。当发出SIP请求解除GRUU绑定时,这个请求会被路由给这台proxy。它负责特定UA实例的contact和GRUU之间的映射,因此把消息路由给它。3.1. GRUU的结构GRUU是一个SIP URI,它拥有两个属性:o 它路由到一个特定的UA实例。o 它可以由Internet上的任意UA解绑,不局限于GRUU指向的UA实例所在的域。

2025-12-12 13:57:26 930

原创 以G711为例计算带宽

总协议头开销 = RTP(12) + UDP(8) + IP(20) + 以太网(18) = 58 字节。Ethernet:帧头(包括源/目的MAC地址、类型等)和帧尾(CRC校验)共 **18 字节**。PPPoE:在以太网基础上,额外增加 **8 字节** 的PPPoE头,总开销可达 26 字节。最常见的 IPv4 头,固定 **20 字节(IPv6 头为 40 字节,计算时需替换)160 字节 + 58 字节 = **218 字节。数据包总大小(比特):218 字节 × 8 = **1744 比特。

2025-12-12 11:55:06 414

原创 VoIP 常用的音频编码

因此,在VoIP中用于网络传输时,通过编码进行数据压缩,根据编码后音频质量的损耗情况分为有损和无损编码,根据带宽占用情况分为窄带和宽带编码。‌子类型‌:A-law(欧洲),称为PCMA、μ-law(北美/日本),称为PCMU。‌特性‌:支持窄带/宽带/超宽带(20kHz)抗丢包算法优化,延迟可低至5ms。‌比特率‌:5.3kbps(ACELP)/6.3kbps(MP-MLQ)‌特性‌:参数编码,压缩比8:1,延迟10ms。‌场景‌:带宽受限的VoIP通话、视频会议‌。‌比特率‌:48/56/64kbps。

2025-12-12 11:41:02 298

原创 Freeswitch API 调用自定义参数分隔符

重点说明哈:不是所有API都支持自定义哈。——识别结果的XML内容里面。

2025-12-12 10:51:44 206

原创 SIP代理服务器和SIP用户代理服务器的区别和联系。

在SIP中,UA、UAC和UAS是构成SIP通信的基本元素。UA是SIP会话的发起者或接收者,是对UAC和UAS的统称,而UAC和UAS则是根据UA在会话中的角色和行为进行的具体划分。通过UAC和UAS之间的交互和协同工作,SIP会话得以建立、修改和终止。综上所述,SIP代理服务器和SIP UAS在SIP通信中扮演着不同的角色,但它们之间存在紧密的联系和相互依赖关系。通过协作和配合,它们共同实现了SIP网络中的呼叫控制和管理功能。在实际部署中,SIP服务器可以是上述类型中的一种或多种的组合。

2025-12-11 20:47:02 614

原创 SIP消息 - Via头域

当SIP客户端位于NAT后面时,它发出的SIP消息中的源IP地址和端口号会被NAT设备替换为NAT的公网IP地址和一个随机的端口号。如果RPORT参数存在且为空值,服务器会根据接收到的UDP数据包中的源IP地址(UDP数据包本身并不直接包含IP地址,而是存在于UDP数据包所在的IP数据报(或称为IP包)中)和端口号(即NAT的公网IP地址和随机端口号),自动填充RPORT参数的值,并在VIA头字段中添加或更新RECEIVED参数以记录这个公网IP地址。这个顺序对于SIP消息的路由和响应的返回至关重要。

2025-12-11 20:37:38 1088

原创 SIP消息 - CSeq头域

在SIP(Session Initiation Protocol)协议中,Cseq(Command Sequence)头域是一个关键的组成部分,它用于标识SIP请求的顺序和唯一性。方法名必须与SIP请求的方法类型一致。3)初始化和递增:序列号的初始值可以是任意选取的,但一旦确定,后续的请求(对于具有相同命令方法但不同消息体的请求)中序列号必须严格单调增加,不得循环。这样的设计确保了即使在网络条件不佳导致重传的情况下,服务器也能够准确地区分原始请求和重传请求,从而避免了处理上的混乱。

2025-12-11 20:30:44 542

原创 kamailio各模块大致分类

2025-12-06 09:15:33 117

原创 GO-功能-匿名函数与闭包

【代码】GO-功能-匿名函数与闭包。

2025-12-06 09:14:49 73

原创 GO-功能-defer

defer的规则:先进后出。defer与闭包函数。

2025-12-06 09:14:22 82

原创 线程与协程的区别

现代操作系统一般都采用抢占式调度,上下文切换一般发生在时钟中断和系统调用返回前,调度器计算当前线程的时间片,如果需要切换就从队列中选出一个目标线程,保存当前线程的环境,并且恢复目标线程的运行环境,最典型的就是切换ESP指向目标线程内核堆栈,将EIP指向目标线程上次被调度出时的指令地址。2)线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位;1)进程拥有自己独立的堆栈,既不共享堆,也不共享栈。2)线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,是由操作系统调度。

2025-12-06 09:13:33 447

原创 GO-功能-闭包

【代码】GO-功能-闭包。

2025-12-05 08:57:34 118

原创 Go-功能-回调函数

【代码】Go-功能-回调函数。

2025-12-05 08:56:54 93

原创 GO-功能-不定参数传递

【代码】GO-功能-不定参数传递。

2025-12-05 08:56:32 63

原创 go(基础10)——错误处理

从上述代码可以看到,DNSError 结构体还有 Timeout() bool 和 Temporary() bool 两个方法,它们返回一个布尔值,指出该错误是由超时引起的,还是临时性错误。如果一个函数或方法返回了错误,按照惯例,错误会作为最后一个值返回。接下来我们编写一个程序,断言 *DNSError 类型,并调用这些方法来确定该错误是临时性错误,还是由超时导致的。第二种获取更多错误信息的方法,也是对底层类型进行断言,然后通过调用该结构体类型的方法,来获取更多的信息。在 Go 中,错误一直是很常见的。

2025-12-05 08:56:06 747

原创 go(基础09)——defer

在上面的程序里,我们在第 8 行创建了 rect 结构体,并在第 13 行创建了 rect 的方法area,计算出矩形的面积。当一个函数内多次调用 defer 时,Go 会把 defer 调用放入到一个栈中,随后按照后进先出(Last In First Out, LIFO)的顺序执行。在 Go 语言中,并非在调用延迟函数的时候才确定实参,而是当执行 defer 语句的时候,就会对延迟函数的实参进行求值。defer 语句的用途是:含有 defer 语句的函数,会在该函数将要返回之前,调用另一个函数。

2025-12-05 08:55:47 372

原创 go(基础08)——多态

在上面的 main 函数中,我们创建了三个项目,有两个是 FixedBilling 类型,一个是 TimeAndMaterial 类型。由于 FixedBilling 和 TimeAndMaterial 两个结构体都定义了 Income 接口的两个方法:calculate() 和 source(),因此这两个结构体都实现了 Income 接口。上面定义了接口 Interface,它包含了两个方法:calculate() 计算并返回项目的收入,而 source() 返回项目名称。

2025-12-04 08:36:46 501

原创 go(基础07)——组合取代继承

一旦结构体内嵌套了一个结构体字段,Go 可以使我们访问其嵌套的字段,好像这些字段属于外部结构体一样。将上述程序进行改进,增加结构体切片,注意:结构体不能嵌套一个匿名切片。在 Go 中,通过在结构体内嵌套结构体,可以实现组合。2. 结构体切片的嵌套。

2025-12-04 08:36:20 213

原创 go(基础06)——结构体取代类

通过这种方法,我们把 employee 结构体变为了不可引用的,防止其他包对它的访问。除非有特殊需求,否则也要隐藏所有不可引用的结构体的所有字段,这是 Go 的最佳实践。很完美,正如我们期望的一样,其他包现在不能轻易创建零值的 employee 变量了。于是我们在第 14 行提供了一个可引用的 New 函数,该函数接收必要的参数,返回一个新创建的 employee 结构体变量。在你的 Go 工作区创建一个名为 oop 的文件夹。让我修改一下原先的代码,使得每当创建 employee 的时候,它都是可用的。

2025-12-04 08:35:56 724

原创 go(基础05)——数组与切片

切片是对数组的一个连续片段的引用,所以切片是一个引用类型,这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内(意思是这是个左闭右开的区间)上面的 3 表示数组的元素个数 ,万一你哪天想往该数组中增加元素,你得对应修改这个数字,为了避免这种硬编码,你可以这样写,使用 ... 让Go语言自己根据实际情况来分配空间。不同点:数组的容器大小固定,而切片本身是引用类型,它更像是 Python 中的 list ,我们可以对它 append 进行元素的添加。

2025-12-04 08:34:48 348

原创 go(基础04)——mutex

于是,协程 2 获取了 x 的初始值(依然为 0),并计算 x + 1。然后,协程 2 继续开始执行,把计算值(依然是 1)复制给了 x,因此在所有协程执行完毕之后,x 都等于 1。由于缓冲信道的容量为 1,所以任何其他协程试图写入该信道时,都会发生阻塞,直到 x 增加后,信道的值才会被读取。在上面的情形里,协程 1 开始执行,完成了三个步骤后结束,因此 x 的值等于 1。而当协程 2 执行完毕时,x 的值等于 2。在上面的代码中,x = x + 1 只能由一个 Go 协程执行,因此避免了竞态条件。

2025-12-04 08:34:25 559

原创 go(基础03)——Select

select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case 语句都是信道操作。在没有 case 准备就绪时,可以执行 select 语句中的默认情况(Default Case)。这通常用于防止 select 语句一直阻塞。如果 select 只含有值为 nil 的信道,也同样会执行默认情况。当 select 由多个 case 准备就绪时,将会随机地选取其中之一去执行。

2025-12-03 08:29:20 407

原创 SIP Tag

主叫方必须在From头域中携带自己的tag,但在RFC2543规范中,这是可选的,遵行RFC2543的UA通常不会携带tag。然后,与200 OK应答中所返回的To tag合并,组成dialog标识符,后续这个Call-ID相关的所有请求都以这个三元组为标识。由代理生成的任何应答都将由代理添加tag。如果UAC收到的应答消息中包含不同的tag,这意味着这些应答来自不同的UAS,也就是INVITE存在分支。tag不是To或From URI的组成部分,但它是头域的组成部分,通常是在尖括号“<>”之外携带的。

2025-12-03 08:28:35 237

原创 go(基础02)——信道(channel)

信道的零值没有什么用,应该像对 map 和切片所做的那样,用 make 来定义信道。v, ok := <- ch //ok为false,则为读取一个关闭的信道。信道只能运输这种类型的数据,而运输其他类型的数据都是非法的。当从信道接收数据时,接收方可以多用一个变量来检查信道是否已经关闭。数据发送方可以关闭信道,通知接收方这个信道不再有数据发送过来。注意:for range 循环用于在一个信道关闭之前,从信道接收数据。通过使用信道,数据也可以从一端发送,在另一端接收。注意: 信道的发送和接收是阻塞的。

2025-12-03 08:27:31 330

原创 go(基础01)——协程

如果该线程中的某一 Go 协程发生了阻塞(比如说等待用户输入),那么系统会再创建一个 OS 线程,并把其余 Go 协程都移动到这个新的 OS 线程。1)启动一个新的协程时,协程的调用会立即返回。在调用 Go 协程之后,程序控制会立即返回到代码的下一行,忽略该协程的任何返回值。2)如果希望运行其他 Go 协程,Go 主协程必须继续运行着。2)go协程也叫用户态线程,协程之间的切换发生在用户态。1)go协程只需要极少的栈内存(大概4~5KB),默认情况下,线程栈的大小为1MB。Go 协程可以看作是轻量级线程。

2025-12-03 08:27:02 358

原创 Go安装、配置和vsCode配置Go

golang.org 在国内由于一些原因无法直接访问,而go get在获取gocode、go-def、golint等插件依赖工具的源码时,需要从 golang.org 上拉取部分代码至GOPATH,自然就导致了最后这些依赖于 golang.org 代码的依赖工具安装失败。2. 配置GOPATH: E:\go\src\Go(我自己配置的地址) --------go的工作目录的地址。1. 配置GOROOT: C:\Go\ -------go的环境地址。安装过程省略,默认安装路径C:\Go即可。

2025-12-03 08:26:25 954

原创 6XX 响应

这类应答明确说明无论请求发到哪里,都将失败,即使是发给其它备份服务器,结果也是失败。只有完整了解Request-URI所标识的资源的所有实例的服务器才可以发全局错误应答。因此,应当慎用6xx应答,特别是在多域服务和多供应商的场景中。它说明对UAS来说,某些会话描述是不可接受的,会话建立不起来。这个应答类似404 Not Found,它说明Request-URI所指定的用户在域内所有节点都是不存在的。这个应答的效果和600 Busy Everywhere一样,而且不提供任何服务器上呼叫状态相关的信息。

2025-12-02 17:06:51 175

原创 5XX 响应

这个应答说明请求的服务临时不可用。稍后可以重新尝试,如果应答中有Retry-After头域,那么至少需要等待头域中指定的时间。这个应答很重要,因为接收503会触发一个新的DNS查询来定位备份服务器,通过备份服务器香袋服务。如果服务端预料在一定时间内能够恢复,可以应答中包含一个Retry-After头域,说明恢复的时间。这个应答的详细语义还未定义,因为目前的SIP实现只有一个版本(2.0版)。这个应答说明服务端不支持请求的功能特性。这个应答由代理网关发出,说明其它网络的某种原因阻止了请求的处理过程。

2025-12-02 17:06:32 265

原创 4XX 响应

以UDP接收,然后以TCP转发请求的代理可以生成这个应答,因为在TCP传输中,Content-Length的用法更为严格。然而它们还是稍微有点区别的,3xx返回的是同一用户的选择,但4xx应答可以返回不同用户的选择。如果事件状态合成器中所存储的实体标签中没有与请求的SIP-If-Match的标签匹配的条目,那么它返回412 Conditional Request Failed应答。特定的客户端错误应答,或某些特定的头域,可以向UAC说明错误的性质以及应该如何重新格式化请求。说明请求消息要求用户先执行鉴权。

2025-12-02 17:05:50 900

原创 3XX 响应

可以配置UAC,让它在收到重定向消息时,根据应答内容自动生成一个新的INVITE请求。此外,代理服务器收到重定向消息时,也可以自动生成ACK,并提取应答中的Contact URI,重新生成INVITE请求。为了防止回环,不允许服务端返回请求中Via头域列表里的任何地址,此外,客户端必须检查Contact头域中返回的地址是不是之前已经尝试过的。这个应答携带了一个临时的URI,它只在当前有效,不是永久性的。这个应答携带一个Contact头域,包含被叫方的永久性的新的联系URI。比如说重定向到语音信箱服务。

2025-12-02 17:05:28 214

原创 Freeswitch 处理媒体的三种方式

媒体流经过 FreeSWITCH 服务器中转,RTP 数据被接收后转发编解码协商控制​​:FreeSWITCH 主动匹配主叫与被叫的编解码能力,若不一致则提供转码支持(如 G.729 转 PCMA)支持录音、DTMF 检测、实时语音处理(如 TTS/ASR)资源消耗最高(需处理媒体流和转码),并发能力较低​​适用场景​​:需要丰富媒体功能的场景,如呼叫中心(录音、IVR)、跨编解码终端互通。

2025-12-02 17:04:56 752

原创 2XX 响应

用它接受会话邀请的INVITE消息时,携带消息体以描述UAS(被叫方)的媒体属性。用于其它请求时,它表示已经处理请求成功或已收到请求。对于OPTIONS请求来说,200应答的消息体可以描述服务端的能力集。其它方法的200 OK应答不允许携带消息体。202 Accepted应答是RFC6665中扩展的,说明UAS已经收到并理解请求内容,但请求可能还未经服务端授权或处理。204 No Notification应答在RFC6665里用于SUBSCRIBE请求,说明请求处理成功,但是没有相关联的通知消息。

2025-12-01 09:18:27 250

原创 1XX 响应

在SIP中,媒体会话是在呼叫应答之后建立的,即在UAC和UAS之间交换200 OK和ACK消息之后。在发送最终应答(2xx, 3xx, 4xx, 5xx, 或 6xx应答)之前,UAS可以发送任意数量的信息应答。UAC收到的第一条信息类应答确认INVITE消息已经被接收,同时停止INVITE的重传,因此,服务端返回100 Trying可以最大程度上减少INVITE消息在网络中的重传。收到INVITE请求的最终应答时,需要发一条ACK消息进行确认,除非使用PRACK方法,否则不需要对信息类应答确认。

2025-12-01 09:17:02 1166

原创 SIP 请求方法(10)- PRACK

在这个实例中,UAS发的180 Ringing中包含RSeq头域,启用临时应答可靠性机制。如果UAS直到定时器超时也没有收到PRACK(图中的“X”表示消息丢失),那么重发之前的临时应答。INVITE请求的2xx, 3xx, 4xx, 5xx, 与 6xx应答的可靠性是通过ACK方法确定的。但是,如果临时应答(比如180 Ringing)对呼叫状态至关重要,则可能需要对收到的临时应答进行确认。如下图所示,PRACK收到200 OK应答,可以通过CSeq头域中的方法名区分INVITE方法对应的200 OK。

2025-12-01 09:16:15 987

里面包含MicroSIP,eyeBeam,sipml5(wss)三款软电话,欢迎下载,如果觉得合适,欢迎打赏!

里面包含MicroSIP,eyeBeam,sipml5(wss)三款软电话,欢迎下载,如果觉得合适,欢迎打赏!

2025-11-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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