6.3.WebRTC中的SDP类的结构
在上节课中呢,我向你介绍了sdp协议,
那这节课呢,我们再来看看web rtc中。是如何存储sdp的?也就是sdp的类结构,那在此之前呢?我们先对sdp的内容啊,做一下分类。因为在上节课中呢,虽然我们介绍了它的协议,但是具体对于stp中它到底包含了哪些内容?
实际我们并没有做详细的介绍,对吧?那所以呢,我们今天先把这块内容给大家做一个介绍,之后呢,我们再来看看web rtc是如何存储它的。好,那这张图呢?就是对stp内容的一个分类。那从大的方面来看呢?sdp它包括了会话层和媒体层,对吧?那会话层呢?包含的信息比较少。包括了vost这些呢,
我们在上节课中都向你做了介绍,那重点呢是媒体层。那我们对媒体层呢,又做了划分,分成了四大块,第一个呢是媒体信息。第二个呢,是网络描述,第三个呢,是安全描述,最后一个是服务质量。对于媒体信息来说,最关键的是m行对吧?等于后边一堆内容,包括了传输协议。
那这些呢?我们在上节课都做过介绍,那除此之外呢?与媒体信息相关的还有很多的属性。比如说ssrc
rtp map,也就是对pilot type做进一步说明的。还有呢FM tp也就是format parameter,它是对媒体信息一些参数的进一步说明。
好,那对于网络描述涉及的内容就比较多了,那首先呢是c。它代表的是connection对吧?但是对于外部rtc来说呢,它不使用stp标准中的这个c行。所以对于这一行呢,
我们不必过多的了解,那除了之外呢,跟网络相关的,还有candidate group。rt cp mu x等等等,这一堆都属于与网络相关的内容好,那第三个呢?是安全描述。那我们都知道,对于外部rtc来说呢,它对安全是比较看重的,所以在传输数据的时候呢,它会对rtp包的内容进行加密。那在加密时,它使用的一些信息啊,
都是从安全描述这部分内容中提取出来的,比如说用户在连接的时候。他要发送ice uf rag以及ice password。对这个用户呢进行验证,是否是有效的用户?那除此之外呢,还有fingerprint进行指纹的验证,这些呢,都是与安全相关的,那后边儿呢,我们会做详细介绍。
好,最后一个是服务质量相关的,它通过一系列的rt CP feedback来对外部rtc的服务质量进行控制。那这就是y八二七csdp中媒体相关的内容,
那通过这样一个分类呢,我们就很容易知道y八二七c的sdp中。包括了哪些内容好?
那下面呢?我们再来看看对于web rtc的stp分类,那我们前面介绍的这些内容呢?是从它的功能上做分类的,那对于外包tc代码对stp进行分类的时候呢?是有一些区别的,那么来看一下啊,那从大的方面来说,web rtc对stp还是分为绘画描述和内容描述,这个内容描述呢,实际就是媒体描述。那对于内容描述,
它又分成了内容信息传输,信息和内容组这三项。那这就与我们刚才介绍的不太一样了,对吧?刚才我们介绍的分类呢,是从功能上分成了媒体描述。安全描述,网络描述,服务质量描述对吧?那对于外部rtc来说呢?它是按照这个内容传输和内容组这样一个分类来进行数据的组织的。那对于这些内容,具体web rtc是如何做的呢?我们来看这张图就比较清晰了,那这张图呢?
就是web rtc的sdp类关系图。那我们可以看到总的点呢,是在这里就是session description,它代表一个sdp,那在这个类中呢?是包括了三大项,那第一项呢?就是content information第二项呢?是transport information。那第三样呢,是content group对吧?那紧接着是content information类,那在这个类中呢,包括了content的名字。媒体的类型儿协商是否被拒绝?
bandle only代表的是是否共用同一个传输通道?那最后一个呢,是媒体的描述,也就是说媒体信息中它包括了哪些内容是在这里做了描述?那对于这个类来说呢,就是对应的stp中的m行,其中的audio呢,表示的就是content information中的media protocol type这个字段。那对于这个媒体中的更详细的信息呢,是记录在media content description这个类结构中。那我们来看一下这个类中包含了哪些内容?那比如说包含了rt cp mu xr TCP,reduced size protocol,rtp hydro extension。等等等,
一系列的这个字段,实际这些字段呢,是与sdp中每个媒体流的相关属性,是一一对应的。比如说在视频的这个媒体中呢,它包含了rt cp mu x这个属性,如果有这个属性,那么对应的。在media content description中呢,它的rt cp mu x这个字段就为true对吧?再比如说rtc pre size。对应的就是media content description中的rtc t reduced size这个字段,那从中呢,我们就可以看到。这个media content description就是sdp中每个媒体的主性定义,
对吧?那我们接着再往下看啊,那在这个类中呢,有一个send stream这个字段。那这个字段呢,是stream parameters victor是这个类型,那对应的呢,就是stream parameter。它里边包括了谷歌pids src。s ssc group.那这些信息呢,也是与stp中的内容一一对应的,我们来看一下啊,那它就是与媒体层中的。s slc相关属性一一对应的,
比如说s slc group就在这里呢,有对应的值。呢在这里也有对应的值,对吧?那在stream parameter这个类中呢?又包括了rids。那它呢,是rid description这个类结构。在这个类结构中,包括了rid direction payload types这些字段,那这里的payload types就代表的是。媒体层的payload type,那对于每一个payload type的解释是,通过媒体层的这个属性,rtp map来进行进一步说明的。
对吧,那这些信息呢,都会被web rtc进行解析,把它们保存到red description这个结构中。好这样呢,我们就将中的content这个结构给大家讲解清楚了,那之后呢,我们再来看看transport information。那对于transport information来说呢,它包括了content name,还有description,那description呢,又是transport description。这个类定义的,那在这个类中呢?
它包括了IC EU flag ice password ice mode,那这些信息呢?也是在媒体层定义的,那在每个媒体层下边都会有ice option si ceu frag ice password。fingerprint setup对吧?那这里的每一项呢?其实就是与transport description中的每一项相对应的,那这样呢,就可以做一个直接的翻译,如果在这个媒体层包含这一项,那其中对应的值呢?就会置位或者是取其中的值,那如果没有的话呢,这里边就是钠。OK,
这是传输层,那对于content group来说呢?它是与sdp中的a group相对应的,那么在group中呢?有bandle。就是对音频和视频做一次绑定,其中的零呢代表的是音频,一呢代表的是视频。所以在content group中的semantics就是b。那content name呢?就是零或者是一,那如果你仔细看这张图啊,其实有一个非常有意思的地儿,就是content name。那这个content name呢?
就是group中的零或者是一,那除了content group有content name之外呢中?也有content name在content information中呢?也有name,那实际上这三个name啊,是串在一起的。比如说对于一个音频来说,那它的内幕呢?是零那中的content name也是零。content group中的内幕也是零,那这样就将它们三个串在一起,所以如果我们是通过这个结构去生成一个stp信息的话。那web rtc就会根据它们的content name来一项一项的把它们码列在一起,那这样输出之后我们看到的。就是在每一个媒体层中都包含了它所对应的一些属性,
那这样在构造每个媒体信息的时候呢?在stp中,它的所有的属性信息都会列在每一个媒体层的下边儿。那通过这种方式,外部rtc就很容易进行两者的交换,也就是说。内存中的类交换成sdp文本,或者是拿到一个sdp文本,可以很容易的在内存中呢,构造出这样一个类关系图。那以上呢,就是我们这节课所要向你介绍的内容,那在这节课中呢,我们将sdp做了两种类型的分类,那第一种类型呢,
是按功能分。我们可以知道sdp中包含了媒体信息,网络信息,安全信息以及服务质量相关的信息,对吧?而对应到wtc源码来说呢,它是按组织结构对sdp进行分类的,它将sdp分成了三大类,第一个呢是content information,第二个是transport information。第三个呢,是content group,那通过这个结构的分类,它可以很容易的将一个sdp文档转换成类关系图,也可以将类关系图。
非常方便的转换成stp文档,对吧?那至于哪种分类好,你要站在不同的角度,如果从更容易理解的角度上来说。想知道sdp中包含了哪些内容,我们就应该从功能的角度去分类,那从类型的转换来说。就是从文本转换成内存,从内存转换成文本,再把rtc的这种分类呢?更有优势是吧?好,那我们本节课的重点呢?当然就是这个类关系图了,
因为我们只有掌握了这个类关系图之后,我们后边去看外边提示源码的时候。才能理解它是怎么做的,所以这张图呢,大家一定要多看一看,把它记在心里好,那我们今天的课呢,就到这里,谢谢。
相关文章:

