SIP协议之呼叫保持(HOLD)

  呼叫保持(HOLD)是SIP协议应用中的一个重要功能,用于实现不挂断电话而达到暂停媒体(常见于音频,视频很少用)的目的,而解保持操作会恢复通话。

一、保持/解保持实现机制

1.1 保持

  保持发起方(保持方)通过发送INVITE(一般称为re-invite)消息重新协商媒体(SDP)信息, 保持方将SDP媒体属性设置为sendonly, 对方将200应答消息中的SDP媒体属性设置为recvonly,经过上述协商后,保持发起方停止发送接收媒体,被保持方只接收媒体,一般会由服务器向被保持方发送保持提示媒体(音乐)。

1.2 解保持

  保持发起方(保持方)通过发送INVITE(一般称为re-invite)消息重新协商媒体(SDP)信息,保持方将SDP媒体属性设置为sendrecv, 对方将200应答消息中的SDP媒体属性设置为sendrecv,经过上述协商后,保持发起方开始发送和接收媒体,被保持方也开始发送和接收媒体,主被叫恢复正常通话。

注: re-invite是已建立的通话中发送的INVITE消息,属于带内(会话内)消息,wireshark解析报文标识为in-dialog
在这里插入图片描述

二、协议分析

SDP中媒体方向属性有四种取值,如下:

  • sendrecv: 表示该端既发送媒体流,又接收媒体流
  • inactive:表示该端既不发送媒体流,也不接收媒体流。可用于临时禁用媒体流,例如,暂时关闭音频或视频功。
  • sendonly: 表示该端只发送媒体流,不接收任何媒体流
  • recvonly:表示该端只接收媒体流,不发送任何媒体流

SDP示例
v=0
o=- 3899965522 3899965526 IN IP4 192.168.1.16
s=SDP
c=IN IP4 192.168.1.16
t=0 0
m=audio 10008 RTP/AVP 9 0 8 18 102 97 101
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:102 opus/48000
a=fmtp:102 maxplaybackrate=16000;sprop-maxcapturerate=16000;maxcodedaudiobandwidth=16000
a=rtpmap:97 iLBC/8000
a=fmtp:97 mode=20
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendonly

三、报文实例

3.1 保持流程图

在这里插入图片描述

3.2 解保持流程图

在这里插入图片描述

3.3 信令示例

保持方发起INVITE
INVITE sip:1001@192.168.1.200:5060;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 192.168.1.16:5060;rport;branch=z9hG4bKPjpHJsJomm.pSb43QJmGQ1nq3IwtDqoUvv
Max-Forwards: 70
From: “1000” sip:1000@192.168.1.200;tag=t88GJjOmQ10OnMuh1bAzHNEhjKAfj-9g
To: sip:1001@192.168.1.200;tag=F136cS62FtXNr
Contact: “1000” sip:1000@192.168.1.16:5060
Call-ID: 43cxWXKwy.IabssyG9hdr0SMLgHdcPpy
CSeq: 1084 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel
User-Agent: VoIP
Content-Type: application/sdp
Content-Length: 463

v=0
o=- 3899965522 3899965526 IN IP4 192.168.1.16
s=SDP
c=IN IP4 192.168.1.16
t=0 0
m=audio 10008 RTP/AVP 9 0 8 18 102 97 101
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:102 opus/48000
a=fmtp:102 maxplaybackrate=16000;sprop-maxcapturerate=16000;maxcodedaudiobandwidth=16000
a=rtpmap:97 iLBC/8000
a=fmtp:97 mode=20
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendonly

被保持方响应200-OK:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.16:5060;rport=5060;branch=z9hG4bKPjpHJsJomm.pSb43QJmGQ1nq3IwtDqoUvv
From: “1000” sip:1000@192.168.1.200;tag=t88GJjOmQ10OnMuh1bAzHNEhjKAfj-9g
To: sip:1001@192.168.1.200;tag=F136cS62FtXNr
Call-ID: 43cxWXKwy.IabssyG9hdr0SMLgHdcPpy
CSeq: 1084 INVITE
Contact: sip:1001@192.168.1.200:5060;transport=udp
User-Agent: FreeSWITCH-mod_sofia/1.10.9-release~64bit
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 234

