SDP组成:Plan B、Unified Plan和WebRTC

WebRTC 专栏收录该内容
¥59.90 ¥99.00
134篇文章

WebRTC是一种用于实时通信的开放标准,它使得浏览器和移动应用能够直接进行音频、视频和数据传输。在WebRTC中,Session Description Protocol(SDP)用于描述媒体会话的参数和配置信息。SDP定义了一种格式,以便参与会话的各方可以交换信息并建立连接。

SDP在WebRTC中扮演着重要的角色,它描述了参与通信的媒体流的特性和参数。在WebRTC中,存在着两种主要的SDP组织方式:Plan B和Unified Plan。这两种组织方式具有相似的目标,即描述媒体会话,但在语法和用法上略有不同。

  1. Plan B:
    Plan B是WebRTC早期版本中使用的SDP组织方式。它采用了一种比较简单的方法来描述媒体流,将每个媒体流(音频和视频)视为单独的媒体源。在Plan B中,每个媒体流都有一个唯一的标识符(例如0、1、2等),并且可以独立地进行处理和控制。这种组织方式可以方便地实现一些功能,如多路复用和单独控制音频和视频流。

下面是一个使用Plan B组织方式的示例SDP:

v=0
o=- 20518 0 IN IP4 203.0.113.1
s=-
t=0 0
a=group:BUNDLE audio video
m=audio 5000 RTP/SAVPF 111
c=IN IP4 203.0.113.1
a=rtpmap:111 opus/48000/2
a=mid:audio
m=video 5002 RTP/SAVPF 100
c=IN IP4 203.0.113.1
a=rtpmap:100 VP8/90000
a=mid:video

上述SDP中,"m=audio"和"m=video"分别

WebRTC中的SDP ssrc不同的媒体流可以有相同的cname,表示他们属于同一个媒体流(比如,重传流的cname就和原始流的相同)。其中,Plan B是由标准SDP演化而来的,而Unified Plan是用来代替Plan B的新规格。★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。//在webrtc中,重传包和正常包ssrc是不一样的,上一行中前一个是正常rtp包的ssrc,后一个是重传包的ssrc。 阅读详情

相关推荐

基于SRS服务器实现Android-Web端视频通话(2):Android端从SRS服务器拉取WebRTC流

基于SRS服务器实现Android-Web端视频通话(2):Android端从SRS服务器拉取WebRTC流

冬季穿短裤 5054

WebRTC RTCConfiguration中的sdp_semantics

// Configure the SDP semantics used by this PeerConnection. Note that the // WebRTC 1.0 specification requires kUnifiedPlan semantics. The // RtpTransceiver API is only available with kUnifi...

云上听风的博客 1802

WebRTC 核心功能介绍--一篇读懂SDP PlanB UnifiedPlan(从PlanB迁移到UnifiedPlan)

开局第一句,很多人对SDP恨之入骨。 SDP是基于文本,其本身并不属于传输协议,仅仅是对会话进行文本描述,SDP的协商和交换通常需要依赖其它的传输协议。 之前介绍其他知识点的时候,或多或少提到过SDP,但不够详细,不够深入,没有豁然开朗的感觉。那肯定是不答应了,所以再一次深入聊一聊SDP。 另外,如果英文足够好,就不需要往下看了,自己去看文档吧: RFC 8866 - SDP: Session Description Protocol 啥是SDP? 介绍千篇一律,互相复制的。 SDP...

一蓑烟雨任平生 也无风雨也无晴 1万+

WebRTC M96 Release Notes(SDP废除Plan B,支持Opus Red冗余编码)

https://groups.google.com/g/discuss-webrtc/c/Bp8OzBzipSc 切换到M96分支 git checkout branch-heads/4664 PSAs Plan B和Unified Plan Plan B是Chrome/Chromium独有的实现,Safari和Firefox一直支持Unified Plan,Chrome在M72已经支持Unified Plan。从某种程度上说如果后续再开发WebRTC可以不考虑Plan B的支持了,因为Unified

一蓑烟雨任平生 也无风雨也无晴 3293

[粗读webrtc] SDP组成:planb unifiedplan

webrtc 1.0 SdpSemantics RTCConfiguration选项:SdpSemantics planb 统一升级 到 Unified Plan 参考 “Unified Plan” 过渡指南 SDP 细节 WebRTC Native 源码导读(十四):API 概览 总体来说,WebRTC 的 SDP 分为几个部分: session metadata: v=, o=, s=, t= network description: c=, a=candidate stream descri.

突围 1624

【拍乐云Pano】谈谈 WebRTC 的 SDP Unified Plan

