VOIP简单说就是网络电话。
按:最近想找做个Java版的VOIP简单demo,发现官方居然没有个正经库。网上这方面的一些介绍文章也已经过时,特整理一份供大家参考。
名词解释
- SIP :Session Initiation Protocol/会话初始协议,互联网电话
- RTP :Real Time Protocol/实时传输协议
- RTCP: 每发完一批RTP包的时候,就发一个RTCP包,告诉接收方我刚才发了多少RTP包,多少个字节
- PBX :程控交换机,集团电话
- SIP: 基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。支持tcp和udp传输,通常使用UDP协议。
- SDP:Session Description Protocol/会话描述协议,描述终端设备的特点。用途之一是会话建立时,需要媒体协商,双方才能确定对方的媒体能力以及交换媒体数据。
- AOR:Address of Record, 设备无关的唯一地址, 格式为 SIP:user@domain
- 3PCC: 3rd Party Call Control
SIP协议栈
拨号地址格式: sip/sip:username@ip_address[:port]
注: 端口为可选项,不提供使用默认端口5060。
Kamailio
Kamailio/github仓库,是流行的开源的SIP Proxy。和早期的另一分支OpenSips同样出自SER(SIP Express Router)。
不同于PBX,Kamailio是个纯粹的SIP服务器,它可以作为Proxy、注册服务器、重定向服务器,也可作为简单的Presence服务器,其本身并不处理RTP,可能通过RTPProxy来处理RTP的NAT问题。
Kamailio最新5.2版本,通常与RTPEngine组合,kamailio (995 ★) + rtpengine (311 ★)
# 安装
# Debian/Ubuntu 仓库: https://deb.kamailio.org/
wget -O- http://deb.kamailio.org/kamailiodebkey.gpg | sudo apt-key add -
sudo apt update
sudo apt install mysql-server
sudo apt install kamailio kamailio-mysql-modules
systemctl start kamailio
# dump
kamcmd ul.dump
# 添加subscriber用户
kamctl add alice secret
kamctl restart
kamctl 命令示例:
– command ‘ul|alias’ - manage user location or aliases
ul show []………………. show in-RAM online users ul show –brief…………………… show in-RAM online users in short format ul rm []……. delete user’s usrloc entries ul add …………… introduce a permanent usrloc entry ul add ….. introduce a temporary usrloc entry ul add .. introduce a temporary usrloc entry
# 开启日志
vi /etc/rsyslog.conf
# 插入下面这行
local0.* -/var/log/kamailio.log
systemctl restart rsyslog.service
更多信息参考:kamailio-install-guide-deb
RTPEngine
rtpengine通常作为媒体代理(media proxy)。
rtpengine is a proxy for RTP traffic and other UDP based media traffic.
opensips
opensips,同kamailio,用作SIP代理和控制信令。
现在主要为3.0/2.4两个版本分支,常见组合:OpenSIPS做sip proxy,FreeSWITCH做SBC和媒体网关,媒体网关也可选Asterisk。
opensips(619 ★) + rtp proxy ( 208 ★)
RTP Proxy 是一个高性能而且开源的RTP流(RTP Stream)软件代理(Software Proxy). 其典型应用就是作为OpenSIP服务器的子模块, 为SIP Call 提供的Video/Audio RTP Stream的转发.
其他
Asterisk is an Open Source PBX and telephony toolkit. C实现,0.7k star。
SIP/RTP开源实现
- PJSIP: C语言实现的多媒体跨平台通讯库,支持SIP,RTP等多种协议
- peers: Java实现
- RTSP-Client-Server: Java的RTP实现
安卓客户端
- Lumicall : 支持证书
brew install yasm
brew install ffmpeg
测试库
两个Java实现
本地开发
git clone https://github.com/BelledonneCommunications/linphone-desktop.git
安装QT5 http://download.qt.io/official_releases/qt/5.9/
不再维护的库
- 官方的JMF
- 半官方的JSIP/JAIN-SIP
- doubango
客户端
Yate SIP客户端
支持跨平台的开源客户端,下载
MicroSIP
MicroSIP ,Windows客户端的一种选择。
Linphone
Mumble
Mumble,C++实现,2.7k star
为游戏设计的语音聊天软件,基于Qt 和 Opus,包含client和server端。
音视频处理
WebRTC
WebRTC是一个支持网页浏览器进行实时语音对话或视频对话的开源项目,它提供了包括音视频的采集、编解码、网络传输、显示等功能。 但需要配合其他开源server项目。
Jitsi
Jitsi 开源的多人视频会议系统,配合WebRTC。
Java实现,2k star。
janus
WebRTC Server janus,C实现,2.9k star