v=0
o=FreeSWITCH 1690944859 1690944861 IN IP4 192.168.1.200
s=FreeSWITCH
c=IN IP4 192.168.1.200
t=0 0
m=audio 31858 RTP/AVP 9 101
a=rtpmap:9 G722/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=recvonly
a=ptime:20

四、SIP呼叫保持应用场景

  1. 通话中的一方需要短暂离开通话时,将呼叫切换到保持状态

  2. 当一方需要将通话转接给其它人或部门时,可以先将通话保持,然后与第三方进行咨询转接,将通话转接给第三方

  3. 通话中,有新呼入通话时,用户可以将当前呼叫保持,然后接听新呼叫。新呼叫挂断后,切换回被保持的呼叫,解保持后继续通话

  4. 当销售/客服坐席在与客户通话中,需要查询信息或与其他人沟通时,可以先将呼叫保持,获取到信息或协商完成后,再恢复与客户的通话

五、关键说明

  • SDP中的a=sendrecv属性可以省略,该属性不存在时,默认为sendrecv
  • 保持后,一般由服务器向被保持方播放友好提示音乐(如萨克斯演奏的音乐)
  • 有些终端也会使用a=inactive实现保持功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79371.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TS协议之PES(ES数据包)

TS协议之PAT(节目关联表)TS协议之PMT(节目映射表)TS协议之PES(ES数据包) 该文档已上传:下载地址 1. 概要 1.1 TS数据包(PES)协议数据组成 TSTS头PES头ES。TS&#xf…

使用Python将图像转换为PDF:一次性解决您的批量转换需求

导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…

uniapp运行项目到iOS基座

2022年9月,因收到苹果公司警告,目前开发者已无法在iOS真机设备使用未签名的标准基座,所以现在要运行到 IOS ,也需要进行签名。 Windows系统,HBuilderX 3.6.20以下版本,无法像MacOSX那样对标准基座进行签名…

八、ESP32控制8x8点阵屏

引脚的说明如下 上图中 C表示column 列的意思,所有的C接高电压,即控制esp32中输出1L表示line 行的意思,所有的L接低电压,即控制esp32中输出为01. 运行效果 2. 点阵屏引脚

【Java可执行命令】(十七)JVM运行时信息动态维护工具 jinfo:一个维护 JVM 相关的配置参数和系统属性的工具,辅助故障排除、诊断和优化 ~

Java可执行命令之jinfo 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 -flags&#xff1a;查看进程的启动参数3.3 -sysprops&#xff1a;查看进程的系统属性3.4 -flag < name>&#xff1a;查看特定虚拟机参数的值3.5 -flag [/-]< name>&#xff1a;启用或禁…

企业如何实现自己的AI垂直大模型

文章目录 为什么要训练垂直大模型训练垂直大模型有许多潜在的好处训练垂直大模型也存在一些挑战 企业如何实现自己的AI垂直大模型1.确定需求2.收集数据3.准备数据4.训练模型5.评估模型6.部署模型 如何高效实现垂直大模型 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页…

HadoopWEB页面上传文件报错Couldn‘t upload the file course_info.txt

HadoopWEB页面上传文件报错Couldn’t upload the file course_info.txt 右键F2检查发现&#xff1a;文件上传PUT操作的IP地址是节点IP别名识别不到导致 解决方法&#xff1a;在WEB页面访问浏览器所在机器上面配置hosts映射地址(注意:配置的是浏览器访问的地址不是hadoop节点所在…

探索Python数据容器之乐趣:列表与元组的奇妙旅程!

文章目录 零 数据容器入门一 数据容器&#xff1a;list(列表)1.1 列表的定义1.2 列表的下表索引1.3 列表的常用操作1.3.1 列表的查询功能1.3.2 列表的修改功能1.3.3 列表常用方法总结 1.4 补充&#xff1a;append与extend对比1.5 list&#xff08;列表&#xff09;的遍历1.6 补…

C#实现SqlServer数据库同步

