6.2.SDP协议

news2024/11/15 23:39:16

那今天呢?我们来介绍一下sdp协议,那实际上呢?sdp协议非常的简单。我们如果拿到一个stp的文档去看的话,那你要分阅里边的所有的内容会觉得很枯燥,但实际上呢,如果我们按照这张图所展示的结构去看stp的话。你就会觉得它没有那么复杂了,那实际上呢,每一个stp它都是嵌套的方式来进行定义的。那在它最外层呢?是绘画层,
在这里插入图片描述

在绘画层之内是媒体层,那媒体层呢?又分为了音频和视频。在音频里头,它又对音频做了各种各样的定义,而视频里边儿呢,也同样的做了各种各样的定义。我们按照这种结构去给它进行一下拆分。你就会容易理解它里边儿所要表达的信息是什么了,所以这张图呢,非常的关键,大家呢,一定要把这张图记住。在看协议的相关文档的时候,那就按照这张图所描述的这种结构去套,
在这里插入图片描述

就很容易理解了。那下面呢,我们再来看看的规范,它这个规范啊,也非常的清晰,那主要就是ky 6中间用等号进行连接。等号的左边是k,右边是value。对于k来说呢,常见的k有MA CV so,那其中m呢代表的是media,也就是一个媒体。那媒体可以是音频,可以是视频,可以是应用
a呢表示属性,当我们定义了某个媒体之后,要对这个媒体进行进一步的说明。那就要通过a attribute进行进一步的这个定义啊,
这是C呢,就是connection代表连接。v代表版本,我们在进行协商的时候,版本一定要是一致的,比如说一个用户的版本是一。第二个用户的版本是二,这样他俩是没法进行协商的,必须要保证他们使用的stp的协议版本是一致的。

s代表session也就是一个会话。a与b之间进行一个通讯,
那这个呢?就是一个会话。会话呢?是一个全局的。
o代表owner就是谁拥有这个绘画好,这是k。那value呢,它的值就比较多了,那具体含义呢,
你可以查看rfc四五六六这个协议文档中呢,对value做了详细的定义。那实际我们在了解stp协议的时候呢,一般都是拿到一个实际的stp数据,对照着stp数据去看,每一个value它的值是什么含义?

那很少呢,直接去看这个文档,因为这个文档还是比较大的,我们去看的时候呢,如果你没有一个实际的例子。直接去看这文档,可能不太容易理解,那如果你真的想去看这文档的时候呢,可以直接在百度上搜rfc四五六六就可以搜到这篇文档。这就是stp规范,那下面呢?我们就来看一个具体的例子,那这个呢?就是我从一个实际的stp的例子中抽取出的一些重要的信息。那首先第一个就是我们的版本使用的是多少,
在这里插入图片描述

比如我们在第一次进行协商的时候,版本号是一。那第二次协商的时候呢,版本号就变成二,那第三次呢,就是三,它这个版本呢,是不断累加的,后边这个o呢,就代表是就谁拥有它?如果后边是干,就是不太关心具体这个名字是谁了,那后边这一串数字呢?对于外边心思来说呢,它是不实用的,

所以这块呢,它的含义呢,没必要特别深究。其中的in呢代表internet IP 4代表IPV 4后边呢,是你本机的IP地址。那一般都会写成幺二七点零点零点一,这代表我们自己的本机再下边

m是非常关键的一个信息,代表一个media。那每个呢,只代表一种类型的数据,要么是音频,要么是视频,要么是应用数据。对它不可能同时既包含音频,又包含视频,

这是不可能的,所以它的第一个单词呢?audio代表的这个媒体呢?是一个音频数据。好后边的九代表,它使用的端口号,这个端口呢?

对于外边tc来说,它也不用它会使用自己的ice进行网络传输。那这个端口有一个特殊的意义,如果这个端口是零,表示两个用户之间进行媒体协商时没有成功。那如果不是零这个值呢?是多少都无所谓,后边呢是这个媒体所使用的传输协议。

那底层呢?使用udp tls呢?就是进行数据加密,那在udp之上跑的是rtp。后边的sav TF表示的是支持rt CP协议,那a呢?代表audio v呢?代表video p呢?是protocol。f呢是feedback,所以这几个单词的第一个字母好,再后边的这一串数呢是?那它可以是幺幺幺,也可以是幺零三,也可以是幺零四,

