SIP小结

Exosip分析 阅读详情

最近比较闲,以前的项目是一个可以打软电话的,很好奇电话是怎么打出去的。于是利用空余时间看了下以前的源代码,顺便找了点SIP的资料,下面是一个小小的总结。还有很多不足的地方。以后有机会再慢慢补充。

SIP其实就是一个新型的协议,是受现在互联网发展而诞生出来更适应当今网络潮流的一个信令控制协议,用在voip电话中。现在还不是很成熟,但是精简,扩展性好,未来有很好的发展前景。

SIP是一个应用层的信令控制协议,用来创建,修改和释放一个或多个参与者的会话。

SIP的3种呼叫方式:直接呼叫,重定向呼叫,代理呼叫

SIP的6种信令:REGISTER,INVITE,ACK,OPTIONS,CANCLE,BYE

SIP的5种信令功能:

用户定位,

用户通信能力协商(用户以什么方式打电话),

用户意愿交互(用户是否愿意接听呼叫)

建立呼叫

呼叫处理控制。


使用exosip实现SIP呼叫。

初始化exosip库:
eXosip_init()
监听一个指定的端口:
 int exosip_listen_addr (int transport, const char *addr, int port, int family,  int secure);
设置SIP包头域,即SIP客户端的名称:
 void eXosip_set_user_agent (const char *user_agent);
清除认证信息
  int eXosip_clear_authentication_info (void);
添加认证信息:
eXosieXosip_add_authentication_info(m_strUserName.c_str(),m_strAuthName.c_str(),m_strPassword.c_str(), "md5", NULL);
初始化一个注册ID并生成一个注册包
  int eXosip_register_build_initial_register (const char *from, const char *proxy,
                                                                const char *contact, int expires,
osip_message_t ** reg);

发送注册请求:invite
eXosip_register_send_register(nRegID, pRegMsg);

等待exosip注册结果事件返回

  eXosip_event_t *eXosip_event_wait (int tv_s, int tv_ms);

第一次会返回一个401或407的错误,要求对终端用户进行验证,这时需要发送一个默认请求(包括ACK和INVITE)

eXosip_default_action(pEvent);

继续等待返回结果:

 eXosip_event_t *eXosip_event_wait (int tv_s, int tv_ms);

如果邀请成功EXOSIP_REGISTRATION_SUCCESS

获取返回的消息结构体

 sdp_message_t *pMsg = eXosip_get_remote_sdp(pEvent->did);

根据消息里的类型判断,

1)如果是正在接通中EXOSIP_CALL_PROCEEDING或EXOSIP_CALL_RINGING

从消息结构体中获取媒体声音用于使对方振铃

 sdp_media* pMediaRemote = eXosip_get_audio_media(pMsg);

使对方振铃

2)如果对方已经接听了EXOSIP_CALL_ANSWERED

从消息结构体中获取媒体声音用于使对方振铃

 sdp_media* pMediaRemote = eXosip_get_audio_media(pMsg);

之后构建并发送一个ACK请求告知 200OK已经收到

eXosip_call_build_ack(pEvent->did,&pOsipMsg);

eXosip_call_send_ack(pEvent->did,pOsipMsg);

结束通话发送bye请求

int eXosip_call_terminate (int cid, int did);







Linux及Windows下编译exosip和osip2源码 Linux和Windows平台下exosip及osip库的编译和应用 阅读详情

相关推荐

SIP协议栈eXosip2分析

接上篇SIP协议栈OSIP分析: https://blog.youkuaiyun.com/wwwyue1985/article/details/119520682 eXosip2基于OSIP,提供上层接口,版本也为2-3.1.0,仅供参考。 一关于exosip 2 二exosip的模块构成 2 三关键数据结构说明 2 四exosip的初始化 6 五数据收发整体框架 8 六exosip与上层应用以及osip之间的流程关系 10 七数据结构体之间的关系 11 八参考资料 12 一 ...

wwwyuewww的专栏 3909

FFmpeg4.3系列之28:SIP+eXosip+pjsip小白入门

敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。我将带领大家一起来学习:学习sip协议的基本原理、流程、结构;编译开源库源码osip,eXosip,pjsip(包括windows和Linux两套环境);使用eXosip或pjsip进行案例实战;具体内容包括:  1.sip协议讲解,包括原理、结构、协议内容、流程分析等。2.osip与eXosip的源码编译,使用eXosip进行案例实战并详解流程。3.pjsip的源码编译,使用pjsip进行案例实战并详解流程。

JAIN SIP API详解与GB28181服务器实现【保姆级源码教程】

这篇文章展示了基于Java SE如何创建客户端侧的SIP应用。JAIN SIP API是一个强大的“SIP协议栈”。本文将通过一个简单的即时通讯程序以及一个GB28181协议的简单应用程序,详细的分析该技术。 详细的代码说明,SIP学习一眼便会!玩转Java信令服务器的开发,玩转Java音视频,玩转融合通信!

