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 # 更新包列…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
