首页 > 其他分享 >技术分享| WebRTC之SDP详解

技术分享| WebRTC之SDP详解

时间:2023-08-18 17:11:24浏览次数:42  
标签:anyRTC SDP 详解 PlanB UnifiedPlan WebRTC 描述

一,什么是SDP

WebRTC 是 Web Real-Time Communication,即网页实时通信的缩写,是 RTC 协议的一种Web实现,项目由 Google 开源,并和 IETF 和 W3C 制定了行业标准。

WebRTC是点对点通讯,他的通话建立需要交换媒体信息才能建立,媒体信息的载体就是SDP。SDP(Session Description Protocol) 是一种会话描述协议,基于文本,其本身并不属于传输协议,需要依赖其它的传输协议(比如 SIP, HTTP,自定义的信令等)来交换必要的媒体信息,用于两个会话实体之间的媒体协商,同时SDP也不是只为WebRTC使用,其他的传输比如RTSP,SIP通话也是通过SDP进行媒体协商。

SDP是由多行文本组成的一个纯文本协议,如果将SDP从语义上分解成不同组件来描述一个多媒体会话信息,那么SDP由以下部分组成:

a,会话级别描述
b,网络描述
c,媒体级别描述
d,安全描述
e,DTLS角色
f,ICE策略
g,QoS,Grouping传输描述

在这里插入图片描述

一个标准的WebRTC通话的建立,至少需要一次Offer/Answer交互,如下所示:
在这里插入图片描述
在这里插入图片描述

二,为什么SDP又分PlanB 与 UnifiedPlan

WebRTC的单个通道是可以传输多路音视频流的。而PlanB 和 UnifiedPlan 其实就是 WebRTC 在多路媒体源(multi media source)场景下的不同的两种SDP 协商方式。WebRTC引入了 Stream 和 Track 的概念,一个流:Stream 可能包含音轨:AudioTrack 和 视轨:VideoTrack,当有多路 Stream 时,就会有更多的 Track,那么UnifiedPlan就是每一个 Track 唯一对应一个自己的 M 描述,而Plan B就是每一个 M line 描述了多个 Track(track id)。

我们来详细的介绍一下PlanB 和 UnifiedPlan 的区分:

对于 PlanB 来说,由于只有一个 M(audio) 和 M(video),隶属于同一个M line的编码格式是相同的,当有多路媒体流(一路流就是一个track)时,则根据 SSRC 去区分,意味着在 PlanB 中一个Mline中含有多个SSRC的流,这些媒体流共用同一个编码格式。
对于 UnifiedPlan 来说,由于可以有多个 M(audio) 和 M(video),每路流(一路流就是一个track)都有自己的 M Line,每个 M line都能够指示自己的编码格式。

示例如下:

A,Plan-B:

在这里插入图片描述

B,UnifiedPlan:

在这里插入图片描述

从上面可以看出,UnifiedPlan相对要更清晰,更精简一点。WebRTC在M79版本之后正式的支持了UnifiedPlan,这也让其成为了现在的主流SDP交互方式。

三,anyRTC对WebRTC的支持

anyRTC早在WebRTC的创建初期,就是其忠实的追随者,从2015年开始,一直保持着WebRTC-Master的代码更新,我们也经历了WebRTC的api,设计的一次次变迁。

现在anyRTC公有云推流端支持SimulCast方式推送多码率的视频流;拉流端支持单通道多路流的方式。

同时anyRTC的著名开源项目anyRTC-RTMP-OpenSource也支持WebRTC的推拉流。

在这里插入图片描述

标签:anyRTC,SDP,详解,PlanB,UnifiedPlan,WebRTC,描述
From: https://www.cnblogs.com/anyrtc/p/17641063.html

