6.4.如何生成SDP

news2024/12/23 23:32:12

在我们前面的课程中呢,我已经向你介绍了很多sdp相关的内容,那今天呢,我们来看看如何生成sdp。
在这里插入图片描述

那我们的目标呢,当然就是生成这样一个文本,那这个文本呢,就是sdp文本那里边包括了各种各样的媒体信息,音频,视频。视频以及它的传输协议udp rtp payload type,那同时呢,又通过a属性对这些payload type进行了解释。

比如说幺幺幺,它实际指定的是编解码器使用opus采样率是48000双通道对吧?那对于这样一个复杂的文本,我们该如何生成呢?实际上就要用到我们上节课所介绍的内容,就是通过web rtc中stp的类关系图。
在这里插入图片描述

来将这个文本生成出来,那如果我们有了这个类关系图,生成文本是非常容易的事儿,那我们只要按照它的组织顺序,一步一步的便利,就可以将这个文本输出出来。

那现在的关键点是什么呢?就是我们如何构造出这样一个类观意图,这是我们这节课所要达成的一个目标。

那形成这样一个类关系图啊,关键的点就是通过peer connection的as track来添加音视频轨。我们想一想也可以知道每一个音频轨或每一个视频轨,实际就是一个媒体源,后边的所有的描述其实都是针对于音频或针对于视频。来进行的进一步说明,那我们要想形成这样一个内关系图,首先要知道我们有哪些音频,有哪些视频。要将这些音频和视频添加到你的peer connection中,那这样呢,才能通过peer connection创建出sdp文本。对吧,这是第一点,那么对于每个track的类型是可以通过cant来获取到的,
在这里插入图片描述

那刚才我已经介绍到了。那对于每一个stp来说,它都是由一个peer connection来生成的。对于同一个peer connection来说呢?它会通过你之前添加的生成所对应的stp,那这个呢,就是我们构造stp类关系图的一个基础。
在这里插入图片描述

好,那下面我们要了解的就是AD track中具体做了什么事儿,如果我们对AD track这个代码进行跟踪的话,你可以看到它的一个调用站。就是从下到上这样一个调用关系,首先我们在应用层呢,是调用AD track,那在AD track内部,
在这里插入图片描述

它会按类型调用不同的API。如果我们指定要创建出的sdp是unified plan类型的,那它就会调用AD track unified plan。如果你使用的是plan b类型的,那它就会调用AD track plan b,当然我们默认情况下,现在都是使用unify plan。

那在add track unify plan这个函数中呢,又会创建sender创建receiver。那当把sender和receiver创建好之后呢?它会调用create and add这个API来创建transceiver。同时呢,将之前创建的sender和receiver作为参数传给transceiver这样形成之后呢,后边我们就可以通过transceiver 来生成这个类关系图了。那这里我们需要知道的是,
在这里插入图片描述

在创建sender的时候呢,它会创建audio rtp sender video rtp sender。创建receiver的时候呢,会创建audio rtp receiver和video rtp receiver,那对于每一种类型的track,它只能创建这种类型的sender和receiver。

那比如说我们添加的是音频轨,那通过之后呢,在内部它会创建audio rtp sender和audio rtp receiver。那我们创建视频轨的时候呢?它会创建video rtp sender和video rtp receiver,所以audio sender和video sender是不会同时存在的。那同理audio receiver和video receiver也不会同时存在,那这一点呢?我们一定要清楚,
在这里插入图片描述

那对于这个API来说呢?它创建的是。trans ver对象对吧?并且呢,将trans ver对象插入到transverse victor中,将它保存起来OK,这就是AD track,它起到的作用。那其实呢,它就是根据track来创建trans ver,那么有了trans ver之后,我们就可以根据trans ver来构造我们的类关系图了。那下面呢,我们就来看一下rtp传s ever,它里边包括了什么内容,
在这里插入图片描述

