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.服务器应答注册服务器应答注册

相关新闻

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

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

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

2026/9/23 5:43:04 阅读更多 →
RAG技术解析:大语言模型与知识检索的融合应用

RAG技术解析:大语言模型与知识检索的融合应用

1. RAG技术核心解析:当大语言模型遇上知识检索检索增强生成(Retrieval-Augmented Generation,简称RAG)正在重塑AI内容生成的技术范式。这项技术的本质是将大语言模型(LLM)的生成能力与精准的信息检索系统相…

2026/9/22 19:56:36 阅读更多 →
基于BERT与BiLSTM的智能论文降重系统设计与实践

基于BERT与BiLSTM的智能论文降重系统设计与实践

1. 项目背景与需求分析2025届毕业生面临的学术写作挑战中,论文查重是最令人头疼的问题之一。随着学术规范日益严格,各大高校对论文重复率的容忍度越来越低,部分985院校甚至将硕士论文的重复率门槛降至8%以下。传统的人工降重方式效率低下&…

2026/9/15 8:43:05 阅读更多 →

最新新闻

图解原理好租网上海租房源码拆解与避坑

图解原理好租网上海租房源码拆解与避坑

图解原理好租网上海租房源码拆解与避坑 官方文档冗长且晦涩,导致开发者在对接好租网上海租房接口时往往迷失在参数细节中。很多老手都知道,想要彻底搞懂数据流转逻辑,靠读文档是效率最低的方式,必须直接上 图解原理 配合源码剖析。…

2026/9/23 17:58:13 阅读更多 →
Python图像识别主板质检系统:从采集到自校准全链路

Python图像识别主板质检系统:从采集到自校准全链路

简介:这份资源是一套基于Python与图像识别技术实现的主板质量检测系统源码,面向计算机视觉学习者、工业质检方向开发者以及需要完成相关课程设计或毕业设计的学生。它围绕主板外观缺陷识别这一实际场景,提供从图像预处理、模型推理到界面交互…

2026/9/23 17:58:13 阅读更多 →
5个红圈营销性能避坑指南

5个红圈营销性能避坑指南

5个红圈营销性能避坑指南 官方文档翻了三遍还是觉得像天书?别慌,这不是你笨,是文档只讲“是什么”,没讲“怎么跑得快”。今天直接上红圈营销源码里的真实场景,给你一份能落地的性能避坑指南。咱们不整虚的,直接看代码怎么从卡成PPT优化到丝般顺滑,…

2026/9/23 17:58:13 阅读更多 →
obsidian-livesync 插件设置项全解:从远程数据库、端到端加密到 Hatch 急救机制

obsidian-livesync 插件设置项全解:从远程数据库、端到端加密到 Hatch 急救机制

数据同步 【免费下载链接】obsidian-livesync 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-livesync 点击查看 免费下载 Self-hosted LiveSync(本仓库)是 Obsidian 的一款自托管实时同步插件,通过 CouchDB、S3 兼容对…

2026/9/23 17:58:13 阅读更多 →
搜索引擎进化史:从黄页到AI搜索,大搜索时代的范式转移

搜索引擎进化史:从黄页到AI搜索,大搜索时代的范式转移

你有没有发现,自己已经很久没有专门“打开搜索引擎”这个动作了?查资料直接去微信里搜,买东西直接进淘宝,找一部老电影直接去短视频平台里搜。搜索引擎并没有消失,而是碎成了无数个垂直入口。但要说清楚这件事&#xf…

2026/9/23 17:58:13 阅读更多 →
区域二元线性回归图像恢复:原理、Python实现与调参指南

区域二元线性回归图像恢复:原理、Python实现与调参指南

简介:这份资源面向人工智能课程学习者与期末作业备考者,提供一套基于区域二元线性回归模型完成图像恢复的完整Python实现方案。实验从生成受损图像入手,通过noise_mask_image接口为原图叠加每行噪声比率为0.8、0.4、0.6的{0,1}噪声遮罩&#…

2026/9/23 17:57:12 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →