WebRTC技术专题(2)【大势所趋,迈向认识 WebRTC 的第一步】

news2024/11/24 4:41:25

每日一句

人生的挑战,无处不在,满怀信心,轻装上路,明天永远是充满希望的战场。

承接上文

承接上文的内容介绍完相关WebRTC技术的概念和发展历程后,开始初步摸索一下相关WebRTC技术的功能和原理

技术回顾

WebRTC概念定义

WebRTC名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。

WebRTC功能范畴

  • WebRTC是一个开源项目,旨在使得浏览器能为实时通信(RTC)提供简单的 JavaScript接口。

  • WebRTC不仅可传输视频,也可以传输其他数据例如文本、图片等。需要注意的是,WebRTC并不是浏览器的一个子集,浏览器只是根据 WebRTC 的标准协议实现了 WebRTC的原生接口。Android 和 IOS 系统也支持 WebRTC 。

WebRTC应用包括下面四个主要的概念

  • 信令服务器(Signalling servers)

  • ICE服务器(ICE servers)

  • 媒体服务器(Media servers)

  • JavaScript接口 (JavaScript API)

WebRTC已经纳入HTML5标准

目前支持WebRTC协议的浏览器有:Chrome、Firefox Opera,IE不支持~

  • WebRTC没有指定具体的信令协议,具体的信令协议留给应用程序实现。

  • WebRTC使用JSEP协议建立会话,什么是JSEP后面说

  • WebRTC采用ICE实现NAT穿越。

  • WebRTC客户端之间可以进行点对点的媒体传输。

WebRTC的核心组件

  • 音视频引擎:OPUS、VP8/VP9、H264

  • 传输层协议:底层传输协议为UDP

  • 媒体协议:SRTP/SRTCP

  • 数据协议:DTLS/SCTP

  • P2P内网穿透:STUN / TURN / ICE / Trickle ICE

  • 信令与SDP协商:HTTP / WebSocket / SIP、 Offer Answer 模型

下图为WebRTC内部结构简化图:

  • 最底层是硬件设备

  • 上面是音频捕获模块和视频捕获模块

 

  • 中间部分为音视频引擎

    • 音频引擎负责音频采集和传输,具有降噪、回声消除等功能。

    • 视频引擎负责网络抖动优化,互联网传输编解码优化。

在音视频引擎之上是一套C++ API,在C++ 的API之上是提供给浏览器的Javascript API。

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

JSEP

  • JSEP(JavaScript Session Establishment Protocol,JavaScript会话建立协议)是一个信令API,允许开发者构建更强大的应用程序以及增加在信令协议选择上的灵活性。

  • JSEP是干什么的呢,一方面提供接口如createOffer()供web应用程序调用生成SDP,另一方面提供ICE功能接口。这些功能都由浏览器实现,浏览器WebRTC传输信令(offer/answer)采用Websocket

    • 建立会话最关键的就是媒体的协商,WebRTC虽然没有指定具体的信令协议,但是媒体协商采用了SDP协议。

    • 如果web应用程序不使用额外的信令协议,仅使用JSEP,两个WebRTC client(同一个WebRTC client程序,两处登陆)之间也是可以建立链接的,即只要应用程序能解析用WS传递过来的Offer/Answer消息,提取出其中的SDP和ICE信息就可以了。

  • github上codelabdemo就是不用其他信令协议,直接使用JSEP生成offer/answer信令,然后采用ws协议传输实现的

  • JSEP并不是信令协议,可以在JSEP的基础上引入SIP等信令协议,使WebRTC应用功能更加完备。

信令服务器

  • 信令服务器主要用于在两个用户之间交换信息。虽然WebRTC是点对点通信,但还是需要服务器来初始化连接,并传递一些信息

WebRTC没有定义用于建立信道的信令的协议,因此可以使用任意的传输方式,例如 WebSocket, XMPP, SIP, AJAX

  • 可以使用实时的传输协议比如WebSocket来交换数据,也可以使用简单的 GET/POST方式轮询服务器来获取数据。

信令服务器传送的数据有

  1. 协商媒体功能和设置

  2. 标识和验证会话参与者的身份

  3. 控制媒体会话指示进度更改会话和终止会话

