webrtc中的Track,MediaChannel,MediaStream

文章目录

    • Track,MediaChannel,MediaStream的关系
    • MediaStream的创建流程
      • 创建VideoChannel的堆栈
      • 创建VideoStream的堆栈
    • sdp中媒体参数信息的映射
      • sdp中媒体信息
      • 参数设置体系
        • 参数设置流程
        • 参数映射体系

Track,MediaChannel,MediaStream的关系

Audio/Video track,MediaChannel,MediaStream是Webrtc的业务核心,对媒体的操作都是围绕着这三个对象进行,弄清出它们见的关系及作用,就等于弄清了Webrtc的骨架,对阅读Webrtc的代码大有益处。先看下面一张图:

image.png

首先分为了三层:

  1. Session层,即对外的接口层
  • Track就在这层中,对应的类为VideoTrackAudiTrack,代表了视频和音频的源。
  • 通过PeerConnectionFactoryInterfaceCreateVideoTrackCreateAudioTrack来创建。
  • 通过PeerConnectionInterfaceAddTrack加入到pc对象中。
  • 这些Track最终会体现在本地的sdp中。
  1. MediaEngine层,MediaChannel在这一层

根据本地sdp或sdp的协商结果,来产生MediaChannel,MediaChannel代表一个Video或Audio通道,里面会有多个不同方向的MediaStream。

  1. Call层,MediaStream在这一层

它管理MediaStream,MediaStream就是具体的某一个方向的Video或Audio流。这些Stream属于最底层,直接与编解码器打交道。

Session层中的Track与MediaEngine层中的channel对应,channel中包含多个不同方向的stream。

Call是每个pc对象都包含一个,其中stream是与编解码相关的。

一次SDP的协商最终成果就是产生或更新MediaStream对象。

下面都以Video的Send方向(encoder)说明MediaStream的创建流程及参数设置体系,AudioSendStream及Video/AudioReciveStream与它的流程基本相同。

MediaStream的创建流程

创建VideoChannel的堆栈

image.png
在产生本地sdp后,就会根据sdp信息来创建VideoChannel

创建VideoStream的堆栈

当协商出的sdp中video的方向属性有send时,则会创建VideoSendStream

  1. 在收到对端的sdp后,调用SetRemoteDescription方法,开始sdp解析及channel,stream,encoder的创建过程,如下两个堆栈。

image.png

image.png

  1. 最终以创建video encoder为目标,VideoStreamEncoder就是video encoder的封装类。

image.png

从这个堆栈图中也可以看到channel, call, stream的一层层的关系。

一个pc对象可以有多个VideoTrack,那么每个VideoTrack最终会产生VideoEncoder(如果设置了send方向),所以一个pc对象中可能会有多个编码器。

sdp中媒体参数信息的映射

sdp中媒体信息

一个stream的信息包括如下信息:

  • ssrc
  • codec name
  • codec payload type
  • media ssrc
  • codec rtx payload type
  • rtx ssrc
  • codec fec payload type
  • nack
  • rtp header extension
  • codec encoder info
  • rtcp info

这些信息最终会分别变成为编/解码器的参数(codec name,codec payload type)重传流(rtx)的信息rtp包的信息(rtp header extension)rtcp包的信息。每个stream的信息不一定相同,取决于sdp的具体协商结果。

参数设置体系

sdp中的媒体信息需要转化为具体的编解码器,rtp流的信息。

参数设置流程

设置编码参数的调用栈.jpg
参数设置的流程跟stream的创建流程一致。

参数映射体系

下面的一张体系图显示了sdp中的video媒体信息是如何转化为video stream的参数核心结构

  • 标蓝色的为session层的sdp信息。
  • 绿色的为编码的参数体系。
  • 红色的为传输的参数体系。

VideoSendStream参数设置体系.png

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

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

相关文章

[每周一更]-第93期:探索大型生成式聊天工具:从ChatGPT到未来

随着人工智能技术的不断进步,生成式聊天工具正逐渐成为人们日常生活中的一部分。这些工具利用深度学习技术和大规模语言模型的强大能力,能够与用户进行自然、流畅的对话,为我们提供了更加智能和个性化的交流体验。 ChatGPT:开启生…

[前端][杂项] React版本

前言 前端框架版本迭代很快,所以熟悉框架的版本也很重要。 React 版本介绍 。github上有更加详细的文档 React历史版本下载 因为 React 使用的是 jsx 如果要在浏览器环境中使用 jsx 那么还需要使用babel.js把jsx转换成原生js文件才能被浏览器使用。 babel官网 babe…

基于RT-Thread(RTT)的BMP280气压计驱动(I2C通信)

前言 本文基于RTT操作系统使用STM32F401RET6驱动BMP280气压计模块,使用I2C协议通信 一、新建工程 二、添加软件包 三、添加这个包 四、打开CubeMX 五、配置时钟源,使用外部晶振 六、配置串行下载口 七、打开I2C,我这里使用的是I2C2&#x…

LabVIEW直流稳定电源自动化校准系统

LabVIEW直流稳定电源自动化校准系统 直流稳定电源正向着智能化、高精度、多通道、宽量程的方向发展。基于LabVIEW开发环境,设计并实现了一种直流稳定电源自动化校准系统,以提升校准过程的整体效能,实现自动化设备替代人工进行电源校准工作。…

