SIP的re-invite和update的区别
在SIP中,re-invite和update都是用来修改变session参数的。不同的是,update对dialog的状态没有影响,而re-invite会改变对话的状态。所以update可以在第一个invite被应答之前发送(即收到invite的200ok之前)。也就是说,update可以被用来控制早期媒体。而re-invite只能在第一个invite杯应答之后发送(即在通话已经建立之后)。
一般来说,在通话建立以后用update和re-invite改变session参数都可以。但是此时多用re-invite。因为update要立即被响应。这样,如果session参数的修改需要用户参与的话,用update就不合适了。大多数时候,呼叫建立起来之后再修改session参数的话,都需要用户的参与,比如点一个同意对话框,所以用re-invite就更普遍一些。 以下是RFC3261的中文翻译,详细的讲解了SIP reINVITE消息的使用方法: RFC3261:http://tools.ietf.org/html/rfc3261#section-14 一个成功的INVITE请求(13节)既会创建一个基于两个用户之间的对话,也会基于请求/应答模式(offer-answer)创建一个会话。 12节讲述了如何通过target refresh 请求来修改一个现存的会话(比如,修改对话的remote target URI)。本节描述如何修改实际的会话(session)。 这个修改可以包括修改地址或者埠、增加媒体流、删除媒体流等等。这是通过发起新的INVITE请求来完成的,并且这个新的INVITE请求是基于建立会话所相同的对话的。在一个现存对话中发出INVITE请求就是re-INVITE。 注意,单个的re-INVITE请求可以同时更改对话和会话的参数。 在本协议中,UA检测本地媒体有效性是基于自身的策略的。但是,我们并不建议自动产生re-INVITE或者BYE请求,因为这样可能会导致网路上的阻塞。在任何情况下,如果某些消息将被自动发送,那麽他们应当等待一个随机的时间间隔。 UAC行为 如果会话描述格式具有版本号码,那么这个磋商的offer应当标志这个变化了的媒体描述版本。 和INVITE不同的是,INVITE可以分支(分岔成为多份INVITE),re-INVITE是不会分支的,所以,只会由一个单个的终结应答。re-INVITE不会分支的原因是因为Request-URI标志的是建立对话的UA的目标地址,而不是用户的address-of-record地址。 1、 如果有正在处理的INVITE客户事务,TU必须等待这个事务终结或者完成,才能初始化一个新的INVITE。 不过,UA可以在INVITE事务正在处理的同时,处理一个普通的事务。也可以在一个普通事务正在处理的同时来初始化一个INVITE事务。如果UA接收到一个针对re-INVITE的非2xx终结应答,则会话参数不能改变,应当就像没有收到过这个re-INVITE请求一样。注意,就像在12.2.1.2节一开始讲的那样,如果非2xx终结应答是一个481(Call/Transaction Does Not Exists),或者一个408(Request Timeout),或者完全没有re-INVITE请求的应答(也就是说从INVITE客户事务端返回一个超时),UAC会终止这个对话。 如果UAC收到一个re-INVITE的491应答,他应当启动一个值为T的时钟,这个T的取值如下: UAS行为 13.3.1节描述了区分初始的INVITE请求和re-INVITE请求的方法,以及处理对现存的对话中处理re-INVITE请求的步骤。 如果UAS正在处理一个INVITE请求的时候又收到了一个在同一个对话上的INVITE请求必须返回一个491(Request Pending)应答给接收到的INVITE。 如果UA接收到一个对现存的对话的re-INVITE请求,那么就必须检查有关会话描述(session description)的版本标志(version identifiers),或者,如果没有版本标志,那么就需要检查会话描述的正文看看有没有变化。如果会话描述改变了,UAS必须由此调整会话参数,在调整参数的时候可能会要求用户确认。 会话描述的版本可以用来提供给会议的新近加入者,增加或者删除媒体,或者由单点会议更改成为多方会议。 UAS可以不产生180(Ringing)应答给re-INVITE,因为UAC一般不展示这个信息给用户。同样的,UAS可以增加一个Alert-Info头域或者一个由Content-Disposition「alert」的消息体来应答给re-INVITE来让UAC展示这个信息。 如果UAS在2xx应答中提供了一个媒体协商offer(因为INVITE没有包含一个offer),那么它当作新呼叫一样的构造这个offer,就像在[13]中SDP描述一样,遵循发送更改现有的会话的offer的限制。特别需要注意的是,这个意味著它应当包含全部的UA支持的媒体类型和媒体格式。UAS必须确保会话描述在媒体格式,通讯方式,或者其他要求对方支持的参数上,新的会话描述和旧的会话描述一样。这个可以避免对方拒绝这个会话描述。如果,UAC任然是不能接受这个会话描述,UAC应当产生一个它能够接受的会话描述应答,并且发送一个BYE来结束这个会话。 |
SIP的re-invite和update的区别相关推荐
- OpenSIPS-NAT穿越,SIP注册,INVITE及RTPProxy配置
OpenSIPS-NAT穿越,SIP注册,INVITE及RTPProxy配置 在SIP语音语音网络中,NAT traversal(NAT穿越)是非常常见的一个问题,因为NAT问题导致的单通,无语音等很 ...
- Linux中升级更新命令yum upgrade和yum update的区别
这篇文章主要介绍了Linux中升级更新命令yum upgrade和yum update的区别,Linux升级命令有两个分别是yum upgrade和yum update, 这个两个命令是有区别的,本文 ...
- linux更新命令yum,Linux中升级更新命令yum upgrade和yum update的区别
Linux中升级更新命令yum upgrade和yum update的区别 更新时间:2019-10-31 17:21 最满意答案 Linux升级命令有两个分别是yum upgrade和yum upd ...
- 升级Upgrade与更新Update的区别
升级Upgrade 与 更新Update的区别 参考: https://support.apple.com/en-us/HT201564 https://support.apple.com/zh-cn ...
- 五 SIP中一个INVITE消息的发起过程
SIP协议的INVITE消息发起流程 当通过sip协议发起一个会话时,需要通过invite消息实现该流程.而SIP协议是一个基于事务的协议,每一个sip会话的都是通过sip部件间的一系列消息来完成的. ...
- Linux升级命令yum upgrade和yum update的区别
Linux升级命令yum upgrade和yum update的区别 yum -y update 升级所有包同时也升级软件和系统内核 yum -y upgrade 只升级所有包,不升级软件和系统内核 ...
- ORCLE中ALTER、MODIFY和UPDATE的区别
ORCLE中ALTER.MODIFY和UPDATE的区别 1.modify是修改字段类型和长度的(即修改字段的属性). 2.alter是修改表的数据结构(modify是alter的一种用法). sql ...
- yum update upgrade 区别_CentOS与RedHat的区别
RedHat在发行的时候,有两种方式:二进制和源代码的发行方式.无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布.但如果你使用了他们的在线升级(包括补丁)或咨询服务,就必须要付费. ...
- upgrade和update的区别
最近在写程序时总会用到upgrade这个词,今天突发奇想,update也有"更新"的意思,那么这两个词到底有什么区别呢? 忍不住好奇心,停下coding,放狗一搜,还真找到了区别. ...
最新文章
- python2.7可以同时连接两个数据库吗
- ubuntu14.04安装完ros后常用的其他安装
- 哨兵模式原理_Redis哨兵、复制、集群的设计原理,以及区别
- 第6天-css笔记 三大定位-定位 子绝父相 与精灵图
- Linux常用开发环境软件-Redis安装(docker环境下)
- C++11: final与override
- Java面试——Redis系列总结
- 微博:将对“宣扬仇恨”行为进行界定,并开展专项整顿
- windows 上安装 python3.7 和 pip 并配置虚拟环境
- socket与http的区别
- 维纶触摸屏程序实际项目,威纶通界面UI
- python人机交互界面
- UE4数据库 Mysql
- sql内外连接的区别
- 12款精品网盘资源搜索网站,只有你想不到没有它搜不到的
- 那些年,我追过的经典电视剧
- uniapp 图片模糊
- 《拆解 XLNet 模型设计,回顾语言表征学习的思想演进》
- EXTJS 6 - 日期控件 Date picker 只选年月
- React基础知识 [ 新手上路学这一篇就够了 ]