基于SDP的提议/应答(offer/answer)模型简介

1、引入

在松耦合会议中,会话参数完全由会议创建者来确定,参与者能做的仅仅是根据这些会话参数来加入会议(当然也可以选择不加入)。这种情况下,主要要做的就是会话描述,在这里SDP本身就足够了。

但是在更为普遍的两方会话的情况下,由于用户终端能力的差异,任何一方不能假设对方一定支持某种会话参数,所以必须双方协商来最终就会话的参数达成一致。显然,SDP能做到准确的描述会话的参数,但是它缺少双发如何根据各自提供的会话描述形成最终一致的会话描述的语义及操作上的细节。

IETF RFC3264定义了一个基于SDP的简单的提议/应答模型来实现这一点。

2、提议/应答操作概述

在提议/应答模型中,首先会话的一方(提议者)产生一个 SDP消息来描述它所期望的会话,这构成了一个提议(offer)。提议中主要包括提议者想使用的媒体流和codecs集,以及提议者用于接收媒体的IP地址和端口。

提议被传送到另一方,收到这个提议后这一方可能会接受,也可能会拒绝这个提议。在前一种情况下,本方(应答者)根据收到的提议和自身的能力产生一个SDP消息来描述它所能接受的会话,这称为应答(answer),应答中针对提议中的每个媒体流有一个匹配流,指示该媒体流是否被接受,同时伴随着要使用的codecs和应答者希望用于接收媒体的 IP 地址和端口。

在提议/应答的操作中需遵守以下原则:

  • 在任何时候,任何一方都可能产生一个新的提议来更新会话。然而,如果它收到了一个提议还没有应答或拒绝,则不能产生新的提议。
  • 提议/应答交换是不可分的,如果应答被拒绝,会话恢复到提议前的状态。
  • 提议 (和应答) 必须是RFC 2327 中所定义的有效SDP消息。尽管 SDP 规范允许将多个会话描述串接在一起形成一个大的SDP 消息,但是在提议/应答模型中使用的SDP消息必须恰好包含一个会话描述。

在提议/应答模型中交换假定存在一个高层协议(比如SIP),它能够完成SDP消息的交换,并能维持某种上下文关系,将一个提议及其应答,和创建和更新同一个会话的多个提议/应答对关联起来。

3、提议/应答交换例子

下面给出一个简单的提议/应答交换的例子。

假设主叫A发送一个提议给被叫B。提议中包含一个双向的音频流和两个双向的视频流,分别使用H.261 (净荷类型31) 和MPEG(净荷类型32)。

提议的SDP如下:

v=0

o=alice 2890844526 2890844526 IN IP4 host.anywhere.com

s=

c=IN IP4 host.anywhere.com

t=0 0

m=audio 49170 RTP/AVP 0

a=rtpmap:0 PCMU/8000

m=video 51372 RTP/AVP 31

a=rtpmap:31 H261/90000

m=video 53000 RTP/AVP 32

a=rtpmap:32 MPV/90000

被叫B不想发送和接收第一个视频流,所以返回以下SDP作为应答。(注意描述第一个视频流的"m="行中端口设为0,这表示拒绝这个媒体流)。

v=0

o=bob 2890844730 2890844730 IN IP4 host.example.com

s=

c=IN IP4 host.example.com

t=0 0

m=audio 49920 RTP/AVP 0

a=rtpmap:0 PCMU/8000

m=video 0 RTP/AVP 31

m=video 53000 RTP/AVP 32

a=rtpmap:32 MPV/90000

之后的某一时刻,B决定改变其接收音频流的端口(从49920 改为65422),同时,增加另一个“仅接收”的音频流(注意其属性为recvonly),使用 RTP 净荷类型 events 。

B提供了以下SDP作为提议:

v=0

o=bob 2890844730 2890844731 IN IP4 host.example.com

s=

c=IN IP4 host.example.com

t=0 0

m=audio 65422 RTP/AVP 0

a=rtpmap:0 PCMU/8000

m=video 0 RTP/AVP 31

m=video 53000 RTP/AVP 32

a=rtpmap:32 MPV/90000

m=audio 51434 RTP/AVP 110

a=rtpmap:110telephone-events/8000

a=recvonly

A接受这个新增的媒体流(注意在其属性为sendonly),所以产生以下的应答:

v=0

o=alice 2890844526 2890844527 IN IP4 host.anywhere.com

s=

c=IN IP4 host.anywhere.com

t=0 0

m=audio 49170 RTP/AVP 0

a=rtpmap:0 PCMU/8000

m=video 0 RTP/AVP 31

a=rtpmap:31 H261/90000

m=video 53000 RTP/AVP 32

a=rtpmap:32 MPV/90000

m=audio 53122 RTP/AVP 110

a=rtpmap:110telephone-events/8000

a=sendonly

4、后继

基于SDP的提议应答模型的实际实现需要依赖于某种呼叫信令协议,比如SIP、BICC等等,相比较而言,与提议应答模型这些协议的关系更为复杂。本博客将有后继博文介绍在SIP中应用SDP提议应答模型的情况。

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

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

相关文章

arcgis已知两点投影坐标求距离

问题: 已知中心点坐标,求个点与中心点坐标的距离 解决方法如下: 新建字段 在新建字段上右键字段计算器 利用字段计算器进行两点间距离计算 不懂问题请进群交流询问相关知识点

【原创】StreamInsight查询系列(十九)——查询模式之检测异常