相关文章

  • 融媒行业落地客户旅程编排,详解数字化用户运营实战
    移动互联网时代是流量红利的时代,企业常用低成本的方式进行获客,“增长黑客”的概念大范围传播。与此同时,机构媒体受到传播环境的影响,也开始启动全行业的媒体融合转型。在此背景下,2015年神策数据成立,核心解决的是帮助客户通过数据分析实现更好的增长。2020年之后数字化转型的大趋势......
  • 软件测试|Linux三剑客之grep命令详解
    简介grep是一款在Linux和类Unix系统中广泛使用的文本搜索工具。它的名字来源于GlobalRegularExpressionPrint(全局正则表达式打印),它的主要功能是根据指定的模式(正则表达式)在文本文件中搜索并打印匹配的行。grep非常强大且灵活,可以用于日志分析、文件过滤、代码搜索等多种场......
  • 软件测试|Linux三剑客之sed命令详解
    简介sed(StreamEditor)是一款流式文本编辑器,在Linux和类Unix系统中广泛使用。它的设计目的是用于对文本进行处理和转换,可以用于替换、删除、插入、打印等操作。sed命令通过逐行处理文本,允许您使用简单的命令来编辑大量文本数据。本文将详细介绍sed命令的基本用法和一些常见的......
  • 鸿蒙万能卡片开发详解-记忆翻牌游戏
    (目录)1.前言      翻牌游戏万能卡片,随机生成16张共包含8张完全不同的图像,游戏的目标是在有限30秒时间内,将16张卡片中包含相同的图像的卡片两两配对。匹配的规则是连续点击两张卡片,若卡背面的图像相同,则匹配成功,若不同则配对失败。游戏主要考察玩家的记忆力,因为游戏还规定......
  • JS数据类型详解
    JS的数据类型分为基本数据类型+引用数据类型基本数据类型:number,boolean,string,null,undefined, symbol(独一无二并且不可变的数据类型),bigint引用数据类型: Function,Array,Object区别:基本数据类型由于所占内存大小可控所以放于栈中,引用数据类型所占空间不固定放于堆中,并生......
  • 4G工业路由器的功能与选型!详解工作原理、关键参数、典型品牌
    随着工业互联网的发展,4G工业路由器得到越来越广泛的应用。但是如何根据实际需求选择合适的4G工业路由器,是许多用户关心的问题。为此,本文将深入剖析4G工业路由器的工作原理、重要参数及选型要点,并推荐优质的品牌及产品,以提供选型参考。  一、4G工业路由器的工作原理4G......
  • C++ 多线程详解之异步编程 std::packaged_task
    std::packaged_task将任何可调用对象(比如函数、lambda表达式等等)封装成一个task,可以异步执行。执行结果可以使用std::future获取。比如下面的例子,构造一个std::packaged_task后,get_future()函数返回一个std::future对象,可以获取task异步或者同步执行的结果。#includ......
  • java中volatile关键字详解
    简介volatile是Java语言中的一种轻量级的同步机制,它可以确保共享变量的内存可见性,也就是当一个线程修改了共享变量的值时,其他线程能够立即知道这个修改。跟synchronized一样都是同步机制,但是相比之下,synchronized属于重量级锁,volatile属于轻量级锁。JMM概述JMM就是Java内存模型(Jav......
  • vue3 vue.config.js配置详解
    //vue.config.js文件是用于VueCLI项目的全局配置的module.exports={  //部署应用包时的公共路径  publicPath:"./",  //生产环境构建文件的目录名(默认为dist)  outputDir:"dist",  //放置生成的静态资源的目录(默认为dist/static),可以修改为public。  assetsDir......
  • 互斥量概念、用法、死锁演示及解决详解
    互斥量概念、用法、死锁演示及解决详解视频:https://www.bilibili.com/video/BV1Yb411L7ak?p=7&vd_source=4c026d3f6b5fac18846e94bc649fd7d0参考文章:https://blog.csdn.net/qq_38231713/article/details/106091902互斥量(mutex)如果想深入了解可以具体看一下操作系统互斥量的讲......