6.1.webrc媒体协商
那今天呢?我们来看一下y8 rtc的媒体协商,那实际上在我们之前的课程中呢?我已经向你介绍过y8 rtc的媒体协商了。只不过呢,角度是不一样的,在之前介绍外边tc媒体协商的时候呢,我们是从应用的角度来看。那web rtc为什么要进行媒体协商?媒体协商在整个音视频的传输过程中起到了什么作用?那么今天呢?我们换一个角度,从源码的角度来看,

y8 rtc它是如何进行媒体协商的?具体它是怎么做到这个媒体协商这个作用的?那对于我们这节课来说呢,我们主要介绍一下我们这一章要介绍哪些知识点,那首先呢,我们要了解媒体协商的意义。
那在之前的课程中呢,我们已经介绍了双方在进行音视频通讯之前呢,要进行一些必要的媒体协商。那这些协商的内容是什么呢?
比如说双方都支持哪些音视频的编解码器,比如说我用的是VP 8,结果呢?你只支持二六四。那这样呢,双方是没法进行通讯的,那除了编解码器之外
传输上的一些内容也需要进行协商。比如我们使用的配是多少?传输协议是udp还是TCP?那在udp之上,我们使用的rtp与rt CP是共用同一个传输通道还是分别的两个通道?那这些呢,都是在整个媒体协商过程中需要完成的事情,所以总结出一句话就是什么事儿大家要商量着来。我要告诉你,我支持哪些编解码器,支持什么样的传输协议,那同时呢,你也告诉我,
你所支持的都有哪些?这样呢,我们商量好之后就可以进行后续的工作了,那这是媒体协商意义,就是什么事儿都要商量着来。那在媒体进行协商的过程中,实际信令起着非常关键的作用。那我们在介绍信令的时候呢?我向你介绍过。
那其中呢,还有一个重要的消息就是message在整个媒体协商的过程中,我们的answer以及offer都是通过message这个消息进行进行交换的。实际我们在进行信令的时候呢,做过这块儿的讲解,我们要想进行媒体协商,
那信令在其中起着至关重要的作用,这点我们要知道。那在禁令进行交换的时候,那信令里边使用的就是sdp协议,那对于外包来说,为什么要使用sdp协议?这个我们也要清楚。呢其实是一个非常古老的协议,是二零零六年就已经推出这个规范了,它采用的格式呢?是这种格式。那它相较于XML这种格式来说呢,它的格式更紧凑,也就是说同样的信息,它占用的空间更小。
而XML呢,更适合大规模的,结构化的组织,所以它占用的这个空间呢,就会大很多。那我们在进行网络传输的时候呢,实际是希望这个数据越小越好,越紧凑越合适,那如果你要传一个更大的数据,它占的网络带宽就会越多。那这就导致失败的可能性会越高,所以我们在进行传输的时候呢,都有一个潜规则,就是让数据越小越好。那这是使用的一个最主要的原因,
那除此之外呢,采用的方式也更有利于我们的读取与写入。它就像我们以前使用的,非常老的配置文件点in I,这种配置文件那读写起来呢,都非常的方便。那这也是web rtc为什么会选择stp的一个很重要的原因好,那以上呢?我就介绍了媒体协商,它的意义是什么?新令在其中起到作用,以及为什么选择sdp好,那下面呢?我们就来看一下我们这一章主要介绍哪些内容?那无非呢,
就是我们之前介绍过几个非常重要的点,那第一个呢就是sdp协议对吧?我们要知道sdp它的协议什么?在这个协议中,web rtc做了哪些修改?那这是我们必须要了解的,而且呢,可以说是我们理解web rtc的一个非常重要的内容。那只有你将里边的每一个字段都了解清楚了,你才知道web rtc里头的代码为什么要那么写才能读懂它的代码?这是第一个点,我们要介绍的是sdb协议。那
第二个呢?就是offer的创建,我们前面介绍过如何通过web rtc的API来创建offer,
但对于这个API内部,它的逻辑具体是怎么做的?怎么创建的这个offer我们就不知道了,那这些内容呢?就是我们这一章所要介绍的重点,除了offer之外呢?answer也是类似的。那实际上offer与answer除了类型不一样之外,里边的内容呢,都是一样的,它里边会包含你支持了哪些编辑码器?使用的传输协议是什么?数据是否进行加密等等,这些内容呢?都是在offer跟a中进行描述的。