其中只有第一项的必备功能。其他都可以根据业务需求自由调整。

SDP协议

  • 媒体协商最重要的功能在于,为参与点对点通信的两个浏览器之间交换会话描述协议「SDP」。

  • 「SDP」包含浏览器的RTP媒体栈配置所需的全部信息,包括媒体类型(音频、视频、数据)、所需的编解码器,用于编解码器参数或设置,以及有关带宽的信息。

此外,信令通道还用于交换候选地址,以便进行ICE打洞。

信令互通方案

WebRTC与SIP互通

要想让WebRTC与SIP互通,要解决两个层面的问题:信令层和媒体层。

两个网络使用的信令机制不同,所以要进行信令的转换,才能完成媒体的协商,建立会话。媒体层要完成编码的转换,以及RTP/SRTP转换等功能。

这里主要说项信令层面的互通。

目前SIP和WebRTC信令上互通有两种解决方案:

  • JavaScript实现SIP协议栈,WebRTC应用程序基于这个协议栈开发。WebRTC Client发出的信令就是SIP信令,但一般采用websocket为信令传输协议。

    • 这样WebRTC client就可以直接注册到支持WS的SIP Server上了。jssip 、sipml5都是这种解决方案。

  • 通过转换网关实现协议的转换,从而互通。一个开源的网关项目就是 WebRTC2SIP。

    • WebRTC2SIP是一个功能很完善的网关,既实现了信令层,也实现了媒体层,编码转换功能很强大,也可以直接当做媒体网关,用于编解码,沟通两端的媒体

ICE服务器

  • 实现点对点通信的关键在于两个浏览器之间能直接发送和接收数据包,但一般情况下,浏览器或手机都是通过路由器访问Internet,所以存在网络地址转换(NAT)。

  • NAT之内的IP地址是私有地址,外部无法访问。分配给NAT的IP地址才是公共地址。NAT每次从内部到外部转发数据包时都使用公共地址。

  • 交互式建立连接(ICE)是一种标准穿透协议,它利用STUN和TURN服务器来建立连接。

  • STUN服务器可以遍历NAT,获取浏览器的候选地址,包括私有地址、外层NAT的公共 IP地址等。

  • 通信信令通道可以交换候选地址,浏览器一旦发送并收到了候选地址,就会开始进行连接检查,若检查成功,便使用该候选项发送媒体。

  • 在大多情况下,通过穿透可以建立直接对等连接。但是,若NAT或防火墙限制非常严格,无法建立连接,就只能通过TURN服务器中继媒体。

媒体服务器

媒体服务器不是必须的,但在多方会话或需要对媒体做额外处理的情况下可以考虑加入。对于有多个浏览器参与的会议,可以采用一个集中式媒体服务器。在这种情况下,美国浏览器都只需与媒体服务器建立单个连接即可,这种结构的优势是额能够扩展非常大的会话,同时可以在最大限度上减少当有新加入者加入会话事美国浏览器所需的处理工作量。同时,媒体服务器也可对媒体进行分析、处理、保存等工作。

JavaScript接口

getUserMedia

通过调用navigator.getUserMedia()可以获取视频或音频的数据,constraints 参数可以选择是否获取视频音频。下面是一个简单的示例

var constraints = {
  audio: false,
  video: true
};
var video = document.querySelector('video');
​
function successCallback(stream) {
​
  if (window.URL) {
    video.src = window.URL.createObjectURL(stream);
  } else {
    video.src = stream;
  }
}
​
function errorCallback(error) {
  console.log('navigator.getUserMedia error: ', error);
}
​
​
navigator.getUserMedia(constraints, successCallback, errorCallback);

RTCPeerConnection

RTCPeerConnection是WebRTC中最重要的一个接口,用于确定ICE服务器、交换 SDP。连接过程如下:

创建RTCPeerConnection对象

  1. RTCPeerConnection的参数用于确定ICE服务器,下面是使用了 google 开放的 STUN 服务器

let iceServer = {
    "iceServers": [{
        "url": "stun:stun.l.google.com:19302"
    }]
};
let pc = new RTCPeerConnection(servers);

    2.将媒体流放入 RTCPeerConnection 对象中