那实际上啊,你可以把rtp传s ever看作是stp中的一个m行。对吧,每一个m行就是一个trans ver,它包括了发送和接收,那下面呢,我们来看一下rtp trans ver包括了哪些内容?那这张图中列出的所有字段就是rtp trans ever中包含的字段,

那第一个呢是unified plan,也就说指明我们后边生成的sdp。是unif plan还是plan b对吧?好,

第二个是媒体类型media type,那通过这个字段呢,我们可以知道每个transverse只能是一种类型。

对吧,要么是音频,要么是视频,要么是应用数据,那不可能既是音频又是视频,

好在rtt中呢,包括了三点四。也就说,同时有多个发送员,比如说音频有多个音频员,视频有多个视频员,同样道理也可以。

同时,有多个接收员。此外呢,它还有传输的方向。是接收还是发送那一般情况下呢?我们既要接收也要发送,是双向的,

当然你可以指定只接收或者是只发送。好再下边儿呢,是MID也就是我们stp中的零一对吧?这就是MID好下面这个字段呢,表明它在stp文档中媒体排列的顺序。

那如果这里是一呢,它就排在第一个,如果是二呢,它就排在第二个,那再下来是China,也就是与传输进行挂钩。

那我们现在这个虽然表明了它是一个媒体,但最终呢,我们还要通过网络层进行媒体的传输。那具体我们在传输时使用哪个端口用的是哪种传输协议?那这些呢?都是通过China来获取到的。

所以它会有一个China的指针,也就是说与底层的传输层建立了连接是吧?那再下来呢,

是China manager它。它是China的管理器,所有的China都要放到China manager中进行管理,再下来呢,

是header extension。那这个呢?就是rtp的扩展头了,实际也是与stp文本信息中的header相对应的,对吧?那通过这个呢,我们就可以知道每一个媒体。使用了哪些扩展那这个类呢?是非常关键的是一个核心,那后边儿所有sdp相关的内容都是围绕着它来进行展开的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/25ad3bce464628b0f79d1d1a8befe6.png

那接下来呢,我们再来看看rtp sender那在transverse中呢,包括了rtp sender和rtp receiver。对于sender来说呢,它实际是一个桥梁,它是连接网络层与编码器之间的一个桥梁。那sander包括了auto sander和videos ander,

他们呢,都继承自rtp sander bases and er base中呢,包含了非常丰富的这个字段。那其中呢,比较关键的字段包括了media channel,那media channel呢是以编码器进行连接的。

那后边儿呢?我们会介绍到还有呢d tls transport,那它呢?是与传输相关的,对吧?所以对于rtt 3者来说呢,是传输与编码器之间的一个桥梁。

当数据从编码器出来之后。最终呢,就是通过它转换到transport,那再通过transport将数据传送出去,那这是rtp sander它的作用。

OK,那除此之外呢?它还可以对传输内容进行加密,所以它有frame incorrect这个字段。那通过这个字段呢,就可以对内容进行加密了,当然除此之外,它还包括ssrc stream ID等等这些内容。

那这些呢,都是我们stp中所要描述的一些信息,所以通过rtpsender就可以获取到编辑码器传输相关的内容了。那这样呢,

把这些内容就可以转换成我们的类关系图之后呢,再输出成好,这是三点儿,那最后呢,我们再从整体上来看一下。

在这里插入图片描述

那我们都知道,对于接口儿层,还有sdp,它都属于外边儿tc的筛选层,那通过前面儿的介绍呢,我们就可以对这个sesion啊,做一下总结。那我们来看一下y87c的筛选层,各个类之间是怎样一个关系?那首先我们要知道我们刚才介绍的所有的内容呢?

都是通过peer connection来创建的,也就是说在peer connection中会包含transverse victor。那在这里边儿呢,包含了很多的transverse是吧?每一个transverse就对应stp中的一个m行。好,那对于transfer来说呢,它包括了一堆的字段,那这些字段呢?我们刚才已经向你做过介绍了,其中比较关键的是senders和receiver。那对于sender 4来说呢,它包括了audio rtp sender和video rtp sender,那这两个sender呢,都继承自rtp sender base。