【opencv】示例-stiching.cpp 图像拼接

#include "opencv2/imgcodecs.hpp" // 导入opencv图像编码功能库 #include "opencv2/highgui.hpp" // 导入opencv高层用户界面功能库 #include "opencv2/stitching.hpp" // 导入opencv图像拼接功能库#include <iostream> // 导入输入输出…

PyQt5

Qt是基于C实现的GUI,而PyQt就是用python调用Qt. PyQt中有很多的功能模块,开发最常用的模块功能主要有3个 1) QtCore:包含核心的非GHI的功能,主要和时间,文件与文件夹,各种数据,流,URLs,进程与线程一起使用 2) QtGUi:包含窗口系统,事件处理,2D图像,基本绘画,字体和文字类 3)…

详解构造函数

前言 希望这篇文章是有意义的&#xff0c;能够帮助初学者理清构造函数的概念&#xff0c;关系及误区。首先定义一个日期类&#xff0c;借助日期类讲解构造函数。 class Date {public:void Init(int year, int month, int day) //初始化数据的方法{_year year;_month month…

Ubuntu快捷安装MySQL

更新包列表 sudo apt update 安装mysql sudo apt install mysql-server 启动mysql // 启动mysql sudo service mysql start// 关闭mysql sudo service mysql stop// 重启mysql sudo service mysql restart 连接mysql // 初始安装无密码&#xff0c;直接连接即可&#xf…

hive metastore使用mysql作为backend db遇到的问题

文章目录 问题解决 问题 hms使用mysql作为Backend metadata database, 但是启动爆如下错误. Underlying cause: com.mysql.cj.jdbc.exceptions.CommunicationsException : Communications link failureThe last packet sent successfully to the server was 0 milliseconds a…

[MAC] mac电脑更新 git的安装homebrew

官方网站需要翻墙&#xff0c;不能下载。试了网上好几种方法&#xff0c;以下方法完胜。 1、国内镜像进行下载的homebrew,一步到位 mac电脑打开终端输入: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 2、查看 原有g…

【opencv】示例-train_HOG.cpp 训练和测试基于支持向量机(SVM)的行人检测器

#include "opencv2/imgproc.hpp" // 包含OpenCV图像处理头文件 #include "opencv2/highgui.hpp" // 包含OpenCV高层GUI&#xff08;图形用户界面&#xff09;头文件 #include "opencv2/ml.hpp" // 包含OpenCV机器学习模块头文件 #includ…

typora支持的流程图的语法

流程图 typora支持以下代码块画流程图 flow&#xff1a;流程图&#xff0c;会自动被 flowchart.js 渲染。sequence&#xff1a;序列图&#xff0c;会自动被 js-sequence 解析和渲染mermaid&#xff1a;mermaid图。 要使 Typora 支持代码绘图&#xff0c;需要对 Typora 软件进…

数据结构初阶:二叉树(二)

二叉树链式结构的实现 前置说明 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在对二叉树结构掌握还不够深入&#xff0c;为了降低学习成本&#xff0c;此处手动快速创建一棵简单的二叉树&#xff0c;快速进入二…

设计模式之工厂模式(python3)

一、简单工厂模式 什么是简单工厂模式&#xff1f; 专门定义一个类来负责创建其他类的实例&#xff0c;根据参数的不同创建不同类的实例&#xff0c;被创建的实例通常具有共同的父类&#xff0c;这个模式叫简单工厂模式&#xff08;Simple Factory Pattern&#xff09;。 &qu…

二、Flask会话技术和模板语言

Cookie Session # views.py: 路由 视图函数 import datetimefrom flask import Blueprint, render_template, request, redirect, session from .models import *# 蓝图 blue Blueprint(user, __name__)# 首页 可以写两个路由&#xff0c;都是访问同一个函数 blue.route(/) b…

【数据结构】泛型(分享重点)

什么是泛型&#xff1f; 泛型就是适用于许多许多类型&#xff0c;对类型参数化。 怎么创建一个泛型呢 class 泛型类名称<类型形参列表> { // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> { } class 泛型类名称<类型形参列表> extends 继承类…

微服务之LoadBalancer负载均衡服务调用

一、概述 1.1什么是负载均衡 LB&#xff0c;既负载均衡&#xff08;Load Balancer&#xff09;,是高并发、高可用系统必不可少的关键组件&#xff0c;其目标是尽力将网络流量平均分发到多个服务器上&#xff0c;以提高系统整体的响应速度和可用性。 负载均衡的主要作用 高并发…

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于RIME-SVR霜冰算法优化支持向量机的数…

多线程八股文常见面试题总结(一)

java多线程基本面试题 目录 前言 一、创建多线程的方式有哪些&#xff1f; 二、runable接口和callable接口有什么区别&#xff1f; 三、run和start有什么区别&#xff1f; 四、线程的状态之间是如何变化的&#xff1f; 五、新建T1、T2、T3如何保证他们的顺序执行&#xff1f; …

MySQL优化慢SQL的6种方式

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《mysql经验总结》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 优化思路 优化方法 1.避免查询不必要的列 2.分页优化 3.索引优化 4.JOIN优化 5.排序优化 6.UNION 优化…