尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
linux系统移植pjsua库实现sip通话功能 一、概述
本文实现pjsua开源库的交叉编译以及通过调用pjsua库api实现sip语言双向通话功能包括注册上线sip服务器、接收处理指令(电话邀请、挂断等)、双向音频对讲功能。二、交叉编译pjsua库1.解压tar -zxvf 2.15.1.tar.gz; cd pjproject-2.15.1;2.配置编译选项./configure \ --hostarm-linux-gnueabihf \ --prefix$(pwd)/_mini \ --enable-shared \ --disable-video \ --disable-pjsua2 \ --disable-sound \ --disable-ssl \ --disable-ffmpeg \ --disable-v4l2 \ CFLAGS“-Os -DNDEBUG” \ LDFLAGS“-s” \ CCarm-linux-gnueabihf-gcc \ CXXarm-linux-gnueabihf-g \ ARarm-linux-gnueabihf-ar \ RANLIBarm-linux-gnueabihf-ranlib可用选项#禁用高质量的音频处理算法–disable-libwebrtc3.编译安装make depmakemake install4.完成动态库移植动态库路径在 pjproject-2.15.1/_install/lib/5.工程项目编译可能会报错比如大小端未定义makefile加个选项:CFLAGS -DPJ_IS_LITTLE_ENDIAN1 -DPJ_IS_BIG_ENDIAN0 仅供参考6.解决编译警告sip/include/pj/compat/limits.h:38:4: error: #warning limits.h is not found or not supported. LONG_MIN and LONG_MAX will be defined by the library in pj/compats/limits.h and “overridable in config_site.h” [-Werrorcpp] 38 | # warning limits.h is not found or not supported. LONG_MIN and LONG_MAX \ | ^~~~~~~ cc1: all warnings being treated as errors1将/sip/include/pj/config_site.h的文件内容改为点击查看代码(2)将/sip/include/pj/compat/limits.h的点击查看代码改为点击查看代码三、简单了解sip协议SIP会话初始协议是一个在互联网上发起、管理和结束多媒体通信如语音通话、视频会议的信令控制协议。本文只实现语言通话。以下是客户端与服务器和主叫方注册通话等交互的流程1.注册与认证通话准备1用户设备UA向SIP服务器发送 REGISTER 请求包含用户标识如 sip:userexample.com。2若需认证服务器返回 ​401 Unauthorized要求提供凭证如用户名、密码。3终端重新发送带认证信息的 REGISTER服务器验证通过后回复 ​200 OK完成注册。4作用​告知服务器终端可达地址为后续呼叫路由提供依据。2.呼叫建立信令交互1主叫发起邀请a.主叫发送 ​INVITE​ 请求包含被叫URI如 sip:bobdomain.com和媒体描述SDP协议。b.SDP信息包括媒体类型音频/视频编解码格式如G.711、Opus接收音频rtp数据包的IP地址及端口号2被叫响应a.被叫收到 INVITE 后返回 ​100 Trying​处理中。b.若可接听返回 ​180 Ringing​振铃主叫听到回铃音。c.被叫摘机后发送 ​200 OK携带自身SDP参数如接收IP和端口。d.主叫回复 ​ACK​ 确认呼叫正式建立3.会话修改与终止(1)会话修改可选主叫通话中调整参数如切换高清音频时发送 UPDATE​或 RE-INVITE请求重新协商SDP​ (2)终止通话任一方发送 BYE​请求对方回复 200 OK释放媒体资源及网络承载4.通话阶段媒体传输双向RTP语音流主叫 ↔ 被叫​​(1)协议​RTPReal-time Transport Protocol(2)传输内容​a.音频数据包按协商的编解码格式b.语音连续性信息c.时间戳确保音频同步四、代码实现点击查看代码五、TCP/UDP抓包数据分析1.stun查询外网ipstun查询外网ip2.stun返回设备的公网ipstun返回设备的公网ip3.设备NAT打洞成功设备NAT打洞成功4.开始注册开始注册5.服务器应答注册服务器应答注册
RELATED

相关推荐

B站视频下载神器终极指南:轻松获取4K大会员专属内容

B站视频下载神器终极指南:轻松获取4K大会员专属内容

B站视频下载神器终极指南:轻松获取4K大会员专属内容 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 想要随时随地观看B站上…

📅 2026/9/11 8:14:52
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%

Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%

从零手写 Mini Cursor 编程Agent:LangChain.jsDeepSeek全自动创建React TodoList 前言 用过Cursor、Claude Code的前端应该都深有体会: 一句自然语言,AI就能自动创建项目、读写文件、执行终端命令、写完完整业务代码,全程不用手动…

📅 2026/9/10 12:02:11
信息管理与信息系统找工作难吗?岗位方向怎么选

信息管理与信息系统找工作难吗?岗位方向怎么选

信息管理与信息系统,简称信管,找工作并不算“天坑”,但它确实不是一个只靠专业名字就能直接上岸的专业。它的核心优势在于懂业务、懂数据、懂系统,劣势是很多同学学得太散,毕业时不知道自己到底投技术岗、产品岗还是数…

📅 2026/9/11 12:43:30
MORE NEWS

更多资讯

📰

椭圆曲线与魔术公式在轮胎力学中的数学关联与应用

1. 椭圆曲线与魔术公式的数学关联椭圆曲线在现代密码学和数学领域占据着核心地位。魔术公式(Magic Formula)最初由Hans B. Pacejka提出,用于描述轮胎与路面接触时的力学特性。这两者看似毫不相关,实则存在深刻的数学联系。椭圆曲线…

📰

Python float()函数详解:类型转换与精度处理

1. Python float()函数基础解析float()是Python内置的数值类型转换函数,用于将其他数据类型转换为浮点数。这个看似简单的函数在实际开发中却有着丰富的使用场景和需要注意的细节。1.1 float()的基本用法float()函数的基本语法形式非常简单:float([x])其…

📰

React Doctor:React代码质量量化与优化工具

1. React Doctor 项目概述React Doctor 是一款专为 React 生态设计的代码质量量化工具,它能像专业医生一样对你的代码库进行"全身体检"。这个工具最核心的价值在于将原本主观的"代码质量好坏"转化为客观的0-100分的健康评分,让团队对…

📰

Python编程入门:第一次作业设计与教学实践

1. Python第一次作业:从零开始的编程之旅作为一名Python讲师,我每年都会见证数百名学生完成他们的第一次编程作业。这个看似简单的"Python第一次作业"标题背后,其实包含着编程入门的关键里程碑。让我们从实际教学经验出发&#xff…

📰

高校宿舍维修系统微信小程序开发实践

1. 项目概述:高校宿舍维修系统微信小程序的设计与实现高校宿舍维修系统微信小程序是一个基于移动互联网的校园服务应用,旨在解决传统宿舍报修流程繁琐、响应慢、追踪难等问题。这个小程序采用微信生态作为入口,后端基于Java技术栈构建&#x…

📰

Wazuh 5.x SCA 自定义策略迁移指南:从 4.x 格式到 PCRE2 与 YAML 新规范的完整实战

Wazuh 5.x SCA 自定义策略迁移指南:从 4.x 格式到 PCRE2 与 YAML 新规范的完整实战 【免费下载链接】wazuh Wazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads. 项目地址: https://gitcode.com/Git…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