Freeswitch——SIP

Stella981
• 阅读 1021

SIP是一个对等的协议,类似P2P。它和HTTP不一样,其不是客户端服务器结构的;也不像传统电话那样必须有一个中心的交换机,它可以在不需要服务器的情况下进行通信,只要通信双方都彼此知道对方地址(或者只有一方知道另一方的地址)即可,这种情况称为点对点通信。

Bob给Alice发送一个INVITE请求,说“Hi,一起吃饭吧…”,Alice说“好的,OK”,电话就接通了。

Freeswitch——SIP

INVITEsip:alice@192.168.0.8SIP/2.0

SIP/2.0200OK

Bob

Alice

UA用户代理

在SIP网络中,Alice和Bob都称为用户代理(User Agent,UA)。UA是在SIP网络中发起或响应SIP处理的逻辑实体。UA是有状态的,也就是说,它维护会话(或称对话)的状态。UA有两种:一种是UAC(UA Client),它是发起SIP请求的一方,比如图7-1中的Bob;另一种是UAS(UA Server),它是接受请求并发送响应的一方,比如图7-1中的Alice。由于SIP是对等的,当Alice呼叫Bob时,Alice就称为UAC,而Bob则实现UAS的功能。一般来说,UA都会实现上述两种功能。

设想Bob和Alice是经人介绍认识的,而他们还不熟悉,Bob想请Alice吃饭就需要一个中间人(M)传话,而这个中间人就叫代理服务器(Proxy Server)。还有另一种中间人称为重定向服务器(Redirect Server),它以类似于这样的方式工作──中间人M告诉Bob,我也不知道Alice在哪里,但我爱人知道,要不然我告诉你我爱人的电话,你直接问她吧,我爱人叫W。这样,M就成了一个重定向服务器(把Bob对他的请求重定向到他的爱人,这样Bob接下来要直接联系他的爱人),而他的爱人W是真正的代理服务器。这两种服务器都是UAS,它们主要是提供一对欲通话的UA之间的路由选择功能。

还有一种UAS称为注册服务器。试想这样一种情况:Alice还是个学生,没有自己的手机,但它又希望Bob能随时找到她,于是当她在学校时就告诉中间人M说她在学校,如果有事找她可以打宿舍的固定电话;如果她要回家,也通知M说有事打家里电话;或许某一天她要去姥姥家,也要把她姥姥家的电话告诉M。总之,只要Alice换一个新的位置,它就要向M重新“注册”,以让M能随时找到她,这时候M就相当于一个注册服务器。

背靠背用户代理

还有一种特殊的UA称为背靠背用户代理(Back-to-Back UA,B2BUA)。需要指出,其实RFC 3261并没有定义B2BUA的功能,它只是一对UAS和UAC的串联。FreeSWITCH就是一个典型的B2BUA,事实上,B2BUA的概念会贯穿本书始终,。

背靠背代理实际就是一端连接UAS 一端连接UAC

SBC

边界会话控制器(Session Border Controller,SBC)。它主要位于一堆SIP服务器的边界,用于隐藏内部服务器的拓扑结构、抵御外来攻击等。SBC可能是一个代理服务器,也可能是一个B2BUA。

基本方法

Freeswitch——SIP

基本方法

说明

注册联系信息

REGISTER

初始化一个会话,可以理解为发起一个呼叫

INVITE

对INVITE消息的最终响应

ACK

取消一个等待处理或正在处理的请求

CANCEL

终止一个会话

BYE

查询服务器和能力,也可以用作ping测试

OPTIONS

SIP必须包含的头域

Freeswitch——SIP

名称

描述

用于区分不同会话的唯一标志

CaLl-ID

顺序号,用于在同一会话中区分事务

cSeg

说明请求来源

From

说明请求接受方

To

限制跳跃点数和最大转发次数

Max-Forwards

描述请求消息经过的路径

Via

配置

查看网关状态

呼叫

注册用户

在 /usr/local/freeswitch/conf/directory/default/ 下有默认的 1000-1019 共 20 个帐号,可以

通过 copy 并修改其中的 user_id 来实现增加新的号码。

免费软电话

yate

http://docs.yate.ro/wiki/Download

linphone

http://www.linphone.org/

Freeswitch——SIP

口视频

先进

音频

通话和聊天

网络

用户界面

SIP账户

语言

语言

简体中文

路径

选择助手

Freeswitch——SIP

邀请您的朋友

账户助手

创建或管理您的Linphone账户

在Linphone上邀请您的朋友

邀请

助手

使用sip账户

Freeswitch——SIP

欢迎

该助手会帮助你配置并使用你的SIP账户

使用LINPHONE账户

创建一个LINPHONE账户

获取远程配置文件

使用一个SIP账户

Freeswitch——SIP

使用SIP账户

显示名称(可选)

用户名

SIP域

密码

交通工具

UDP

返回

使用

查看注册信息

originate

FreeSWITCH中使用originate命令发起一次呼叫

呼叫字符串

“user/1000”称为呼叫字符串(Dial String,有时也叫CallURL)。“user”是一种特殊的呼叫字符串,在后面我们还会看到其他的呼叫字符串。

外呼SIP网关

如果你在某个运营商拥有SIP****账号,你就可以配置上拨打外部电话了。该SIP账号(或提供该账号的设备)在 FreeSWITCH 中称为SIP网关(Gateway)。添加一个网关只需要在 etc/freeswitch/sip_profiles/external/ 创建一个XML文件,名字可以随便起,如gw1.xml。

如果你的SIP网关还需要其它参数,可以参阅同目录下的 example.xml,但一般来说上述参数就够了。你可以重启 FreeSWITCH,或者执行以下命令使用之生效。

然后显示一下状态:

如果显示 gateway gw1 的状态是 REGED ,则表明正确的注册到了网关上。你可以先用命令试一下网关是否工作正常:

uuid_bridge Freeswitch——SIP

至此,alice和bob终于可以通话了.我们也可以用另一种方式建立他们之间的通

话,具体步骤如下:

originateuser/alice

park

park

originateuser/bob

showchannels

uuid_bridge<aliceuuid

bob

uuid

在这里,我们分别呼叫alice和bob,并把他们暂时park到一个地方.通过命令show

channels我们可以知道每个Channel的UUID,然后使用uuidbridge命令将两个

Channel桥接起来,而上一个方式实际上是先桥接,再呼叫bob.

参考

http://www.coder55.com/article/7187

https://www.cnblogs.com/yjmyzz/p/zoiper-and-yateclient-turotial.html

https://blog.csdn.net/wlg9527/article/details/106247292

本文同步分享在 博客“羊羽”(other)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这