VoIP通话-基于SIP协议的Asterisk(一)-实现流程
文章首发及后续更新:https://mwhls.top/4122.html,无图/无目录/格式错误/更多相关请至首发页查看。
新的更新内容请到mwhls.top查看。
欢迎提出任何疑问及批评,非常感谢!
VoIP通话-基于SIP协议的Asterisk
该篇仅包含实现流程,各步骤的原因见该系列后续文章。
项目说明
项目内容
- 基于 Linux 编译并搭建 oSIP 系统并通过 IP 电话通信测试
项目目标
- 在 Linux 中编译安装 oSIP 或 eXosip。
- 安装 mysql。
- 使用 IP 电话通信测试。
项目成果
- 于 Windows 子系统(WSL)的 Ubuntu22.04 中安装 Asterisk 作为 SIP 服务器,并于 Windows 中使用 ZoiPer 与 Linphone 相互通信。
Ubuntu 22.04 安装于 WSL
说明
- WSL 即 Windows Subsystem for Linux,微软开发的安装于 Windows 中的 Linux 系统。
- WSL 可以安装桌面,但我这里用不到,所以没安装。
下载与安装
- 微软商店下载:https://www.microsoft.com/store/apps/9PN20MSR04DW
进入与退出
- 命令行输入
wsl
进入 WSL。 exit
退出至 Windows 环境。
报错
参考的对象类型不支持尝试的操作。
- 卸载小黑盒加速器。
安装其中一个文件系统时出现错误。有关详细信息,请运行'dmesg'。
- 网上说
wsl --update
然后wsl --shutdown
即可,但我没成功。 - 我用 Tabby 里的 WSL 运行起来了,它似乎是运行了
C:\Windows\system32\wsl.exe
文件。
- 网上说
换 163 源
- 参考:https://blog.csdn.net/xiangxianghehe/article/details/122856771
- 说明:使用 163 的源,阿里源和清华源在我这里没效。
- 执行:
cd /etc/apt
sudo vim s
,按 a 进入输入模式,粘贴下载源,按 esc 进入模式选择,输入冒号,输入wq
保存退出。sudo cp sources.list sources.list.bak
,备份下载源sudo mv s sources.list
,覆盖下载源,一个个删不如覆盖来的快。
- 更新
apt
:sudo apt update
sudo apt upgrade
deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
GCC 安装
- 说明:或许不安装也行。
- 参考:https://blog.csdn.net/wjl18270365476/article/details/122659969
- 安装:
sudo apt install build-essential
Asterisk 安装
- 参考:
- 自己动手搭建免费VoIP服务器
- 官方教程:http://www.asterisk.org.cn/asterisk-cn-doc/doc/295240.html
- 安装:
sudo apt install asterisk
- 备份配置文件:
sudo cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.backup
sudo cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.backup
配置 sip.conf
sudo vim /etc/asterisk/sip.conf
- 说明:这里和参考的那篇不同,因为我看到后面有重复设置,为了避免被后面设置项覆盖,我选择修改后增加内容,而非博主的直接增加。
- 修改
context=default
tcpenable = yes
- 添加
[general]
bindport = 5060
bindaddr = 0.0.0.0
tcpbindaddr = 0.0.0.0
[1001]
type = friend
username = 1001
secret=1001
host=dynamic
disallow = all
allow = ulaw
transport = udp
context=from-1001
[1002]
type = friend
username = 1002
secret = 1002
host = dynamic
disallow = all
allow = ulaw
transport = udp
context=from-1002
配置 extensions.conf
sudo vim /etc/asterisk/extensions.conf
- 说明:同样与参考的那篇不同,我发现已经有该参数了,所以省去。
- 添加
[from-1001]
exten => 1001,1,Answer()
exten => 1001,n,Dial(SIP/${EXTEN},20,tr)
exten => 1001,n,Hangup
[from-1002]
exten => 1002,1,Answer()
exten => 1002,n,Dial(SIP/${EXTEN},20,tr)
exten => 1002,n,Hangup
WSL 端口映射
- 安装
net-tools
sudo apt install net-tools
- 查看 WSL ip 地址:
ifconfig
- 即 eth0 的 inet,
172.31.220.163
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.31.220.163 netmask 255.255.240.0 broadcast 172.31.223.255inet6 fe80::215:5dff:feb5:9751 prefixlen 64 scopeid 0x20<link>ether 00:15:5d:b5:97:51 txqueuelen 1000 (Ethernet)RX packets 23127 bytes 30204687 (30.2 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 15749 bytes 1157545 (1.1 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 端口映射
netsh interface portproxy add v4tov4 listenport=5060 listenaddress=0.0.0.0 connectport=5060 connectaddress=172.31.220.163
- 检查:
netsh interface portproxy show all
重启并检查
sudo /etc/init.d/asterisk restart
- 查看 Linux 端口:
sudo lsof -i:5060
- 有 asterisk 进程。
- 查看 Windows 端口:
netstat -aon| findstr 5060
- 输出:
TCP 0.0.0.0:5060 0.0.0.0:0 LISTENING 5824
IP 电话安装
ZoiPer
官网:https://www.zoiper.com/
启动,选择免费账户运行。
用户名及密码输入 1001,ip
172.31.220.163:5060
(前文 WSL 的ifconfig
命令获得)
Linphone
- 官网:https://www.linphone.org/
- SIP 账户登录,用户密码为 1002,ip 同上,协议选择 UDP
IP 通话
- 查询 WSL 于 Windows 中的 IP:
- Windows 下,
ipconfig
,找到 WSL 对应的 ip,我这里为172.31.208.1
- Windows 下,
账户添加
- ZoiPer 添加联系人 1002,通话地址为
1002@172.31.208.1:5060
- Linphone 添加联系人 1001,通话地址为
1001@172.31.208.1:5060
信息汇总
账号 | 密码 | SIP 地址 | 协议 | 联系方式 |
---|---|---|---|---|
1001 | 1001 |
172.31.220.163:5060
|
UDP |
1001@172.31.208.1:5060
|
1002 | 1002 |
172.31.220.163:5060
|
UDP |
1002@172.31.208.1:5060
|
Asterisk 配置 | Asterisk 配置 |
ip 由 WSL 的 ifconfig 得知 端口由 Asterisk 配置 |
Asterisk 配置 |
ip 由 Windows 的 ipconfig 得知 这里指的是其它账户联系该账户的地址 |
通话
- 下图为 ZoiPer 的1001账户向 Linphone 的1002账户拨打
- 下图为 Linphone 的1002账户向ZoiPer 的1001账户拨打
- 下图为两个软件的拨打历史
- 下图为两个软件的拨打时的截图,当我说话时,有声音
- 拨打六分钟后的通话记录
VoIP通话-基于SIP协议的Asterisk(一)-实现流程相关推荐
- VoIP通话-基于SIP协议的Asterisk(零)-Demo
文章首发及后续更新:https://mwhls.top/4116.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...
- VoIP通话之SIP协议
一.前言 作为一名VoIP产品职业开发者,SIP可以说是我工作中接触最多的一种协议,是时候好好总结一下了. 二.概要 SIP(Session Initiation Protocol)属于应用层的控制协 ...
- 图解基于SIP协议的VoIP通话过程
基于SIP协议的VoIP通话流程: 一次通话过程的抓包情况: 呼叫请求报文内容: 呼叫响应报文内容: 客户端样机上抓的RTP/RTCP语音流数据报文: RTP数据报文内容: RTCP报文内容(RTP数 ...
- 【个人作品】推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功
推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功 属于个人独创作品,欢迎使用测试,欢迎与作者联系,共同研究.如果大家喜欢将拿出源码. ...
- linux sipp 呼叫转移_基于SIP协议的呼叫转移功能实现.pdf
ea句拣 却m川1归3 年第却卷材第 u E,sw部署跚跚跚. E囚le倪cb胁'O响叫ni沁cS缸ci. &τT.e优ch. /De盹ι 15 , 2013 基于 SIP 协议的呼叫转移功能 ...
- 基于SIP协议的IP电话系统设计与实现
网络IP电话不仅具有成本低廉.网络资源利用率高等诸多优点,而且还可以进一步集成多媒体信息(包括语音.图像.数据等),以实现交互式的实时通信等,具有很大的发展潜力,且有逐渐取代传统PSTN电话的趋势,成 ...
- 基于SIP协议的IP电话增值业务实现技术
基于SIP协议的IP电话增值业务实现技术 王瑜,乐正友 (清华大学电子工程系,北京 100084) 摘 要:讨论了SIP协议以及基于SIP协议的IP电话增值业务实现技术,并对SIP CGI.C ...
- sip服务器开发--linphone是一款开源的基于sip协议的网络电话软件
Android上最优秀的开源voip(网络电话)软件 目前知道有sipdroid.imsdroid.linphone,不知道还有没有其他的 还有MPhoneGG,使你使用Android手机也能拨打网络 ...
- 基于SIP协议的视频通讯
1.sip协议及其发展 sip(session initiation protocal)称为会话发起协议,是由ietf(internet engineering task force)组织于1999年 ...
最新文章
- 寄快递要在面单上写身份证号?市民担心个人信息泄露
- Python中的numpy矩阵运算
- VC里的#define new DEBUG_NEW
- paramiko在windows上的安装和使用
- java用for循环修改密码_Java for循环的几种用法分析
- jsp java el表达式_jsp相关笔记,el表达式、jsp标签库(jstl)
- Oracle数据库的表结构 简单表的建立
- SpringMVC中的拦截器、过滤器的区别、处理异常
- ubuntu下如何查看和设置分辨率 (转载)
- Windows 平台sqlalchemy 连接oracle数据库
- Memento - 备忘录模式
- html网页老是崩溃,MSHTML.dll 错误模块导致ie9最近经常崩溃
- 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
- CSDN博客专家证书发放名单(10月已更新)
- listlength函数头文件_length函数
- c语言十六进制字母,c语言读取十六进制文件
- c语言中的三角函数公式,高中三角函数公式大全-必背基础知识点.doc
- 高铁对合肥及周边城市可达性及商业腹地变化影响研究
- 对控制台EXE程序的自动运行问题——以6S模型6s.exe为例
- 安装mysql包有问题_安装mysql数据库及问题解决方法
热门文章
- 设计模式 - 装饰器模式
- Java经典入门教程!java工程师的进阶之路
- 013 基于truffle的PetShop案例
- Could not resolve placeholder ‘project.version‘ in value “${project.version}”
- 【数据结构与算法】线性表的查找
- 华三(h3c)交换机操作命令详解vlan切换
- 回顾 2022 年 — 回顾 Elastic 这一年
- 数据结构与算法第2章:链表
- drupal 中基本的数据库操作
- 计算机副教授要求,计算机科学与技术学院副教授一二级岗申报评审条件