那当我们有了offer跟answer之后,剩下的就是协商,那对于外边tc来说,它是如何进行媒体协商的呢?实际有两个API,一个是side local description,那当我们调用这个API的时候,如果同时拥有了offer跟answer,在它内部呢,就会进行媒体协商。媒体协商的过程中呢,就会进行网络传输的创建,编解码器的创建等等,这些呢,都是在set local description中实现的。
那当只有某一项的时候,比如只有offer或者answer的时候,那他只做其中的一半工作,那剩下的一半工作呢,要交给下一个API,也就是set remote description来进行完成。只有这两个API全部调用完成之后,那底层的媒体协商过程才真正结束掉。
所以对于我们本章来说呢,主要就是让你了解如何创建offer answer,让你知道web rtc是如何。通过调用side local description以及side remote description,最终实现媒体协商的对这就是我们这章所介绍内容。那下面呢,我们就开始我们这一章内容的讲解。
相关文章:
6.1.webrc媒体协商
那今天呢?我们来看一下y8 rtc的媒体协商,那实际上在我们之前的课程中呢?我已经向你介绍过y8 rtc的媒体协商了。只不过呢,角度是不一样的,在之前介绍外边tc媒体协商的时候呢,我们是从应用的角度来看。那web …...
Android WebView中打开外部超链接无反应
什么是外部超链接? 相当于是跳转到一个新的网址页面 解决方案选择: 1.在WebView内部中打开外部超链接 设置setSupportMultipleWindows为false即可 webView.settings.setSupportMultipleWindows(false)2.打开系统浏览器打开新页面 设置setSupportMul…...
JMeter集结点的使用场景以及如何使用?
JMeter是一个开源的负载测试工具,它被广泛用于测试应用程序、Web服务和网络协议等的性能。在JMeter中,集结点(JMeter Cluster)是一种分布式测试环境,它允许多个JMeter实例同时工作来模拟高并发负载。 使用集结点的场景…...
2023最新面试题
第一家 自我介绍介绍一下最近一个(最熟悉的一个)项目 项目几个人在负责 项目实际在用了吗,哪个平台在用啊(在哪里上线) 你认为你自己做的项目里面哪个比较难做呢,项目里面有什么难点?常用的是V…...
shell 脚本的函数和数组
函数 —— 封装的一个公式:sin、cos、tan —— 函数为脚本的别名 —— 函数就是一个功能模块,在函数中写执行的命令即可;使用函数可以避免代码重复,增加可读性,简化脚本,使用函数可以将大的工程分割为若…...
【RocketMq系列-02】RocketMq的架构解析和高性能设计
RocketMq系列整体栏目 内容链接地址【一】RocketMq安装和基本概念https://zhenghuisheng.blog.csdn.net/article/details/134486709【二】RocketMq的架构解析和高性能设计/font>https://zhenghuisheng.blog.csdn.net/article/details/134559514 RocketMq的架构解析和高性能设…...
【数据结构/C++】线性表_单链表的基本操作
#include <iostream> using namespace std; // 2. 单链表 // ElemType 的定义 typedef int ElemType; typedef struct LNode {ElemType data;struct LNode *next; } LNode, *LinkList; // 初始化单链表 bool InitList(LinkList &L) {L (LNode *)malloc(sizeof(LNode…...
flink1.13.6版本的应用程序(maven版)
问题 想要一个指定flink版本的java计算任务hello world最简工程。 解决 mvn archetype:generate \-DarchetypeGroupIdorg.apache.flink \-DarchetypeArtifactIdflink-quickstart-java \-DarchetypeVersion1.13.6这里直接使用官方mave模版工程,指…...
深度学习之四(循环神经网络Recurrent Neural Networks,RNNs)
概念 循环神经网络(Recurrent Neural Networks,RNNs)是一类专门用于处理序列数据的神经网络,它在处理时考虑了序列数据的顺序和上下文信息。RNNs 在自然语言处理、时间序列分析、语音识别等领域得到广泛应用。 1. 基本结构: RNN 的基本结构包含一个或多个循环单元,每个…...
【论文精读】HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face
HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face 前言Abstract1 Introduction2 Related Works3 HuggingGPT3.1 Task PlanningSpecification-based InstructionDemonstration-based Parsing 3.2 Model SelectionIn-context Task-model Assignment 3…...
安装gitlab
安装gitlab 环境 关闭防火墙以及selinux,起码4核8G 内存至少 3G 不然启动不了 下载环境 gitlab官网:GitLab下载安装_GitLab最新中文基础版下载安装-极狐GitLab rpm包下载地址: [Yum - Nexus Repository Manager (gitlab.cn)](https://pack…...
Nginx模块开发之http handler实现流量统计(1)
文章目录 一、handler简介二、Nginx handler模块开发2.1、示例代码2.2、编写config文件2.3、编译模块到Nginx源码中2.4、修改conf文件2.5、执行效果 三、Nginx的热更新总结 一、handler简介 Handler模块就是接受来自客户端的请求并产生输出的模块。 配置文件中使用location指令…...
JSP编写自己的第一个WebServlet实现客户端与服务端交互
我们在项目中找到java目录 下面有一个包路径 然后 我们在下面创建一个类 我这里叫 TransmissionTest 当然 名字是顺便取的 参考代码如下 package com.example.dom;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet…...
三、Keil安装芯片包、下载固件库、建立STM32工程模板
目录 一、首先在Keil软件上安装好芯片包 二、下载官方固件库 三、建立基于固件库的Keil5工程模板 一、首先在Keil软件上安装好芯片包 STM32有很多系列的芯片,我们平常用的最多的是STM32F1系列的,因此安装F1系列的芯片包在我们初学时,只按照…...
微信相框M1-03花屏抢救照片数据
故障现象 相册屏幕花屏,无法显示,拔掉电源黑屏(内部自带锂电池的) 问题排查 开始怀疑屏幕故障,拆开看到内部,发现是锂电池时间长鼓包后,顶到PCB,PCB板已经翘曲了,导致花…...
小程序可拖拽按钮
你有没有遇到过在页面中有一个固定在某个位置的按钮,永远的挡住了你想要看的区域? 在小程序的列表页面中,常常会有一个提报的入口固定在右下角,如果这个按钮不可拖动的话,可能会挡住下面的事件,让用户操作起…...
ARM裸机-19(NandFlash和iNand)
1、NandFlash的接口 1.1、Nand的型号与命名 (1)、Nand的型号命名都有含义,就拿K9F2G08来示例分析一下:K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit (256MB)。08表示Nand是8位的 (8位就是数据线有8根)。 (2)、Nand命名中可以看出&#x…...
机器学习/sklearn笔记:MeanShift
1 算法介绍 一种基于质心的算法通过更新候选质心使其成为给定区域内点的均值候选质心的位置是通过一种称为“爬山”技术迭代调整的,该技术找到估计的概率密度的局部最大值 1.1 基本形式 给定d维空间的n个数据点集X,那么对于空间中的任意点x的均值漂移…...
opencv-简单图像处理
图像像素存储形式 对于只有黑白颜色的灰度图,为单通道,一个像素块对应矩阵中一个数字,数值为0到255, 其中0表示最暗(黑色) ,255表示最亮(白色) 对于采用RGB模式的彩色图片&#…...
Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell
文章目录 Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell启动PowershellKaliUbuntuCentOSarm-Linux离线安装参考链接 Linux(Kali\Ubuntu\CentOS\arm-Linux)安装Powershell 启动Powershell pwshKali apt update && apt -y install powershellUbuntu # 更新包列…...
STC8H的EEPROM,用IAP还是MOVC读?两种方式详细对比与选择指南
STC8H EEPROM读取策略深度解析:IAP与MOVC的实战抉择 1. 理解STC8H EEPROM的架构特性 STC8H系列单片机内置的EEPROM存储空间是其区别于传统51架构的重要标志。以STC8H8K64U为例,64KB的存储空间被划分为程序存储区和用户数据区,这种设计消除了外…...
AI视频换脸技术:原理、优化与实践指南
1. 项目概述:AI视频换脸工具的核心价值最近在测试一款名为Free AI Video Face Swap Generator的工具,它彻底改变了传统视频换脸的操作门槛。过去要实现类似效果,至少需要掌握After Effects、Python脚本和3D建模知识,现在只需要上传…...
《Windows Internals》10.2.17 学习笔记:服务启动流程(Service start)——为什么“启动一个服务”看起来只是一瞬间,背后却是一整条从 SCM 到 Running 的完
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
GameClaw:开源游戏服务器自动化部署与运维实战指南
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫oratis/gameclaw。乍一看这个名字,可能有点摸不着头脑,但如果你是一个游戏开发者,或者对游戏服务器管理、自动化运维有需求,那这个工具很可能就是你一直在找…...
Android录音、试听功能实现
1.音频录制(pcm录制)安卓中可使用AudioRecord进行音频录制,录制的结果是pcm文件,也就是音频裸数据(裸流)。可调用AudioRecord.startRecording进行录制,不过使用前需要初始化AudioRecord。Java层…...
TrollInstallerX深度解析:专业级iOS TrollStore安装工具实战指南
TrollInstallerX深度解析:专业级iOS TrollStore安装工具实战指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款专业级的iOS TrollSt…...
在PC上畅玩Switch游戏:Ryujinx模拟器的完整终极指南
在PC上畅玩Switch游戏:Ryujinx模拟器的完整终极指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾梦想在PC上体验《塞尔达传说:旷野之息》的震撼画面…...
CoCo框架:代码驱动的文本到图像生成技术解析
1. 项目概述CoCo(Code-as-CoT)是一种创新的文本到图像(T2I)生成框架,它将传统的自然语言链式思考(CoT)推理过程转化为可执行代码,从而实现对生成图像结构化布局的精确控制。该框架由…...
手把手教你用MATLAB仿真理解VIO中的gauge freedom:一个简单的1自由度不可观例子
从零构建VIO仿真模型:深入理解gauge freedom的四种处理方法 在视觉惯性里程计(VIO)系统中,gauge freedom(规范自由度)是一个让许多初学者感到困惑的概念。想象一下,当你用尺子测量房间的长度时&…...
【HALCON 实战入门】12. 边缘检测与轮廓提取
欢迎订阅【HALCON 实战入门】专栏: 1. HALCON 简介与安装 5. 相机接入与图像采集 10. 阈值分割与目标提取 11. 区域处理与分析 12. 边缘检测与轮廓提取 13. 轮廓分析与几何特征 【HALCON 实战入门】12. 边缘检测与轮廓提取一、什么是边缘与轮廓?二、边缘…...