6.3.WebRTC中的SDP类的结构
在上节课中呢,我向你介绍了sdp协议, 那这节课呢,我们再来看看web rtc中。是如何存储sdp的?也就是sdp的类结构,那在此之前呢?我们先对sdp的内容啊,做一下分类。因为在上节课中呢,虽然…...

ArcGis如何用点连线?
这里指的是根据已有坐标点手动连线,类似于mapgis中的“用点连线”,线的每个拐点是可以自动捕捉到坐标点的,比直接画精确。 我也相信这么强大的软件一定可以实现类似于比我的软件上坐标时自动生成的线,但是目前我还没接触到那里&a…...

自定义精美商品分类列表组件 侧边栏商品分类组件 category组件(适配vue3)
随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单…...
造一个float类型二维矩阵,并将二维矩阵存快速储到一个float*中(memcpy)
// 创建并初始化一个二维数组 std::vector<std::vector<float>> createAndInitializeArray(int rows, int cols) {std::vector<std::vector<float>> array(rows, std::vector<float>(cols));float value 0.0f;for (int i 0; i < rows; i) {…...
python通过继承、组合、委托组织类
1 python通过继承、组合、委托组织类 #概念描述1继承属性查找X.name2多态方法调用X.method,取决于X的类型3封装方法和运算符实现行为 通常来说,独特的运算使用独特的方法名称,不要依赖于调用标记。 python组织类结构的方式包括:…...

