linux 点对点语音通话及直播推流实践三:嵌入式无GUI Linux VoIP语音对讲方案
Linux VoIP语音对讲方案
- VoIP介绍
- 工作原理
- 优势
- 应用场景
- PJSIP项目介绍
- **概述**
- **功能特点**
- **应用场景**
- PJSIP安装配置
- PJSIP端到端语音通话
- 启动界面
- 语音通话方法一
- 语音通话方法二
- 常见问题
- #打开 pjsip失败bind() error: Address already in use
- 接通后无声音
- 检查声卡
- 检查bind的网卡
- Linux下有众多VoIP工具,如linphone, 很容易实现局域网音视频通话功能 ,但是大多依赖图形界面GUI, 无法在无屏的嵌入式设备上使用, 本文推荐一个开放SIP工具, 可基于文本界面,在linux命令行终端上实现端到端的VoIP语音通话。
- 此外,文中还总结了PJSIP使用过程中,遇到的启动失败、没有声音等问题和解决方法。
VoIP介绍
VOIP(Voice over Internet Protocol)即互联网协议语音技术,是一种将模拟的语音信号数字化,然后通过互联网协议(IP)进行传输的技术。简单来说,就是通过网络来传输语音通话,而不是传统的电话线路。
工作原理
- 信号采集与转换:语音信号通过麦克风等设备被采集,然后进行模数转换,将模拟语音信号转换为数字信号。
- 编码压缩:接着,这些数字信号会被压缩编码,采用如 G.711、G.729 等编码标准,以减少数据量,方便在网络中传输。
- 封装传输:编码后的信号会被封装成 IP 数据包,通过互联网进行传输。
- 解包还原:在接收端,IP 数据包被解包,然后解码,将数字信号还原为模拟语音信号,最后通过扬声器等设备播放出来。
优势
- 成本较低:对于长途和国际通话来说,VOIP 的费用通常比传统电话通信要低得多。因为它主要利用现有的互联网网络,不需要像传统电话那样建设和维护庞大的电话交换网络,从而降低了通信成本。
- 灵活性高:只要有网络连接,用户可以通过各种设备(如智能手机、平板电脑、电脑等)进行通话。例如,在出差或旅行时,使用 VOIP 软件可以在移动设备上方便地拨打和接听电话,不受地理位置的限制。
- 功能丰富:除了基本的语音通话功能外,还可以提供视频通话、语音邮件、即时消息、呼叫转移、会议通话等多种功能。这些功能为用户提供了更加多样化的通信体验,满足了不同的通信需求。
应用场景
- 企业通信:企业可以利用 VOIP 构建内部通信系统,实现员工之间的免费通话、视频会议等功能,提高工作效率,降低通信成本。例如,一家跨国公司可以通过 VOIP 系统让不同国家的分支机构进行便捷的沟通。
- 家庭通信:家庭用户可以使用 VOIP 服务代替传统的固定电话,或者作为手机通信的补充。比如,一些家庭通过安装 VOIP 设备,使用较低的费用拨打本地和长途电话,同时还能享受视频通话等功能,方便与远方的亲人朋友联系。
- 客服中心:许多客服中心采用 VOIP 技术,客服人员可以通过网络接入呼叫中心系统,方便地接听客户来电,并且可以灵活地调整客服人员的工作地点,不受地域限制。同时,还可以利用 VOIP 的一些功能,如呼叫排队、自动语音应答等,提高客服中心的服务质量。
PJSIP项目介绍
概述
- PJSIP 是一个开源的、跨平台的 SIP(Session Initiation Protocol)协议栈。SIP 是一种用于建立、修改和终止多媒体会话(如语音和视频通话)的应用层协议,而 PJSIP 为开发人员提供了实现 SIP 功能的工具和库。
功能特点
- 协议支持完整
- 它全面支持 SIP 协议,包括 SIP - RFC3261 标准以及一系列相关的扩展。这使得它能够处理复杂的会话建立和管理流程,如注册、呼叫建立、会话维持和拆除等。例如,在实现一个基于 SIP 的 VoIP 电话系统时,PJSIP 可以准确地按照 SIP 协议规范来处理客户端与服务器之间的信令交互。
- 跨平台性
- PJSIP 可以在多种操作系统上运行,包括但不限于 Linux、Windows、macOS、iOS 和 Android。这种跨平台的特性使得开发者能够使用相同的代码库来构建在不同设备和操作系统上运行的通信应用。例如,一个通信软件公司可以利用 PJSIP 开发出既能在桌面电脑上运行,又能在移动设备上使用的统一通信应用。
- 高性能和可扩展性
- 具有高效的内存管理和处理机制,能够处理大量的 SIP 会话。它可以在资源有限的设备上良好地运行,同时也能够轻松扩展以应对高负载的通信场景。例如,在一个大型呼叫中心系统中,PJSIP 可以有效地管理众多客服人员与客户之间的 SIP 呼叫,确保系统的稳定性和性能。
- 丰富的媒体处理能力
- 除了信令处理,PJSIP 还支持多种媒体编解码器,如 G.711、G.722、G.729 等音频编解码器,以及 H.264 等视频编解码器。这使得它能够支持高质量的语音和视频通信,满足不同用户和应用场景的需求。例如,在视频会议应用中,PJSIP 可以利用这些编解码器来确保清晰流畅的视频和音频传输。
- 安全性高
- 提供了安全机制来保护通信的隐私和完整性。它支持 TLS(Transport Layer Security)和 SRTP(Secure Real - Time Transport Protocol)等安全协议,用于加密 SIP 信令和媒体流。例如,在涉及敏感信息的企业通信或金融机构通信中,PJSIP 可以通过这些安全协议防止通信内容被窃取或篡改。
应用场景
- VoIP 通信应用
- 是开发 VoIP 电话、软电话等语音通信应用的理想选择。开发者可以利用 PJSIP 构建功能强大的语音通话软件,支持呼叫转移、来电显示、语音信箱等多种功能。例如,许多开源的软电话应用都是基于 PJSIP 开发的,为用户提供了低成本、高质量的语音通信服务。
- 视频会议系统
- 在视频会议软件的开发中发挥重要作用。它能够处理视频会议中的复杂信令流程,如会议邀请、参与者加入和离开等,同时确保高质量的视频和音频传输。例如,一些企业内部使用的视频会议系统就是基于 PJSIP 构建的,方便员工之间进行远程协作和沟通。
- 即时通讯软件
- 对于支持语音和视频通话功能的即时通讯软件来说,PJSIP 是一个关键的组件。它可以帮助软件实现实时的语音和视频通信,增强用户之间的互动体验。例如,一些社交即时通讯软件在添加语音和视频聊天功能时会采用 PJSIP 来确保通信质量。
PJSIP安装配置
分别在两台设备上安装pjsip.
#下载 pjsip
wget https://github.com/pjsip/pjproject/archive/refs/tags/2.13.1.tar.gz
#安装
./configure
make dep
make
PJSIP端到端语音通话
启动界面
pjproject-2.13.1/pjsip-apps/bin$ ./pjsua-x86_64-unknown-linux-gnu
+=============================================================================+
| Call Commands: | Buddy, IM & Presence: | Account: |
| | | |
| m Make new call | +b Add new buddy | +a Add new accnt.|
| M Make multiple calls | -b Delete buddy | -a Delete accnt. |
| a Answer call | i Send IM | !a Modify accnt. |
| h Hangup call (ha=all) | s Subscribe presence | rr (Re-)register |
| H Hold call | u Unsubscribe presence | ru Unregister |
| v re-inVite (release hold) | t Toggle online status | > Cycle next ac.|
| U send UPDATE | T Set online status | < Cycle prev ac.|
| ],[ Select next/prev call +--------------------------+-------------------+
| x Xfer call | Media Commands: | Status & Config: |
| X Xfer with Replaces | | |
| # Send RFC 2833 DTMF | cl List ports | d Dump status |
| * Send DTMF with INFO | cc Connect port | dd Dump detailed |
| dq Dump curr. call quality | cd Disconnect port | dc Dump config |
| | V Adjust audio Volume | f Save config |
| S Send arbitrary REQUEST | Cp Codec priorities | |
+-----------------------------------------------------------------------------+
| q QUIT L ReLoad I IP change n detect NAT type |
| sleep MS echo [0|1|txt] |
+=============================================================================+
You have 0 active call
>>>
语音通话方法一
cd pjsip-apps/bin
#被叫设备先启动
./pjsua-x86_64-unknown-linux-gnu
#主叫发起呼叫:
./pjsua-x86_64-unknown-linux-gnu sip:192.1.30.11
#被叫接听
# 被叫端听到振铃后,依次输入a、200,即可建立连接进行通话。
语音通话方法二
##使用simple_pjsua
#被叫:
test@test:~/tool/pjproject-2.13.1/pjsip-apps$ ./bin/samples/x86_64-unknown-linux-gnu/simple_pjsua
#主叫: 192.1.30.11为被叫IP.
test@test:~/tool/pjproject-2.13.1/pjsip-apps$ ./bin/samples/x86_64-unknown-linux-gnu/simple_pjsua sip:192.1.30.11
常见问题
#打开 pjsip失败bind() error: Address already in use
原因为端口被占用。
##打开 pjsip失败
pjsua_core.c bind() error: Address already in use [status=120098]
#查看端口占用
sudo netstat -nlp|grep 5060
#查到占用进程后,kill掉即可。
接通后无声音
检查声卡
使用pjsip进行声卡录放音检查。
#录音
cd /home/test/tool/pjproject-2.13.1/pjsip-apps/bin/samples/x86_64-unknown-linux-gnu
./recfile file.wav
#放音
../../pjsua-x86_64-unknown-linux-gnu --log-level=5 --play-file file.wav
检查bind的网卡
如何设备上有多个网卡,要使用命令指定用于VoIP的网卡。