实现效果&#xff1a; 设计思路&#xff1a; 1. 开启数据库及表的cdc&#xff0c;定时查询cdc表数据&#xff0c;封装sql语句(通过执行类型&#xff0c;主键;修改类型的cdc数据只取最后更新的记录)&#xff0c;添加到离线数据表&#xff1b; 2. 线程定时查询离线数据表&#xf…

httpd+Tomcat(jk)的Web动静分离搭建

动静分离是指将动态请求和静态请求分别交给不同的服务器来处理&#xff0c;可以提高服务器的效率和性能。在Java Web开发中&#xff0c;常见的动态请求处理方式是通过Tomcat来处理&#xff0c;而静态请求则可以通过Apache服务器来处理。本文将详细讲解如何结合Apache和Tomcat来…

c++之STL详解

c之STL详解 泛型编程什么是STLSTL发展STL组件容器类型成员适配器STL迭代器STL算法顺序容器向量vector双端队列双端队列实现列表listc关联容器cmapmultimapsetmultiset迭代器函数对象集成函数对象自定义函数对象标准c库中算法STL算法头文件标准函数泛型算法例子自定函数作为算法…

SNAT与DNAT原理

SNAT和DNAT &#xff08;源地址转换和目标地址转换&#xff09; SNAT&#xff1a;源地址转换。内网到外网转换的是源地址。 DNAT&#xff1a;目标地址转换&#xff1a;外网到内网转换的是目的地址 &#xff08;把内部服务器的ip地址转换成一个所有人都可以访问的地址&#xff0…

【Spring】创建一个Spring项目与Bean对象的存储

目录 一、创建Spring项目 1、创建Maven项目 2、配置maven国内源 3、引入spring依赖 4、添加启动类 二、将Bean对象存储到Spring&#xff08;IoC容器&#xff09; 1、创建Bean对象 2、将Bean存储到spring&#xff08;容器&#xff09;中 3、获取Bean对象 3.1、Applicatio…

详解PHP反射API

PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似&#xff0c;比如get_class_vars()&#xff0c;但是更加灵活&#xff0c;而且可以提供更多信息。反射API也可与PHP最新的面向对象特性一起工作&…

信息安全技术工业控制系统安全控制应用指南学习笔记

工业控制系统安全控制基线 根据工业控制系统在国家安全、经济建设、社会生活中的重要程度&#xff0c;遭到破坏后对国家安全、社会秩序、公共利益以及公民、法人和其他组织的合法权益的危害程度等&#xff0c;结合信息安全等级保护标准划分及实施效果分析&#xff0c;结合工业…

ElasticSearch详细操作

ElasticSearch搜索引擎详细操作以及概念 文章目录 ElasticSearch搜索引擎详细操作以及概念 1、_cat节点操作1.1、GET/_cat/nodes&#xff1a;查看所有节点1.2、GET/_cat/health&#xff1a;查看es健康状况1.3_、_GET/_cat/master&#xff1a;查看主节点1.4、GET/_cat/indices&a…

Linux初识网络基础

目录 网络发展 认识“协议 ” 网络协议 OSI七层模型&#xff1a; TCP/IP五层&#xff08;或四层&#xff09;模型 网络传输基本流程 网络传输流程图&#xff1a; 数据包封装和封用 网络中的地址 认识IP地址&#xff1a; 认识MAC地址&#xff1a; 网络发展 1.独立…

2023华数杯数学建模C题思路 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…

解决树莓派“由于没有公钥,无法验证下列签名“

目录 简介&#xff1a;在换完国内源后&#xff0c;树莓派尝试更新同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出的软件源的软件包版本也就是&#xff08;apt-get update&#xff09;和更新已安装的所有或者指定软件包&#xff08;也即是apt-get upgrade&#xff0…

输入框长度在XSS测试中如何绕过字符长度限制

大家好&#xff0c;这是我编写的第一篇文章&#xff0c;之所以会分享这个故事&#xff0c;是因为我花了几个晚上的时间&#xff0c;终于找到了解决某个问题的方法。故事如下&#xff1a; 几个月前&#xff0c;我被邀请参加一个非公共的漏洞悬赏项目&#xff0c;在初期发现了一些…