那每个配具体代表的是哪个编辑码器?那在后边呢?都有定义。再接下来,这个a就是对前面的这个media进行的扩展说明,也就是attribute一个属性。MID代表的是media ID,也就是说我们这个media它的ID是多少?那冒号零表示的这个ID是零?那再下来,那对于这个media来说呢,它对传输的rtp协议进行了扩展,那如果rtp中的p是幺幺幺。它表达的意思是它使用的编解码器是oppos采样率呢,是48000双通道。
在这里插入图片描述

这两个a呢,都是对前面这个media的一个说明,当他遇到下一个
m的时候,前面的这个媒体就算结束了,就开始一个新的媒体。那这个m呢?表示这是一个视频的媒体,后边是端口号好,那再下来这些信息呢?与这个音频是类似的。也就是它使用的传输协议udp rtp下边儿是palo tap九六幺零二,那与音频类似,后边儿这a呢,是对这个媒体的一个说明。

那对于视频来说,它的media ID是一,那这个序号呢?是自动增加的,再下边这个rtp map是对payload type九六进行的说明。那p6使用的是VP 8,这个编辑码器,它的时钟频率呢是九万,那这个呢,就是一个stp的例子。当然,这里所展示的这些信息呢,都是一些比较关键的信息点。那除了这些信息之外呢,还有很多的信息在里边,那没有在这里列出来,

是由于没法在一张PPT中容纳所有的信息,所以我只挑出其中。最关键的向你做了展示,那没有展示的那些信息,每一个字段都是我们必须要掌握的,并不是说我在这里没有展示,你就可以不清楚了。不是这样的,每一个字段我们都要知道它的含义是什么,只有这样你才能看外边代码的时候,读懂它的逻辑是什么。那在这里啊,我有两个知识点,要特别向你重点介绍一下,那第一个呢就是ice four和ice light。
在这里插入图片描述

那这个信息呢?是标准stp中啊,不包含的,那这里我们要重点介绍一下,那首先我们来看一下ice light。那你在看sdp的真实的例子的时候呢,经常会看到这个属性,尤其是web rtc流媒体服务器中都会包含这个属性ice light。那它的含义是什么呢?这就要说到y八二tc的ice了,那对于y八二tc的ice,我们在前面的课程中呢,也向你做过介绍。那web rtc呢?实现了自己的一套传输的控制,

那这套控制呢?就称为ice,比如说每个web rtc的终端都会收集candidate。candidate呢,又是有类型的,不同的类型有不同的优先级,那这些内容呢,都属于ice的内容。那其中,在进行ice的时候,要做一次验证,也就是说验证一下这一端给我提供的这个candidate的是否是有效的?那验证应该是双方都要验证它使用的方法呢,就是通过发送向对方发一个请求。那对端收到这个请求之后呢?

要回一个response,这样表明我这个candidate是可用的。如果服务端与客户端之间每个都要做这个流程的话,那对于流媒体服务器来说,它的负载就太重了。所以,为了减轻这个负载,就简化了这个逻辑。所以,只要客户端进行验证就了,那这样呢,就提高了整个连接的这个效率。所以呢,对于客户端来说,它会发子弹request服务端返回子弹response就OK了,

服务端呢,不会向客户端再发送子弹request。那这个呢,就叫ice light,客户端发送stun,服务端回就好了,这就是ice light

那ice four就是与ice light相对应的,它是一个双方检测的过程,也就是说连接的双方都要发送stand request。收到request之后呢,都要回response,它是这样一个过程,这就是ice four与ice light,那如果我们在一个stp中没有发现a=ice light这个属性。那默认呢,它就是ice four,也就是说双方都要进行这个检测,对于外边tc来说呢,

它默认使用的就是ice four。一般的流媒体服务器都使用ice light,这个我们要清楚,

那第二个呢?就是plan b和unify plan。那plan b呢,是web rtc以前默认使用的语法,那什么意思呢?就是如果对于同一种媒体类型有多个源的话。它使用属性进行区别,也就是说对每一种媒体类型只有一个行,比如音频,有一个音频的行。视频呢?有视频的行,
在这里插入图片描述