qq_27890899的博客 1万+

SIP协议详解&eXosip源码库用法分析

1、概述 1.1 SIP概念       会话初始协议SIP(Session Initiation Protocol)是一个应用层的控制协议,可以建立、修改和结束多媒体的会话。它是由IETF提出并主持研究的一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创建、修改、和终结一个或多个参加者参加的会话进程。这些会话包括Internet多媒体会议、Internet电话、远程教育以及远程医疗等

Jeffrey0000的专栏 1万+

自锁电路设计

Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位,当需要复位的时候志需要将反向端的二极管拉低一下即可,免去 三极管控制同相端和电源短接的麻烦。图1:比较器构建的自锁电路也可以使用555去构建,如下图2所示.图2:使用555构建的自锁电路工作原理见555的真值表,真值表如表1所示.表1:555电路真值表相对来说555还是比较贵,所以我就想能不能有个便宜的方法做个自锁电路,构建电路如下图3所示

weixin_43884675的博客 7063

轻量级替代方案:用AIFlowy + Ollama在本地快速搭建一个可用的AI智能体平台

本文介绍了如何使用AIFlowy和Ollama在本地快速搭建轻量级AI智能体平台,涵盖从环境准备到智能体集成的全流程。通过简化部署步骤和优化性能,15分钟内即可完成搭建,适用于原型验证和小团队协作,显著提升开发效率。

weixin_29207533的博客 218

路由有关的SIP消息头的简单小结

一、SIP协议中定义的路由相关字段(Via、Route、Record-Route)1. Via:当UAC发起一个SIP Request消息时,消息经过的每一跳(包含发起方)都会在SIP消息中增加一个Via字段,内容为自己的地址信息,表示此消息通过此地址发往下一跳。为什么要增加Via字段来记录Request消息经过的地址呢?实际上这个地址信息将被作为Request消息对应的Response消息的路由...

daitu3201的博客 2702

QMT量化交易实战:如何用通达信预警数据自动买卖股票(附完整Python代码)

本文详细介绍了如何利用QMT平台对接通达信预警数据,构建自动化股票交易系统。通过完整的Python代码示例,展示了从数据获取到订单执行的全流程,帮助投资者实现量化交易策略的自动化执行,提升交易效率。

weixin_29234423的博客 210

FreeSWITCH小结:关于sip的UDP、TCP与MTU

1、关于SIP的UDP与MTU的关系 如果sip消息的大小超过了MTU,则有可能被网络中的某一节点分片,而UDP处理分片会有很大的问题,从而导致sip消息传输失败。要解决该问题的话,两种方案: 1)减少sip消息的体积,比如减少codecs、x headers等 2)使用tcp来替代udp传输sip消息 这就是为什么sip终端要同时支持tcp与udp的原因。 2、为什么TCP传输sip不会出现问题...

weixin_30788619的博客 1801

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

串口通信的性能瓶颈分析:如何提高数据吞吐量和降低延迟