在这个center base中,又包含了d tls transport,这是对于sender那receiver呢?包括了audio rtp receiver和video rtp receiver这两个类呢?是独立的。那在每个类中呢,也包括了media ch和d tls transport这两个字段,也就是说,对于每个来说,它也是与解码器和网络传输相关联的。

那除此之外呢,我们上层使用的autotrack video track也与它们相关,那在rtp sender base中呢,包括了track的指针。而在audio rtp receiver,video rtp receiver中呢,也包括了tag字段,

所以通过这个类图啊,我们可以知道,我们只要拿到了rtp trans ever。它向上可以与应用层连接,拿到每一个track, 向下呢?可以与网络层连接,因为它持有d tls transport。那中间儿呢,可以与编解码器连接,我们就可以知道rtp trans ever它的重要性了。它实际是连接了三端上层的应用端,底层的传输,中间的编辑码器,

那有了这个类之后,我们就可以生成我们上节课所介绍的sdp类关系图。再通过stp类关系图,我们就可以生成stp信息文档了是吧?

OK,那以上呢,就是我们这节课的内容。那在这节课中呢,主要向你介绍了,我们在生成stp类关系图之前,要先通过将你的音频视频。添加到peer connection中去,有了这些check之后呢?在peer connection中就可以生成对应的rtp conceiver。那传server呢,

是连接上层应用底层网络传输和中间的编解码器的一个核心类,那有了这个类之后,我们再生成stp的类关系图。就非常轻松了OK,那以上呢,就是我们这节课所介绍内容有任何的问题呢,

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

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

相关文章

GPIO模拟MDIO

背景 CPU:AST2500 驱动里实现GPIO模拟MDIO驱动,参考内核驱动mdio-bitbang.c和mdio-gpio.c,当前项目不支持设备树,驱动需要改成platform注册 MDIO介绍 SMI接口 SMI是MAC内核访问PHY寄存器接口,它由两根线组成,双工…

论文阅读《Parameterized Cost Volume for Stereo Matching》

论文地址:https://openaccess.thecvf.com/content/ICCV2023/papers/Zeng_Parameterized_Cost_Volume_for_Stereo_Matching_ICCV_2023_paper.pdf 源码地址:https://github.com/jiaxiZeng/Parameterized-Cost-Volume-for-Stereo-Matching 概述 现有的立体匹…

c# 字段和属性(get、set、init)

目录 基本概念: 个人理解: 访问器的默认写法: set与init无法共存: init: 必须在类的实例化时给字段赋值的情况(require属性): 基本概念: “字段”就是类内成员变量,一般为了隐藏数据&…

超详细教程:使用React实现动态轮播图

前言 轮播组件是常见的一种方式,用来展示图像、信息或者是广告。我们可以使用React来创建一个轮播组件,并且利用其中的State和effect Hook来创建一款动态的、可以自动播放的轮播组件。 效果 轮播组件会展示一个平铺的图片列表。在图片列表下方是一组小…

java定位系统源码,UWB技术的无线定位系统源码

UWB技术是一种传输速率高,发射功率较低,穿透能力较强并且是基于极窄脉冲的无线技术。UWB最优的应用环境是室内或者相对密闭的空间,有着厘米级的定位精度,不仅可以非常精准地进行位置跟踪,还可以快速地进行数据传输。 智…

基于亚马逊云科技新功能:Amazon SageMaker Canvas无代码机器学习—以构建货物的交付状态检测模型实战为例深度剖析以突显其特性

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道。 目录 🚀一. Amazon SageMaker 🔎1.1 新功能发布:A…

消息通知(Notification)/用户触达系统设计

近年来,通知功能已经成为许多应用程序中突出的特性。构建一个能每天发送数百万通知的可扩展系统绝非易事。这正是为什么我觉得有必要记录我在这方面踩坑之路。也叫用户触达系统。 完成这项任务要求对通知生态系统有深刻的理解,否则需求很容易变得模糊和…

