基于pjsip实现p2p语音对讲

Linux系统下搭建pjsip 1.安装依赖:在开始之前,确保安装了所有必要的依赖。对于 pjsip,这通常包括开发工具和库,如 gcc、make、autoconf 等。你可以使用你的 Linux 发行版的包管理器来安装它们。例如,在基于 Debian 的系统(如 Ubuntu)上,你可以使用以下命令:2.下载pjsip从 pjsip 官网下载最新的源代码。你可以使用 wget 或 curl 命令直接在终端下载。例如:这里的 x.y.z 应该替换为最新的版本号。(我这里下载的是2.14版本,可以直接点击下面链接下载。 阅读详情

目的

为实现跨网络的语音对讲,使位于NAT后的两个设备进行p2p的语音通讯,此处选用pjsip开源项目来实现。
未解决的问题:对称型的NAT无法实现p2p打洞,pjsip采用turn服务进行转发,不能称之为纯粹的p2p。

pjisp简介

PJSIP是一个开放源代码的SIP协议栈,它支持多种SIP的扩展功能 。它的实现是为了能在嵌入式设备上高效实现SIP/VOIP。(摘自百度百科)
项目网址:http://www.pjsip.org/

pjsip的编译

下载并解压相应pjsip源码后,在根目录运行./configure;make dep;make命令即可完成编译。
注:pjsip依赖libasound库,可通过apt-get install libasound2-dev进行安装

pjsip测试程序说明

pjsip提供的文档比较多,比较分散,如果不仔细浏览各个文档,不太容易搞清楚build完的整个工程要如何使用,以及生成的测试程序要如何使用。
首先:工程编译成功后,在pjsip-apps/bin/目录下会生成一些测试程序。其中sample目录下有很多单一功能的测试程序。不过我们更关心的是bin目录下的pjsua-x86_64-unknown-linux-gnu(这里吐槽下pjsip的文档,大部分文档中只会提到pjsua,而不会提到后缀,也没有指出生成目录,导致找了半天找不到pjsua)
pjsua-xxx的使用说明文档:http://www.pjsip.org/pjsua.htm

运行pjsua需要的前置条件

config-file
大家先大致浏览上面的pjsua文档说明,对整个pjsua的选项有个了解。然后我们关注到最后的config_file。
# This is a comment in the config file.
--id sip:alice@example.com
--registrar sip:example.com
--realm *
--username alice
--password secret

sipserver
不了解sip的开发者对上面的sip:example.com 可能会有些疑惑,不知道这个sip:example.com指的是什么?
pjsua这里只是一个客户端,要完成sip的通讯,需要一个sip服务器,我们可以自己搭建,也可以找一些在线的免费sipserver(我只找到一个minisipserver是免费在线可用的,不过十分不稳定)。
自己搭建可以选择opensip等开源的sipserver。
我选择的是minisipserver windows安装版,配置十分简单,具体安装配置参考:http://blog.youkuaiyun.com/cazicaquw/article/details/7345327
安装好后添加两个分机user1:123456,user2:123456后即可进行下一步测试操作。

测试环境搭建
需要三台pc进行测试,两台pc运行./pjsua客户端,一台运行sipserver。另外需要三台路由器,两台pc客户端运行分别运行在两台路由器下,sipserver运行在上级路由网络。

运行pjsip

按照前面的说明,分别生成user1和user2两个conf文件。
在两个客户端系统运行命令:./pjsua-x86_64-unknown-linux-gnu –config-file userX.conf
然后按照提示说明即可完成sip呼叫的过程。不过大概率情况下,你应该是不能进行语音对讲的。因为两个pjsua处于两个不同网络下,需要nat穿透。

nat穿透之–stun-srv

查看pjsip文档,我们发现可以通过–stun-srv选项进行nat穿透。–stun-srv后跟stun server的地址,pjsip的文档提供了一个公网的stun server地址:stun.pjsip.org,不过由于我们的sipserver搭建在内网,所以不能使用这个server,如果你安装minisipserver时留意过会发现,minisipserver也启动了一个stun server服务。这样我们只需要在–stun-srv后跟上我们的minisipserver的地址即可了。
再次运行pjsua客户端,进行呼叫,应该就可以进行语音对讲了。
如果你仍然不能听到语音,请抓包确认是否有rtp,udp包从对端发过来。如果没有,请联系我,并告知你的路由器型号,我正想找一个这种路由器。

nat穿透之–turn-srv

前面如果你遇到语音不通的情况,大概应该是你的路由器的nat模式是对称型的,stun是无法穿透对称型nat的,此处需要用到turn,按照协议介绍turn是对stun的一种补充,对于无法穿透的对称型nat,需要借助turn进行转发,我的理解turn已经不是纯粹的p2p了。
turn server搭建:
这里我们选择restund作为turn server
restund的安装参考:http://nil.uniza.sk/sip/installing-and-configuring-restund-stunturn-server
(注意启动restund服务时,修改/etc/restund.conf里面的server ip)
我们需要将该restund server部署到sipserver同一网络中。
–turn-srv参数:
pjsip文档中关于–turn-srv的sample大概是这样子的:

 Another example to use TURN and ICE:

 $ ./pjsua --use-ice --use-turn --turn-srv turn.pjsip.org --turn-user [username] --turn-passwd ***

不了解turn的对这里的–turn-user和–turn-passwd会十分疑惑。
我们查看restund服务配置/etc/restund.auth:

#
# restund.auth
#
# this file contains a list of authenticated users, with one
# user per line in the format:
#
#     username:HA1
#
# the HA1 value can be calculated using util/genha1.sh
#

# sample user for testing:
#
#     username = demo
#     realm    = myrealm
#     password = secret
#
demo:c5dcdebd926706f33065ec3b65bf103c

这里的默认的username就是demo,password就是secret了。
这样上面的参数可以这么填写:

./pjsua --use-ice --use-turn --turn-srv restund_ip:3478 --turn-user demo --turn-passwd secret

至此,大部分nat后的设备都可以进行p2p的通讯了。

PJSIP视频通话客户端 目录前言语音功能实现编译环境编译视频功能实现编译环境编译客户端总结参考 前言 PJSIP 是一个免费的开源多媒体通信库,用 C 语言编写,实现了基于标准的协议,如 SIP、SDP、RTP、STUN、TURN 和 ICE。它将信令协议 (SIP) 与丰富的多媒体框架和 NAT 穿越功能结合到高级 API 中,该 API 具有便携性,适用于从台式机、嵌入式系统到移动手机的几乎任何类型的系统。 官方网站:https://www.pjsip.org/ PJSIP开源库的架构图如下: 项目实现: 用开源代码实 阅读详情

相关推荐

pjsip移植到Android系统完整指南

详解将pjsip集成到Android平台的全过程,涵盖环境配置、交叉编译与代码适配关键步骤。通过实际操作解决pjsip在移动设备上的运行难题,帮助开发者快速实现VoIP功能。

weixin_28721743的博客 390

【整理】PJSIP开源库详解

PJSIP是一个包含了SIP、SDP、RTP、RTCP、STUN、ICE等协议实现的开源库。它把基于信令协议SIP的多媒体框架和NAT穿透功能整合成高层次、抽象的多媒体通信API,这套API能够很容易的一直到各种构架中,不管是桌面计算机,还是嵌入式设备等 PJSIP组织架构 PJSIP开源库中主要包含两个模块,SIP协议栈(SIP消息处理)和媒体流处理模块(RTP包的处理)。 静态库布...

行到水穷处,坐看云起时 9166

CentOS7和CentOS8 Asterisk 20.0.0 简单图形化界面8--PJSIP的环境NAT设置

asterisk的PJSIP nat环境设置

jia198810的博客 1497

PJSIP开源库详解

当流需要发送外送RTP/RTCP包中,它将调用媒体传输端口API中的pjmedia_transport_send_rtp()和pjmedia_transport_send_rtcp()函数,那个在媒体传输端口的“虚函数指针”(pjmedia_transport_op)中称作“send_rtp()”和“send_rtcp()”方法的简单封装。例如:对于UDP媒体传输端口,它使用pjmedia_transport_udp_create()或pjmedia_transport_udp_create2()函数。..

Lce的专栏 4564

全面掌握PJSIP:多媒体通信库的介绍与开发指南

PJSIP是一个开源的SIP协议栈,支持包括Windows、Linux、MacOS在内的多种操作系统,并且已经广泛应用于各种VoIP和实时通信系统中。PJSIP具备高度可移植性,轻量级、高效并且高度模块化,能够方便地集成到各类项目中。PJSIP项目(也称为PJproject)是一个高质量的开源库,用于实现SIP协议。SIP(Session Initiation Protocol)是IETF定义的一个信令协议,用于创建、修改和终止多媒体会话。

weixin_31860973的博客 2099

PJSIP开发者指南:构建高效的VoIP应用

PJSIP是一个开源的SIP协议栈,提供了一套完整的SIP协议实现。它基于SIP协议,广泛应用于VoIP、即时通讯以及多媒体会议系统中。PJSIP最初由Jeffrey Chilton于2003年开始开发,旨在为开发者提供一个轻量级、可移植、高性能的SIP协议栈。因其自由的开源协议,PJSIP迅速成为通信领域重要的基础设施之一。除了TLS加密传输,PJSIP还支持SRTP(安全实时传输协议)来加密音视频数据流。SRTP为实时传输协议(RTP)提供机密性、消息认证和完整性保护。

weixin_42593549的博客 1384

sip协议学习

学习网址: 媒体协议之SIP协议_nireng666的博客-优快云博客 (4条消息) PJSIP开发手册之总体设计(一)_smllyy的学习时间轴-优快云博客_pjsip

willis 368

pjsip, PJSIP是开源 SIP,媒体和NAT穿越库.zip

pjsip, PJSIP是开源 SIP,媒体和NAT穿越库 PJSIPPJSIP是一个免费的开源多媒体通信库,用C 语言编写,实现了 SIP 。SDP 。RTP 。STUN 。TURN和ICE等标准协议。特性支持的平台:iOS8 支持的体系结构:armv7.armv7s 。arm64.

PJSip的Visual studio 2015下编译

公司准备做一套语音对讲,类似于集群通信的对讲系统,但只是软交换的,并且后续要跟集群对讲关联起来。 做了技术研究,发现使用组播是比较好的,但是互联网下不是允许组播通信的,会引起数据风暴。 最后觉着可能只能通过P2P通信了,关于P2P通信,网上的资料也比较多,但大多基于sip的比较多,开源的更多,sip概念本文不讨论了。sip的厂家也比较多,使用哪家的源码,也众说纷纭,有linphone,reSi...

atrueman123的专栏 2163

pjsipvideo_demo:sip视频和语音客户端演示,接收rtsp媒体流并推送到其他sip客户端。 它使用pjsip,live555和ffmpeg

这个demo主要演示用pjsip做一个sip client做视频对讲。并且视频源采用基于RTSP的IP摄像机, (不象一般的SIP client直接采集USB摄像头再编码,pjsip2已经支持此功能)。 IPCAM可以使用海康摄像机做为测试,但视频源一定要RTSP,海康的SDK无法使用。 SIP SERVER是开源的resiprocate,编译出来可直接使用。 DEMO程序是vc2008写的,包括SIP的登录,发送请求,发送和接收视频并解码播放。可在同一台机器上运行两个实例测试。 ​不过毕竟是DEMO,只是演示怎么使用,细节还有很多问题。以后会逐步修改再提交。如果大家发现问题请发到上,收到后会及时回复。 详细文档在:

Netty UDP

UDP是一种无连接的协议,它并不在通信双方之间建立连接,而是直接将数据包从发送端发送到接收端。UDP不保证数据包的可靠传输,也不保证数据包的顺序,因此其传输速度通常比TCP快,且系统开销较小。然而,这也意味着UDP在某些情况下可能会丢失数据包或数据包到达的顺序错乱。

王小工小工历程 2027

基于WebRTC的C/C++局域网语音通话系统:从搭建到优化全指南

通过上述步骤,我们完成了基于WebRTC和C/C++的局域网语音通话系统核心构建。它实现了低延迟、加密的P2P语音通信,并通过中心信令服务器实现了控制逻辑。可能的改进与扩展方向:支持视频通话:流程与音频高度相似,添加视频轨道和视频渲染模块即可。数据通道(DataChannel):利用在相同的P2P连接上建立低延迟的数据通道,用于传输文件、聊天文字或控制指令,实现音、视、数一体通信。混音与多方通话。

2600_94960118的博客 261

25届电信保研经验贴(空天院)

学校:中九专业:电子信息工程加权:92.89绩点:3.91/4.0rank:前五学期rank2/95,综合排名rank1(前六学期和综合排名出的晚,实际上只用到了前五学期)科研竞赛:市级大创、数模省一、数竞省二,其他校奖若干英语:六级462、四级548个人感觉:rank=科研>竞赛>英语总之rank和科研必须得有一项,要么就rank高,很多强com院校入营看rank。我rank比较有优势,因此报的多是强com院校。要么就科研经历丰富,多主动联系老师,特别是弱com院校。冬令营:空天院。

qq_68608661的博客 6338

pjsip教程-ICE-NAT passthrough

http://www.cnblogs.com/ishang/p/3413232.html PJNATH - Open Source ICE, STUN, and TURN Library  PJNATH (PJSIP NAT Helper)是一个开源的并且是使用标准协议(STUN,TURN,ICE)提供NAT设备穿越功能的库. Background 在现今的

zxygww的专栏 7920

il2cpp分析-gobal-metadata.dat解密

打开ida,把libil2cpp拖到ida中按快捷键Shift+F12等待字符串分析完后,搜索global-metadata.dat。ida中双击sub_57EE7C进入,VS code中也跳转到LoadMetadataFile函数。VSCode打开il2cpp源代码,全局搜索global-metadata.dat。工具:010Editor,IDA 7.5,Jadx,VS Code。判断加密逻辑为根据文件的长度循环读取字节码做亦或加密。双击搜索出来的结果,切记要选il2cpp目录下的。

Android_machong的博客 8024

YOLOv5s模型训练全流程解析:从数据准备到实战检测

本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。

weixin_29041767的博客 333

PJSIP使用流程,基于 simple_pjsua.c

PJSIP的学习

sjd753的博客 3782

大模型LoRA微调调参的实战技巧(持续更新)

本文主要介绍了大模型LoRA微调调参的实战技巧,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战技巧

herosunly的博客 20万+

Windows&Linux | PJSIP使用说明 | 福大嵌入式实时系统课学习 | 音频通话

SIP(Session Initiation Protocol)是一种用于建立、修改和终止多媒体会话的通信协议。它通常用于VoIP(Voice over Internet Protocol)和实时通信中。SIP是一个应用层协议,设计用于在IP网络上进行信号控制。

m0_65890285的博客 1846

SAP PS 收入确认方法配置清单(成本推导收入 / 项目进度推导收入)

摘要:本文详细介绍了SAPPS模块中两种收入确认方法的配置流程:成本推导收入(成本比例法)和项目进度推导收入(里程碑法)。通过事务码OKG1-OKG5等关键配置步骤,分别实现基于累计成本比例和里程碑完成权重的收入确认逻辑。文章对比了两种方法的适用场景和管控要点:成本法适用于成本与进度强相关的项目,需严控预计总成本;进度法则依赖明确的里程碑验收。同时提供了落地建议,包括项目类型绑定、数据校验和变更管控等最佳实践,为SAPPS系统收入确认功能实施提供完整指导。

金牌架构师 952

如何使用GitHub API爬取仓库数据:完整教程及Python实现

通过本教程,你已经掌握了如何使用GitHub API爬取仓库数据,并将这些数据存储和清洗以便后续分析。我们从API认证、数据获取、存储、清洗等方面进行了详细介绍,并展示了如何利用Python进行自动化处理。希望这些代码和技术能够帮助你更好地使用GitHub API进行数据分析。

2201_76125261的博客 783

玩转pjsip之一 简介

简介PJSIP是一个免费的开源多媒体通信库,由C语言编写,实现了基于标准的协议,如SIP,SDP,RTP,STUN,TURN和ICE。 它将信令协议(SIP)与丰富的多媒体框架和NAT穿越功能集成到高级API中,该API是便携式的,适用于几乎任何类型的系统,从台式机,嵌入式系统到移动手持设备。1 安装$ ./configure $ make dep && make clean &a...

kai157346113的专栏 2090

【ARM CoreLink 系列 3 -- CCI-550 控制器介绍 】

Arm CoreLink CCI-550 Cache Coherent Interconnect 扩展了 CoreLink CCI-500。它在 big.LITTLE 处理器集群之间提供完整的缓存一致性,并为其他代理(如 Mali GPU、网络接口或加速器)提供 I/O 一致性。CoreLink CCI-550 提供可扩展和可配置的互连,使 SoC 设计人员能够以尽可能小的面积和功耗满足性能目标,并且还增加了可降低整体系统延迟的监听滤波器。

CodingCos的博客 2210

NAT穿透技术简介和实现方案分析

1. NAT和NAT穿透   NAT的出现是为了解决IPV4地址稀缺的问题,同时起到了防火墙的作用保护了内网的信息安全,但是对于P2P下载来说无疑是很大的阻碍。本文先简单介绍了NAT和NAT穿透的分类,然后就常用的STUN/TURN/ICE进行介绍,最后分析现有的一些ICE开源项目。 1.1 NAT类型介绍   根据RFC3235规定,NAT类型主要有Full Cone NAT(全锥型), Res...

ty的博客 4377

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

PJSIP入门

PJSIP 是一个用 C 语言编写的多媒体通信库,主要特点包括:支持 SIP、SDP、RTP、STUN、TURN 和 ICE非常小巧且高性能可移植到几乎所有平台(Windows、Linux、macOS、嵌入式系统等)提供高级 API 和低级 API。

深之JohnChen的专栏 1110

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 嵌入式软件开发工程师谈软件架构的设计
下一篇: 修过的一个android framework原生系统代码bug
voidreturn
博客等级 码龄10年 53粉丝 45原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值