摘要: 串口通信在高频或大数据场景下存在吞吐量不足、延迟高、丢帧等问题,主要瓶颈包括波特率限制、缓冲区不足、CPU轮询延迟等。优化策略包括:提升波特率至硬件上限、增大缓冲区、采用异步I/O(如ReadAsync)减少线程切换,使用二进制协议降低解析开销。实时性方面需启用硬件流控、批量发送数据,并优化线程优先级。跨平台适配需区分Windows/Linux的缓冲区设置与异步机制。性能测试可通过吞吐量、延迟及回环测试验证优化效果,核心原则是硬件匹配、异步处理、协议优化与跨平台适配。(150字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 980

DeskcommCRM:为坐班沟通团队量身打造的桌面型CRM系统实践

在客户关系管理(CRM)领域,传统移动型CRM偏向外出拜访场景,却难以适配固定工位、高频沟通的坐班团队。这类团队每天处理大量电话、消息与工单,核心痛点是沟通记录散落、跟进不及时、管理数据滞后。解决思路并非把记录变成额外负担,而是将数据采集嵌入工作流——来电弹屏自动带出客户档案,挂断后一键生成结构化小结,任务到期自动提醒,管理看板实时暴露转化漏斗问题。这套桌面沟通型CRM系统覆盖客户查重、沟通记录、自动化任务、权限审计等关键模块,适用于客服、电话销售、订单处理与售后跟进场景。通过合理的字段定义、数据清洗和分阶

weixin_26767391的博客 144

37、免驱动USB双目同步测距3D活体深度检测和RV1126结合V4L开发USB摄像头使用

基本思想:需要使用双目摄像头在rv1126上进行活体检测,然后将画面实时返回到桌面上,记录一下。第二步:刷机rv1126开发板系统和ssh远程连接,见参考目录。第一步:购买可见光的红外摄像头,见参考连接,在PC端测试可用。

sxj731533730 2620

开源 SIP 协议栈介绍

Sofia-SIP 是用 ANSI C 开发的事件驱动型 SIP 协议栈,被广泛用于 FreeSWITCH 等通信系统中。PJSIP 是一套跨平台的 C 语言多媒体通信库,涵盖 SIP、SDP、RTP、ICE 等协议,适用于桌面和移动平台。reSIProcate 是由 SIPfoundry 社区发起的 C++ SIP 协议栈项目,具备较强的可扩展性和功能完整性。Kamailio 是基于 SIP Express Router(SER)的高性能 SIP 服务器项目,支持大规模分布式部署。

至虛極,守靜篤 1890

手把手教你学Simulink--基于Simulink的风力发电系统用双馈电机控制仿真建模

特点高效节能:在广泛的风速范围内保持高效的能量转换。独立控制有功和无功功率:通过控制转子电流实现对有功和无功功率的独立调节。较低的成本:相比直接驱动或全功率变流器方案,成本较低。挑战控制复杂度较高:需要复杂的控制算法来实现有功和无功功率的解耦控制。对电网波动敏感:需要良好的稳定性控制策略以应对电网电压波动。利用Simscape Electrical中的模块构建DFIG的物理模型,配置参数如电阻、电感、极对数等。matlab深色版本% 添加DFIG电机模块。

MHD0815的博客 346

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

sip服务器

https://baike.baidu.com/item/SIP%E6%9C%8D%E5%8A%A1%E5%99%A8/2173945?fr=aladdin SIP(Session Initiation Protocol,会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务。因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络...

sun007700的专栏 3031

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

sip协议详解_SIP协议详解-INVITE消息发送过程

SIP协议是VoIP中最重要的信令控制协议。SIP中第一件事情就是主叫发送INVITE给被叫,被叫响铃。本文从多角度详细描述INVITE消息发送的全过程。一、阅读RFC权威描述关于INVITE消息发送,先查看RFC 3261中权威描述:INVITE client transaction: https://tools.ietf.org/html/rfc3261#page-128从TU收到发送INVI...

weixin_39760967的博客 4761

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SIP 协议原理及应用精解

SIP(会话发起协议)是IETF提出的多媒体会话信令控制协议,用于建立、修改和中断IP电话及多媒体会话。本文系统介绍了SIP协议的核心内容: 协议概述:SIP独立于底层网络,通过SDP描述会话特征,采用请求-响应机制,类似HTTP。 核心组件:包括用户代理(UA)、注册服务器、代理服务器和重定向服务器,共同完成会话建立。 消息机制:详细解析了INVITE、ACK等6种常用方法及1xx-6xx响应码,提供典型INVITE报文示例。

REDcker的博客 2699

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIP协议详解

SIP协议概念 ** 会话启动协议SIP(Session Initiation Protocol)是一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创   建、修改、和终结一个或多个参加者参加的会话进程。 ** SIP协议可用于发起会话,也可以用于邀请成员加入已经用其它方式建立的会话。 ** SIP协议透明地支持名字映射和重定向服务,便于实现ISDN、智能网以及个人移

docblue logging 5179

SIP 路由

SIP ##SIP 路由 路由有关的SIP消息头的简单小结

michaelysj的专栏 400

Opensip 小结

优异的SIP解决方案:OpenSIPS 1. OpenSIPS简介 OpenSIPS是一个成熟的SIP标准的开源实现;除了提供基本的SIP代理及SIP路由功能外,它还提供了多种应用级的功能。OpenSIPS的核心路由功能非常高效,并能灵活地通过脚本定制各种路由策略。凭借其可扩展、模块化的系统架构,OpenSIPS能够根据需要,灵活地提供语音、视频通信、即时通讯、呈现、鉴权计费等多种功能。 O

ceasar11的专栏 3292

手机转SIP-手机做中继网关变落地线路-手机如何实现双卡轮流外呼

我们这个篇章中,针对外呼时切换SIM卡进行轮呼的策略进行设计,规划在手机app上做外呼业务的轮流呼叫场景中,确认到底什么时候才需要进行轮流外呼。通过设置app轮流外呼策略,我们实现了将“手机转SIP软交换呼叫中心”对接的【1个SIP网关账号对2张SIM卡】的本地轮呼的功能,用户可以使用电脑坐席,通过这个手机轮流调用两张SIM手机卡,正常的拨打电话给目标电话。方便用户进行批量外呼和智能通话调度。

limingade的博客 1534
上一篇: iphone开发 音频播放
下一篇: jsoncpp使用
sandy_shell
博客等级 码龄15年 17粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值