系列十五、Redis面试题集锦

一、Redis面试题集锦 1.1、Redis到底是单线程还是多线程 Redis6.0版本之前的单线程指的是其网络IO和键值对读写是由一个线程完成的; Redis6.0引入的多线程指的是网络请求过程采用了多线程,而键值对读写命令仍然是单线程的,所以多线程环境下&…

MITO-ID®线粒体膜电位检测试剂盒

线粒体膜电位(Mitochondrial Membrane Potential,MMP)是判定细胞健康程度、线粒体膜通透性和细胞凋亡的一个重要指标,MMP的丧失通常与细胞凋亡的早期阶段有关。评估线粒体功能状态的基于细胞的检测方法正在成为阐明线粒体活动在药物诱导毒性、…

记录Oracle Exadata X8M-2 存储服务器告警灯亮的处理过程(/SYS/MB/P0PCIE7)

文章目录 概要调查流程处理方式: 概要 现场服务器告警灯亮,其他服务器正常,磁盘灯正常,所以从整体来看应是内部部件抛出的异常问题,需要登录机器确认: 调查流程 通过ILOM web界面查看服务器状态进行信息…

Java代码实现简易版王者荣耀

一.主窗口类 package com.sxt;import com.sxt.beast.Beast;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.Arra…

拓展 Amazon S3 技术边界:Amazon S3 Express One Zone 的创新之路

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 自 Amazon S3 服务推出以来,一直是全球各行各业数百万客…

Linux基本开发工具

编译器和自动化构建工具 一、编译器——gcc、g1. 安装 gcc/g2. 使用3. 链接库4. 拓展命令:od/file/ldd/readelf 二、自动化构建项目——make、makefile1. 介绍2. 使用例子touch——change file timestampsstat——display file or file system status修改时间 .PHON…

SpringBoot2—开发实用篇1

目录 热部署 手动启动热部署 自动启动热部署 热部署范围配置 关闭热部署 配置高级 测试 热部署 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给…

大模型时代-怎么正确的开发和使用AI模型

一、背景 大模型的概念已经经过了一年的发酵,大家也渐渐的冷静下来了。一开始大家很兴奋,感觉新的时代要来了,然后就是疯狂,再就是都各自找各自公司的东西怎么与大模型沾点边,要不然今年玩不下去了,就要落伍…

数据结构和算法 - 数组

1、数组 1.1 简介 什么是数组? 他优缺点是什么?具体应用有哪些? 「数组 array」是一种基于顺序存储的线性数据结构,其将相同类型的元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的「索引 index」。 如图&…

生产问题排查思路

生产上有用户反映,登录之后页面信息加载不出来,请求响应时间慢等。 下图为生产上一个请求在网关上面的流程: 因为我们生产上,有一张异常信息记录表,第一时间查询了上面是否有最近的异常记录。发现了一点,是…

vue整个页面可以拖拽导入文件

效果图 原理与源码 我们这里的思路是用ant组件库的upload组件,就是如下这个 用这个包裹住所有页面,你可以是包裹住App.vue,或者是你的homepage。但是这个涉及到一个问题,就是我们现在确实是可以拖拽导进来文件了,但是…

【Stm32-F407】Keil uVision5 下新建工程

①双击鼠标左键打开Keil uVision5,选择 Project 下的 New uVision Project ; ②在期望的文件夹下创建一个工程,并按如下要求操作; ③添加文件类型,按如下要求操作 ④如有需要可添加相关启动文件在工程文件夹下并添加到…

WEB 3D技术 以vue3+vite环境为例 讲解vue项目中使用three

上文 WEB 3D 技术,通过node环境创建一个three案例 中 我们打造了自己的第一个Web 3D界面 那么 今天 我们就来结合vue来开发我们的3D界面 这里 我们先创建一个文件夹 作为文件目录 千万不要放C盘 我们 依旧是在终端执行命令 npm init vitelatest输入一下项目名称 …