pc.addStream(localStream);

通过offer和answer交换SDP描述符

  1. 甲和乙各自建立一个PC实例

    • 甲通过PC所提供的createOffer()方法建立一个包含甲的SDP描述符的offer信令

    • 甲通过PC所提供的setLocalDescription()方法,将甲的SDP描述符交给甲的PC实例

  2. 甲将offer信令通过服务器发送给乙

    • 乙将甲的offer信令中所包含的的SDP描述符提取出来,通过PC所提供的 setRemoteDescription()方法交给乙的PC实例

    • 乙通过PC所提供的createAnswer()方法建立一个包含乙的SDP描述符 answer信令

    • 乙通过PC所提供的setLocalDescription()方法,将乙的SDP描述符交给乙的PC实例

  3. 乙将answer信令通过服务器发送给甲

甲接收到乙的answer信令后,将其中乙的SDP描述符提取出来,调用setRemoteDescripttion()方法交给甲自己的PC实例。

ICE打洞

1.当网络候选可用时,通过信令服务器将其发送到对方浏览器

pc.onicecandidate = function(event) {
  if (event.candidate) {
    sendToServer(event.candidate)
  }
};

2.当接受到对方网络候选时,将其加入

let candidate = new RTCIceCandidate(candidate);
pc.addIceCandidate(candidate);

3.监听对方发送的媒体是否可用,并播放媒体

pc.onaddstream = event => {
  remoteVideo.src = window.URL.createObjectURL(event.stream);
}

RTCDataChannel

RTCDataChannel是RTCPeerConnectionAPI的一部分,只有在创建了 RTCPeerConnection实例后才能创建数据通道。

数据通道可以用于发送文本或是文件。

pc = new RTCPeerConnection();
dc =  pc.createDataChannel('dc');
dc.onmessage = event => console.log(event.data);
dc.send('text');
dc.sed(new arraybuffer(32))

在另一端可以使用 ondatachannel 获得 RTCDataChannel 对象

pc.ondatachannel = event => dc = event.channel;

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

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

相关文章

字符串压缩(二)之LZ4

一、LZ4压缩与解压 LZ4有两个压缩函数。默认压缩函数原型: int LZ4_compress_default(const char* src, char* dst, int srcSize, int dstCapacity); 快速压缩函数原型: int LZ4_compress_fast (const char* src, char* dst, int srcSize, int dstCapaci…

router路由的配置和使用(详细教程)

vue路由的原理: 路由就是专门来实现单页面应用的;根据不同的路径,加载不同的组件;路径和组件之间一一映射的关系;路径,组件一一对应;加载这个路径,这个组件就出来了;原理…

第五章. 可视化数据分析分析图表—概念介绍

第五章. 可视化数据分析分析图表 5.1 概念介绍 1.如何选择合适的图标类型 1).图标分类框架示意图: 2.图表的基本组成 1).图表的基本组成部分:画布,图标标题,绘画区,数据系列,坐标轴,坐标轴标题…

publish前自动执行sonarqube

根据SonarQube官方描述,SonarQube由三个组件组成: SonarQube Server,运行如下进程: 一个服务于SonarQube用户界面的web服务器基于Elasticsearch的搜索服务器负责处理代码分析报告并将其保存在SonarQube数据库中的计算引擎 Databa…

多卡聚合通信设备在广电视频传输行业解决方案

1 背景介绍 现场视频回传作为信息量最大、信息表达最直观的一种方式,一直是各家电视台、报社等媒体单位获取素材最理想的方式。由于受技术、成本及基础设施的限制,视频素材的回传的距离、质量一直受到较大影响。而随着4G/5G技术的快速发展,多…

【JAVA案例】判断电话号码运营商

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录问题提出:如何判断电话号码属于哪个运营商?一、代码设计思路二、完整源…

Java SPI机制的使用和理解

前言: SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,Java中 SPI 机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦 1、大家都知道API,却…

01【高内聚低耦合、Spring概述、IOC容器、Bean的配置方式】

