webrtc入门实践

webrtc入门实践

目的

  • 了解相关概念
  • 实现一个简单p2p连接

webrtc的来历

2010年5月,Google 以6,820万美元收购 VoIP 软件开发商 Global IP Solutions 的 GIPS 引擎,将其开源并改为名为“WebRTC”。随即 WebRTC 被纳入万维网联盟的 W3C 推荐标准。2014年7月1日,WebRTC 浏览器 API 标准的1.0版由 W3C 发布。WebRTC 是一个由 Google、Mozilla和 Opera 主导的开源项目,通过在浏览器中调用简单的 JavaScript API 和标准的 HTML5 标签,浏览器、手机平台还有其他设备可通过一个通用的协议进行实时通信。

webrtc是什么?

借助WebRTC,您可以在基于开放标准的应用程序中添加实时通信功能。 它支持在同级之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。 该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。 WebRTC背后的技术被实现为一个开放的Web标准,并在所有主流浏览器中以常规JavaScript API的形式提供。 对于本机客户端(如Android和iOS应用程序),可以使用提供相同功能的库。 WebRTC项目是open-source,并得到Apple,Google,Microsoft和Mozilla等的支持。

webrtc(Real-time communication for the web)是一门不需要安装任何浏览器插件就可以在浏览器端实现web实时通讯的技术。

但是webrtc只提供了客户端的能力,并没提供服务端的能力。比如信令服务器、tun/stun服务器、媒体流服务器等

webrtc能干什么?

WebRTC有许多不同的用例,从使用摄像头或麦克风的基本Web应用程序到更高级的视频通话应用程序和屏幕共享。 我们收集了许多代码示例,以更好地说明该技术如何工作以及您可以将其用于什么。例子

场景:

  • 直播

  • 会议

  • 在线教育

  • 软电话

    等等…

API功能:

  • 音视频实时通话

  • 通话过程中,实时修改宽带

  • 通话前进行视频转码。例如:vp8转vp9,vp9转H264

  • 可以先SDP协商,真正需要建立连接时再进行ICE协商,最终建立连接。该功能可缩短建立建立的时间,改善用户体验

  • 可以将输出流转发给另一个连接,意味着多个连接可以共享一个媒体流。

  • 可以将多个媒体轨道流混成一个流发送,反之亦然

  • 可以修改sdp参数

  • 跨终端音视频。例如:拨打软电话、Polycom等等。

    等等…

webrtc怎么用?

###相关概念

  • MediaStreamTrack对象的集合,也就是MediaStream

  • 轨道

    媒体流(MediaStream)基本组成单元(MediaStreamTrack)

  • STUN服务器

    概念:全称Session Traversal Utilities for NAT,NAT会话穿透实用工具,提供遍历候选项地址服务

    作用:遍历NAT并返回候选项地址

  • TURN服务器

    概念:全称Traversal Utilities for NAT,NAT遍历实用工具

    作用:TURN服务器除了能够遍历遍历候选项地址外,还可以在ICE打洞失败时提供媒体中继地址

  • NAT

    概念:网络地址转换(NetWork Address Translation)。处于同一个网段的IP地址都属于同一个NAT内,所以在互联网中会存在着许多的NAT网络,还有可能存在着多个NAT之间的包含关系。注意:两个不同的NAT之间不能直接进行信息交换,因为从外网发往内网的数据包将被NAT设备丢弃,这使得位于不同NAT设备之后的主机之间无法直接交换信息。

    作用:通过路由或交换机将内网端口IP地址映射到外网的端口IP地址

  • 内网穿透(NAT穿透)

    概念:通常情况下两个内网IP(即同一个NAT下)不需要进行网络穿透(打洞)就可以直接访问对方(前提是没有防火墙等因数的干扰),但在通常情况下我们的网络是非常复杂的(即指两个用户不在同一个NAT下),而两个NAT之间是不能直接相互访问的,所以 内网穿透就是通过内外网端口地址映射(即NAT)实现能让外网访问内网的一门技术。

    作用:将两个不同NAT的用户打通,从而实现通信功能

  • 流媒体服务器

    概念:对于Mesh系统架构来说,媒体流是直接从本地流向远端的(中间有可能穿越多个NAT),对于MCU和SFU需要一个中间服务器来转发处理两端的流,这个服务器就称为流媒体服务器。

    作用:转发和处理流

  • 上行、下行

    概念:对于Mesh和MCU系统架构来说对等端连接是双向的所以没有上、下行之分,但是对于SFU来说推流和拉流的是分开的,将本地流推送至媒体流服务器的连接通常称之为上行,而拉去远端媒体流的连接则称为下行。

    作用:上行推流,下行拉流

  • 信令(signaling)服务器

    • 概念:是一个提供对等端可靠通讯的服务(通常采用websock与客户端进行通讯)

    • 作用:

      1、媒体协商和设置

      2、标识和身份验证

      3、会话控制

      4、双占用分解

  • 多人视频通讯常用架构Mesh/MCU/SFU

    架构图:
    请添加图片描述

    • Mesh

      即:每个端都与其它端互连。以上图最左侧为例,5个浏览器,二二建立p2p连接,每个浏览器与其它4个建立连接,总共需要10个连接。如果每条连接占用1m带宽,则每个端上行需要4m,下行带宽也要4m,总共带宽消耗20m。而且除了带宽问题,每个浏览器上还要有音视频“编码/解码”,cpu使用率也是问题,一般这种架构只能支持4-6人左右,不过优点也很明显,没有中心节点,实现很简单。

    • MCU( (MultiPoint Control Unit))

      这是一种传统的中心化架构(上图中间部分),每个浏览器仅与中心的MCU服务器连接,MCU服务器负责所有的视频编码、转码、解码、混合等复杂逻辑,每个浏览器只要1个连接,整个应用仅消耗5个连接,带宽占用(包括上行、下行)共10m,浏览器端的压力要小很多,可以支持更多的人同时音视频通讯,比较适合多人视频会议。但是MCU服务器的压力较大,需要较高的配置。

    • SFU((Selective Forwarding Unit))

      上图右侧部分,咋一看,跟MCU好象没什么区别,但是思路不同,仍然有中心节点服务器,但是中心节点只负责转发,不做太重的处理,所以服务器的压力会低很多,配置也不象MUC要求那么高。但是每个端需要建立一个连接用于上传自己的视频,同时还要有N-1个连接用于下载其它参与方的视频信息。所以总连接数为5*5,消耗的带宽也是最大的,如果每个连接1M带宽,总共需要25M带宽,它的典型场景是1对N的视频互动。

    基于宽带考虑的建议:如果规模不大(5人以下) Mesh框架就够用了,毕竟实现简单;如果50人以下,且带宽有限,选择MCU比较适合;如果规模更大,且带宽良好,SFU相对更适合。

  • ICE协议

    概念:交互式连接建立(Interactive Connectivity Establishment)是一种标准穿透协议

    作用:利用STRUN和TURN服务器来帮助断点监建立连接

  • sdp

    概念:会话描述协议(session description protocol)

    作用:用于描述对等连接的媒体特征,进行媒体协商

如何建立一个RTCPeerConnection对等连接?

  • 第一步:获取媒体流

    媒体约束:

    //媒体约束
    const constraints:MediaStreamConstraints={
         
      video:MediaTrackConstraints;
      audio:MediaTrackConstraints;
    }
    

    以下是轨道约束(MediaTrackConstraints)参数说明:

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eshineLau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值