如果在我们通讯的过程中有两个音频源,那它要进行区分的时候呢?是使用as src来进行区分。其中,每一个音频源有一个自己的ssrc,它们的这个ID呢是不一样的,比如在这里一个是一二三四五六七。另外一个呢是七六五四三二一,同时他们的cna me呢也是不一样的,这是plan b,而unit five plan呢,又与他们不一样了。它是对每一个媒体流都有一个行,就像我们刚才介绍的,如果有两个音频的媒体源。
在这里插入图片描述

那对于unify plan来说呢,它就有两个m行,其中一个m行,它的ssrc呢,是一二三四五六七。那另外一个行它的呢?是七六五四三二一,这是他们的一个最主要的区别,区别的关键点呢就是m行的个数。那在plan b中呢?每一种类型只有一个m行,而现在对于unify plan来说呢?是每一个圆都有一个m行。那对于现在的外包tc来说,它都统一使用unify plan,

也就是plan b被淘汰了。当然,对于一些老的浏览器,它还会使用plan b。那这一个呢?我们要清楚,尤其是做一些兼容开发的时候,那有的是用plan b,有的是用unify plan。那这个时候呢,我们要做好兼容,那以上呢,就是我们这节所要向你介绍的内容,那在这节中呢,我首先向你介绍了sdp协议的一个基本的规范。

它是由k value所组成的,那另外呢,我们要知道sdp它是分层的,对这对于我们理解sdp来说呢,非常的关键。那你了解了这个结构之后呢,我们去看sdp就会非常容易,那如果你不了解的话呢,就觉得很绕,没有逻辑感。那另外呢,我通过一个实例向你讲解了sdp是如何组织这个媒体信息的。那最后呢?我又向你介绍了两个重要的知识点,一个是ice light ice four,

另外一个呢是plan b和unified plan。那这两个点呢,是wrtc对标准sdp的一些修改,这我们要知道,

那这里我需要特别强调啊,对于sdp中的每一个信息。我们必须都要非常清楚它的含义是什么,这一点是非常关键的,这也是我学习web rtc的一个心得,对只有你了解了sdp中的每一个信息。你才能在阅读代码的时候游刃有余,否则的话呢,很多逻辑你都看不懂,不知道为什么要这么写,不知道它定义那个属性是干什么用的。

这样对于我们理解外边儿tc来说呢,就非常困难了,那以上呢,就是我们这节课的内容有任何的问题

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

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

相关文章

消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

前言 在前面的文章中我们介绍过RabbitMQ的搭建:RabbitMQ的安装过以及各大主流消息中间件的对比:,本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作。 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl sto…

Linux快速显示文件行号并跳转

有时候,想要在线上直接查看日志文件,搜索到关键词后,如果一直按n找下去,很麻烦,我们可以先显示出行号,确定好我们要找内容对应的行号,直接跳转过去。 esc进入命令模式,输入:set nu命…

【神印王座】龙皓晨美妆胜过月夜,魔神皇识破无视,撮合月夜阿宝

Hello,小伙伴们,我是拾荒君。 《神印王座》国漫第82集已更新,拾荒君和大多数人一样,更新就去看了。魔神皇枫秀,威严凛然,突然空降月魔宫,整个宫殿都在这股无与伦比的强大气息中颤栗。为了顺利躲避魔神皇的…

筑牢思想防线——建行驻江门市分行纪检组举办2023年清廉合规大讲堂

为推动廉洁教育打通“最后一公里”,近日,建行驻江门市分行纪检组举办江门市分行2023年清廉合规大讲堂。 本次大讲堂检察官结合一线办案经历,从防范化解金融风险、预防金融从业人员犯罪等方面对全辖员工进行了深入浅出地的讲解,引导…

Volcano3D绘制3D火山图

一边学习,一边总结,一边分享! 本期教程内容 **注:**本教程详细内容 Volcano3D绘制3D火山图 一、前言 火山图是做差异分析中最常用到的图形,在前面的推文中,我们也推出了好几期火山图的绘制教程&#xff0…

如何下载OpenJDK及其源码

如果想下载 OpenJDK,存在以下几种办法: 最简单的办法是去 OpenJDK 官网,这里能下载 JDK9 及其以上的版本,还有 JDK 源码所在的 github 地址。 第二种方法是使用 IDEA 下载,位置在 File->Project Structure->SD…