上篇文章介绍了查询模式中如何发现趋势,这篇博文将介绍StreamInsight中如何检测异常。 测试数据准备 为了方便测试查询,我们首先准备一个静态的测试数据源:var now DateTime.Parse("09/12/2011 8:57:00 PM"); var input new[] {n…

tensorflow 旋转图片_使用TensorFlow对图像进行随机旋转的实现示例

https://www.jb51.net/article/178934.htm在使用深度学习对图像进行训练时,对图像进行随机旋转有助于提升模型泛化能力。然而之前在做旋转等预处理工作时,都是先对图像进行旋转后保存到本地,然后再输入模型进行训练,这样的过程会增…

SIP协议详解

SIP协议概念** 会话启动协议SIP(Session Initiation Protocol)是一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创 建、修改、和终结一个或多个参加者参加的会话进程。 **SIP协议可用于发起会话,也可以用于邀请成员加入…

arcgis判断两个字段是否相等

def a(b,c):if(bc):return 1else:return 0 不懂问题请进群交流

深入浅出InfoPath——动态获取InfoPath中的命名空间

问题描述:我们在不同的开发Server和Product环境中部署InfoPath的时候,发现命名空间会随InfoPath的小版本变化而变化。 比如:http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-03-14T09:12:19 处理办法: 使用Linq to…

一元三次方程重根判别式_许兴华——关于复数集中解一元二次方程的问题

在学习复数时,最近有个别比较好学的同学提出一个问题:“对于复数系数一元二次方程,是否可以用求根公式求解呢?”——回答是肯定的!关于复数集中解一元二次方程的问题。其实,在复数集内解关于x的一元二次方程…

arcgis批量将栅格里的nodata转为0

新建模型 修改名称 在arcgis的工具箱中新建一个模型,具体模型如下 模型里的具体参数如下 1.栅格计算器 2.输出路径,%—%这样的的输出可以保留之前的文件的名称 不懂问题请进群交流

基于SIP协议的视频通讯

1.sip协议及其发展 sip(session initiation protocal)称为会话发起协议,是由ietf(internet engineering task force)组织于1999年提出的一个在基于ip网络中,特别是在internet这样一种结构的网络环境中&…

hive sql 怎么实现循环_Hive存储过程实现-hpsql

1. 什么是hpsql目前版本的hive中没有提供类似存储过程的功能,使用Hive做数据开发时候,一般是将一段一段的HQL语句封装在Shell或者其他脚本中,然后以命令行的方式调用,完成一个业务或者一张报表的统计分析。好消息是,现…

解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)

解决[error MSB6006: “cmd.exe” 已退出,代码为 9009。]问题: The AppWizard for VS2010 above has two small glitches (however they might deter people from using WTL with VS2010). These are very easy to fix: 1) [Output Directory] and [Intermediate Di…

arcgis中制作复杂符号

简介 在arcgis制图中常会遇到复杂的制图符号,如下 通过平常的代码显示并不会显示原图这样的效果,接下来我们开始解决改问题 主要思想: 通过字体文件将其显示 所以的软件: arcgis和FontCreator FontCreator软件下载链接

vb 通过php连接mysql数据库连接_PHP连接MySQL数据库的几种方法

1.最简单的方式-mysql(面向过程)$con mysql_connect("localhost","root","password");$select_db mysql_select_db(test);if (!$select_db) {die("could not connect to the db:\n" . mysql_error());}//查询代码$sql "select…

处理硬件设备访问权限问题

在硬件抽象层模块中,我们是调用open函数来打开对应的设备文件的。例如,在2.3.2小节中开发的硬件抽象层模块freg中,函数freg_device_open调用open函数来打开设备文件/dev/freg。 60 if((dev->fd open(DEVICE_NAME, O_RDWR)) -1) { 61 …

根据rtk参数在arcgis中进行可视化

RTK原始文件 通过原始文件发现,arcgis中并没有中央经线是113的CGS2000投影坐标,所以此处需要进行自定义投影转换 不懂问题请进群交流

django图片上传到oss_django 配置阿里云OSS存储media文件的例子

1. 安装django-aliyun-oss2-storage包linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装windows上报错:(python3_sbs) F:\projects\virtualenv\python3_sbs\Scripts>pip install django-aliyun-oss2-storageCollecting django-aliyun-oss2-stor…

解决mapgis转位置范围偏差过大的问题(比例尺)

问题描述: 在mapgis投影坐标转地理坐标,结果发现地理坐标错误 这样的地理坐标很明显是错误的,发现经度位置些许有些偏差,纬度有大幅度偏差 问题主要出现在在调整投影参数的比例尺分母不正确 解决: 找一个相似研究范围的mapgis文件或者shp文件 方法1(mapgis文件): …

有意思的小学数学竞赛题-2

刚刚在matrix67上看到一篇很有意思的帖子,原文http://www.matrix67.com/blog/archives/4485 我老早就写过一个经典的小学几何题。如果你还没看过这个问题,你一定要去看看。一个小学奥数老师曾 经告诉我,当年带领学生参加这次竞赛时&#xff0…

c语言递归例题分数_C语言递归练习(附答案)

dic递归基础练习题:1.求123……n的值//a(a1)…bint sum(int a,int b){if(ba) return a;return asum(a1,b);}2.求1*2*3*……*n的值a*(a1)*(a2)…*bcheng(int begin,int end){if(beginend) return begin;return begin * cheng(begin1,end);}5.小猴子第一天摘下若干桃子…

MYSQL安装时解决要输入current root password的方法

在装MYSQL的时候发现要输入current root password (你的系统曾经装过MYSQL在重装就会要求输入原来设定的密码,如果是第一次安装就不会出现) 终归结出以下解决方法: 1.清除MYSQL的安装目录,默认是C:\Program Files 2.清除MYSQL数据存放目录&#xff0…