文章目录01【高内聚低耦合、Spring概述、IOC】一、高内聚低耦合1.1 程序架构设计1.2 低耦合1.2.1 耦合概念1.2.2 如何降低耦合1.3 高内聚1.4 不能完全低耦合二、Spring概述2.1 Spring 是什么2.2 Spring出现的背景2.3 Spring包详解三、Spring快速入门3.1 搭建Spring环境3.2 编写…

60 - 数组类模板

---- 整理自狄泰软件唐佐林老师课程 1. 预备知识 模板参数可以是 数值型参数(非类型参数) 数值型模板参数的 限制 变量不能作为模板参数浮点数不能作为模板参数类对象不能作为模板参数 本质:模板参数是在 编译阶段 被处理的单元&#xff0c…

基于内部模型的鲁棒图像增强

论文题目: ROBUST INTERNAL EXEMPLAR-BASED IMAGE ENHANCEMENT 1 摘要 图像增强的目的是修改图像,以实现更好的人类视觉系统感知或更合适的表示来进一步分析。根据给定输入图像的不同属性,任务也会有所不同,如噪声去除、去模糊、…

jsp三好学生评审管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 三好学生评审管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql&#xff0…

R语言highfrequency高频金融数据导入

R中针对高频数据的添加包highfrequency,用于组织高频数据, 高频数据的清理、整理,高频数据的汇总,使用高频数据建立相关模型 都非常方便。但是其中数据输入的过程中,会使用到包里的函数convert()。 最近我们被客户要求…

软件测试行业女生真的没有一席之地了吗,还能入行软件测试吗?

可以,但并不容易。 要比男生面临更多的挑战和付出更多的努力。 首先我强烈反对女生更适合做测试的这种论调: ●女生更为心细,更有耐心,能够更好的找出bug;,测试不用写代码,女生学更容易上手; ●测试强度低,…

发送自定义广播

文章目录发送自定义广播发送标准广播发送有序广播发送自定义广播 发送标准广播 新建一个MyBroadcastReceiver,在onReceive()方法当中编写具体逻辑 class MyBroadcastReceiver : BroadcastReceiver() {override fun onReceive(context: Context, intent: Intent) {Toast.make…

停止员工拖延症!工时管理系统的作用之一

你能想象每天支付给每位员工的工资会损失 27% 吗?这就是最近一项研究发现的正在发生的事。根据 rebootonline.com 的研究,每位员工平均每天要花 122 分钟在拖延上。这意味着这些员工只工作了 73% 的工作日时间,即使他们的工时表另有说明。公司…

出口-汇聚-接入层组网设计

目录 出口组网设计: 汇聚层组网设计 接入层组网设计 出口组网设计: 对于中型的商超、普教场景,网络规模较大,推荐出口采用防火墙双机组网,出口的链路推荐多运营商链路备份。出口网关设备需要部署的主要功能&#xf…

高等数学(第七版)同济大学 习题10-3 (前9题)个人解答

高等数学(第七版)同济大学 习题10-3(前9题) 函数作图软件:Mathematica 1.化三重积分I∭Ωf(x,y,z)dxdydz为三次积分,其中积分区域Ω分别是\begin{aligned}&1. \ 化三重积分I\iiint_{\Omega}f(x, \ y, …

Git常用操作

目录一、前言二、查看变更及历史信息2.1 查看变更状态1、显示本地仓库有变更的文件2.2 查看历史记录1、查看历史提交记录2、查看历史某个文件的提交记录三、撤销提交3.1 撤销工作区的修改3.2 撤销暂存区的提交3.3 撤销已经提交到本地仓库的代码四、冲突解决4.1 远程仓库中有新增…

iText7高级教程之html2pdf——6.在pdfHTML中使用字体

到目前为止,我们还没有花太多的精力来研究将HTML转换为PDF时使用的字体。我们知道Helvetica是iText在没有指定字体时使用的默认字体(第2章),我们知道如果需要嵌入字体,pdfHTML会附带一些内置字体(第4章&…

线下商家卖货难、拓客难、引流难,不如学习一下怎么结合O2O电商

大家好,我是阿璋,互联网行业中一直流传着这样的一句话,说的是“站在风口上,猪都能飞起来”。这句话的意思是,如果跟上了时代的发展,并且在时代发展的关键档口,那么在时代的推动下,也…