OSG粒子系统与阴影-自定义粒子系统示例<1>(4)
自定义粒子系统示例(一) 自定义粒子系统示例(一)的代码如程序清单11-5所示: /* 自定义粒子系统示例1 */ void particleSystem_11_5(const string &strDataFolder) {osg::ref_ptr<osgViewer::Viewer> viewer new osgViewer::Viewer();osg::ref_ptr<os…...

激活函数与其导数:神经网络中的关键元素
激活函数是神经网络中的重要组成部分,有力地推动了深度学习的发展。然而,仅仅了解和选择激活函数是不够的,我们还需要理解激活函数的导数。本文将详细介绍激活函数的概念、作用及其导数的重要性,并探究导数对神经网络训练的影响。…...

微信公众号对接获取用户openid预约项目心路全历程
公众号对接获取openid全历程 一、背景二、选型三、开始修改若依框架四、自己搭后端框架五、前端框架uni-app修改六、对接获取公众号登录用户openId七、总结 一、背景 老板接了朋友的一个公众号需求,要求做一个简单的疫苗预约系统。功能是获取当前登录用户࿰…...

大中小协作 共筑科学梦——华中科技大学附属花城中学举办首届科技节
为普及科学知识,张扬科学精神,创设浓郁的科学氛围,11月24日,华中科技大学附属花城中学举办了以“走近科学,触碰未来”为主题的首届科技节暨科创文化展示周活动。学生们在学习中感受科技的魅力,在“玩”中感…...
ElasticSearch之Health API
查看当前集群全部健康指标的信息,执行如下命令: curl -X GET "https://localhost:9200/_health_report?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下: {&quo…...

图的建立基本操作
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 添加头文件#define MAX_VERTEX_NUM 100 //图中最大顶点数//struct ArcNode* nextarc; //ArcNode* firstarc; //这两个是很有必要的,如果你没有这两个指针,你就无法判…...

影响语音芯片识别率的因素概述
语音芯片识别率是指芯片对人类语音信号的识别能力。在实际应用中,语音芯片识别率的高低直接影响了用户对芯片的体验和满意度。因此,提高语音芯片识别率是当前语音技术领域的重要任务之一。 1.、语音芯片的硬件设计:设计良好的芯片可以更好地…...
操作系统的主要功能--处理机、存储器、设备、文件
一、处理机管理功能 对处理机的管理可以归结为对进程的管理。处理机管理的主要功能包括:创建和撤销进程,对进程的运行进行协调,实现进程之间的信息交换,并且按照异地你给的算法将处理机分配给进程 进程控制:为一个作…...

PDF 批量处理软件BatchOutput PDF mac中文版介绍
BatchOutput PDF mac是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理,提高工作效率。 BatchOutput PDF 可以自动化执行许多任务,包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等,而且它还可以将自…...
oracle安装的肘腋之疾小合集
#临时空间指定 export TMP/tmp export TMPDIR/tmp #图形化显示框不全 java问题,使用系统自带的jre ./runInstaller -jreLoc/usr/local/jdk1.7.0_80/ #ins30131 Failed to access the temporary location 给/tmp/CVU*加x权限 #linux桌面太小 xrandr -s 1440x900_60…...

django(千锋教育)
创建一个django项目 官网下载python最新版本 配置到环境变量中 打开intlij编辑器 创建django项目 安装django:pip install django 创建django项目: django-admin startproject django01 创建djangoAPP:python manage.py startapp user 启动࿱…...

Python 前后端分离项目Vue部署应用
一、视图创建 from django.http import JsonResponse from django.shortcuts import render# Create your views here. from django.views import Viewclass IndexView(View):def get(self,request):# 前后端分离 (前端JS代码渲染数据)return JsonRespo…...
Linux中安装MySQ-合集
Linux中安装MySQL Centos中 1、卸载不必要的软件 先卸载mariadb安装MySQL必要环境 rpm -qa|grep mariadb rpm -e --nodeps mariadb-libs yum install -y gcc-c yum install net-tools yum -y install gcc如果需要Java等程序 yum install -y java* java-1.8.0-openjdk* op…...

elk 简单操作手册
1.1. 基础概念 EFK不是一个软件,而是一套解决方案,开源软件之间的互相配合使用,高效的满足了很多场合的应用,是目前主流的一种日志系统。 EFK是三个开源软件的缩写,分别表示:Elasticsearch , Filebeat, Kibana , 其中Elasticsearch负责日志保存和搜索,Filebeat负责收集日志,Ki…...

CSS画一条线
<p style"border: 1px solid rgba(0, 0, 0, 0.1);"></p> 效果:...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...