[拍乐云Pano] 谈谈 WebRTC 的 SDP Unified Plan 拍乐云Pano 拍乐云Pano 4月22日 前言 今年2月份,webrtc M89 的正式发布,在Release note 提出了一个重要更新,即废弃webrtc Plan B SDP 语义,推荐使用标准SDP格式:Unified Plan。 WebRTC1.0 已经正式成为 W3C 标准,主流浏览器基本都支持UnifiedPlan SDP。Webrtc将于21年开始逐步废弃Plan B SDP,直到移除,后续时间计划如下:

突围 450

【拍乐云】webrtc M89:废webrtc Plan B SDP 语义,推荐使用标准SDP格式Unified Plan

谈谈 WebRTC 的 SDP Unified Plan 拍乐云Pano 发布于 4 月 23 日 前言 今年2月份,webrtc M89 的正式发布,在Release note 提出了一个重要更新,即废webrtc Plan B SDP 语义,推荐使用标准SDP格式:Unified Plan。WebRTC1.0 已经正式成为 W3C 标准,主流浏览器基本都支持UnifiedPlan SDP。Webrtc将于21年开始逐步废弃Plan B SDP,直到移除,后续时间计划如下: M89 (2021.02

突围 635

WebRTC M89:弃用WebRTC Plan B SDP语义,推荐使用标准SDP格式Unified Plan

然而,最新的WebRTC版本M89已经宣布废弃Plan B SDP语义,并推荐使用标准SDP格式Unified Plan。然而,随着WebRTC的发展和实际应用的增加,Plan B存在一些严重的问题和限制。为了解决这些问题,WebRTC推出了Unified Plan SDP格式,它将替代Plan B成为默认的SDP交换格式。最后,我们可以根据需要进行ICE候选者交换等操作。总结起来,WebRTC M89版本中的废弃Plan B SDP语义以及推荐使用标准SDP格式Unified Plan是一个重要的改进。

syntax_bug719的博客 231

WebRTC M89:弃用Plan B SDP语义,推荐使用标准SDP格式Unified Plan

这样,两个对等端就建立了连接,并可以进行实时通信。Plan B是WebRTC早期版本中使用的一种SDP格式,它采用了一种非标准的语义,用于描述多个媒体流(如音频和视频)之间的关系。总结而言,WebRTC M89版本弃用了Plan B SDP语义,并推荐使用标准SDP格式Unified Plan。开发人员应该更新他们的代码,以适应这个变化,并使用Unified Plan来描述和管理媒体流之间的关系。Unified Plan是一种标准的SDP格式,它提供了更灵活和可扩展的方式来描述多个媒体流之间的关系。

FdviAutoit的博客 257

【webrtc】Migrating your native/mobile application to Unified Plan/WebRTC 1.0 API.

https://docs.google.com/document/d/1PPHWV6108znP1tk_rkCnyagH9FK205hHeE9k5mhUzOg/edit#

突围 366

WebRTC RTCConfiguration中的SDP语义

"plan-b"和"unified-plan"是两种常见的SDP语义。"plan-b"基于传统的媒体协商模型,而"unified-plan"引入了更灵活的媒体流和媒体轨道的概念。选择合适的SDP语义取决于你的应用需求和目标平台的支持情况。大多数现代浏览器都支持"unified-plan"语义,因此,如果你的应用需要处理多流场景或与最新的WebRTC规范保持一致,建议使用"unified-plan"语义。SDP语义分为两种类型:“plan-b"和"unified-plan”。希望以上信息对您有所帮助!

WaJulia的博客 331

WebRTC AddTrack、AddTransceiver 与 Unified Plan 机制详解

上一篇梳理了 从创建到状态机初始化的完整流程。PC 创建完成后,下一步就是向其中添加媒体能力,而这就绕不开 Unified Plan 和它的两个核心 API: 与 。本文目标不是背 API,而是帮助你知道它们在真实 C++ Native WebRTC 项目中解决什么问题、源码应该从哪里看、线上问题应该怎么定位。WebRTC 的难点不只是概念多,而是这些概念会同时出现在 SDP、RTP、RTCP、线程、Stats 和业务回调里。只要能建立模块边界,再去读源码和写工程代码就会轻松很多。在 WebRTC 早期,

琅嬛福地 90

WebRTC的SDP统一计划(SDP Unified Plan):实现实时通信的强大标准

在WebRTC中,SDP(Session Description Protocol)扮演着关键的角色,用于描述会话的属性和参数。SDP Unified Plan是WebRTC中SDP的一种新的标准,它提供了更灵活、可扩展和互操作的会话描述。通过使用SDP Unified Plan,开发者可以更轻松地构建基于WebRTC的实时通信应用程序,为用户提供高质量的音视频通信体验。SDP Unified Plan的目标是解决旧版SDP Plan B中存在的一些问题,例如多个媒体流的管理和协商。方法创建一个会话描述。

KnBackend的博客 161

【WEBRTC】PC: RtpTransceiver管理sender receiver 的proxy对象并关联到channelmanager和videochannel、voicechannel

RtpTransceiver

突围 317

【webrtc】大神用vs+ plantuml绘制的werbtc时序图

plantuml

突围 810

Unity地形优化实战:LOD、合批与HLOD打造流畅开放世界

在计算机图形学与游戏开发中,渲染优化是保障应用流畅运行的核心技术。其基本原理在于通过算法与策略,在视觉保真度与硬件资源消耗之间寻求最佳平衡,旨在提升帧率、降低功耗。这一技术的核心价值在于,它直接决定了大规模场景(如开放世界游戏)在性能受限平台(尤其是移动设备)上的可行性。具体到地形渲染这一关键应用场景,开发者需要综合运用多层次细节(LOD)技术来动态调整模型精度,并通过Draw Call合批(Batching)与GPU实例化(GPU Instancing)来大幅减少CPU到GPU的通信开销。对于超大规模世界

weixin_28077113的博客 333

幻尔串口总线舵机控制Python SDK

幻尔串口总线舵机控制Python SDK,可以直接在PC端,不需要借助单片机对舵机进行控制。

daishabby2486的博客 4092

转录组分析中的Fastp和FastQC:如何快速检测数据质量并优化流程

本文深入探讨了转录组分析中数据质量控制的核心流程,重点介绍了Fastp和FastQC两款工具的组合应用。FastQC负责对原始测序数据进行全面质量评估,生成可视化报告;Fastp则能一站式完成接头切除、低质量序列过滤、长度筛选等关键质控步骤。文章提供了详细的参数解读、实战脚本和自动化流程构建指南,帮助研究人员快速检测数据质量并优化预处理流程,为下游的差异表达等分析奠定可靠基础。

weixin_28452161的博客 182

注册电气工程师详细教材

注册电气工程师详细教材

qq_40844444的博客 4254

Keil-C51 与 Keil -ARM 共存的方法

本篇为《嵌入式相关》系列博客的第五篇,该系列博客主要记录单片机开发及硬件设计的相关过程,方便以后查阅。 Keil-C51 与 Keil -ARM 共存的方法状况解决方案1测试解决方案2 状况 今天装完Keil-C51,然后又换装了Keil-ARM之后,可以正常编译STM32 的工程,但是无法编译C51的工程,并且出现了如下错误: *** Error: Project ‘template’ requires ‘C51’ Toolchain which is not installe 这种情况就是Keil-

梁小憨憨的博客 1万+

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3790

回声消除AEC初探

那段保留即可——在播放期间把麦克风关闭(软件层面的 mute),同样能根除回声,只是会失去“一句话期间仍能捕获背景噪声”的能力。如果还有更细节的需求(比如多语言 TTS、实时流式 ASR),欢迎继续交流。的完整示例,可直接拷贝、改造、集成到你现有的 LLM‑TTS 对话系统中。实际效果取决于用户设备的硬件与驱动,若仍有回声,可让用户佩戴。把扬声器信号(把播放音频拷贝给 AEC)从麦克风流中减去。:TTS 播放的声音被同一个麦克风再次捕获,导致声学回声。三种实现示例,帮助你快速落地。,几乎可以消除所有回声。

NLP与推荐算法 571

基于STM32与FPGA的数据采集系统的设计与实现

数据采集系统在现代工程中起着至关重要的作用,用于实时获取和处理各种传感器或外部设备的数据。在本文中,我们将探讨如何基于STM32微控制器和FPGA(现场可编程门阵列)实现一个高效的数据采集系统。我们可以使用STM32的UART、SPI或I2C接口与各种传感器或外部设备进行通信,并通过GPIO口实现控制功能。在硬件连接完成后,我们可以通过STM32控制FPGA的配置和数据传输。STM32作为主控单元负责与外部设备进行通信和数据处理,而FPGA则用于高速数据采集和实时处理。具体的通信协议取决于连接的设备类型。

UbiSqlserver的博客 1797

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: WebRTC代码解析:RTP/RTCP模块分析
下一篇: 使用WebRTC录制媒体的功能
普通网友
博客等级 码龄3年 57粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值