Harmony 应用开发之size 脚本

作者:麦客奥德彪 在应用开发中,最终呈现在用户面前的UI,是用户能否继续使用应用的强力依据之一,在之前的开发中,Android 屏幕碎片化严重,所以出现了很多尺寸适配方案。 最小宽适配、百分比适配等等。 还有一…

单链表实现【队列】

目录 队列的概念及其结构 队列的实现 数组队列 链式队列 队列的常见接口的实现 主函数Test.c 头文件&函数声明Queue.h 头文件 函数声明 函数实现Queue.c 初始化QueueInit 创建节点Createnode 空间释放QueueDestroy 入队列QueuePush 出队列QueuePop 队头元…

【陈老板赠书活动 - 18期】-如何成为架构师这几本书推荐给你

陈老老老板🦸 👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨‍💻本文简述:生活就像海洋,只有意志坚强的人,才能到达彼岸。 👨‍&am…

大数据Doris(二十八):Routine Load查看和修改作业

文章目录 Routine Load查看和修改作业 一、​​​​​​​查看导入作业状态

Py之PyMuPDF:PyMuPDF的简介、安装、使用方法之详细攻略

Py之PyMuPDF:PyMuPDF的简介、安装、使用方法之详细攻略 目录 PyMuPDF的简介 PyMuPDF的安装 PyMuPDF的使用方法 1、基础用法 PyMuPDF的简介 PyMuPDF是一个高性能的Python库,用于PDF(和其他)文档的数据提取,分析,转换和操作。 …

HCIP---MPLS---LDP

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 MPLS 基于标签转发表进行转发,与路由表类似,标签转发表有两种获取渠道:一是手动配置(类似静态路由),二是通过协议自动学习(类似OSPF)。手动配…

编译器核心技术概览

编译技术是一门庞大的学科,我们无法对其做完善的讲解。但不同用途的编译器或编译技术的难度可能相差很大,对知识的掌握要求也会相差很多。如果你要实现诸如 C、JavaScript 这类通用用途语言(general purpose language)&#xff0c…

【Redisson】基于自定义注解的Redisson分布式锁实现

前言 在项目中,经常需要使用Redisson分布式锁来保证并发操作的安全性。在未引入基于注解的分布式锁之前,我们需要手动编写获取锁、判断锁、释放锁的逻辑,导致代码重复且冗长。为了简化这一过程,我们引入了基于注解的分布式锁&…

Samsung下origen中uboot的配置与编译

uboot的特点: n代码结构清晰 n 支持丰富的处理器与开发板,易于移植 n 支持丰富的用户命令 n 支持丰富的网络协议 n 支持丰富的文件系统 n 支持丰富的设备驱动 n 更新活跃、用户较多、资料丰富 n 开放源代码 n 较高的稳定性 n 不具有通用性(不…

【云备份】第三方库的认识与使用

文章目录 json库粗略认识详细认识writer 类reader类jsoncpp序列化实现jsoncpp反序列化实现 bundle文件压缩库简单认识bundle库实现文件压缩bundle库实现文件解压缩 httplib库Request类Response类Server类Client类 json库 粗略认识 json是一种数据交换格式,采用完全…

Centos 7 安装yum(针对python卸载yum出错)

提前下载所需安装包,按照下面顺序安装即可完成,每个依赖包必须正确安装 下载地址:http://mirrors.163.com/centos/7/os/x86_64/Packages/ rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联 whereis …

lazada商品详情数据接口(lazada.item_get)

Lazada商品详情数据接口是Lazada电商平台提供的一个API接口,用于获取商品详细信息。通过这个接口,开发者可以获取Lazada平台上商品的丰富信息,包括商品名称、价格、库存、描述、图片等。这个接口使用RESTful风格,并通过HTTP协议进…

解决:前端js下载文件流出现“未知文件格式”错误

第一中情况: 出现的问题,前端已经设置了responseType: blob,下载下来还是格式不对。 最后经过排查,后端缺少charsetutf-8,所以前端可以设置编码: 第二中情况: 后端已经设置了charsetutf-8,前…

Splunk Enterprise大数据分析平台+内网穿透实现远程访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台,可帮助客户分析和搜索数据,以及可视化数据…