精华内容
下载资源
问答
  • WebRTC是一种浏览器插件,通常被需要快速直接连接的网络应用程序所应用。WebRTC通过UDP协议来建立连接,因此它并不会通过你在浏览器配置文件中使用的代理服务器进行路由。即便您使用了代理,网站也能借此获取您真实...

    WebRTC是一种浏览器插件,通常被需要快速直接连接的网络应用程序所应用。WebRTC通过UDP协议来建立连接,因此它并不会通过你在浏览器配置文件中使用的代理服务器进行路由。即便您使用了代理,网站也能借此获取您真实的公共和本地IP地址。该插件可被用于泄漏你的本地IP地址或追踪媒体设备。

    如何避免WebRTC读取ip地址

    WebRTC协议可以绕过代理取到一些本机的网卡IP和真实的上网公网IP地址,那么我们可以使用替换模式来让网站取到我们指定的IP信息,或用禁用模式,让被访问的网站不能通过WebRtc协议来取我们的IP地址。

    我们可以借助 候鸟浏览器这种 浏览器指纹修改工具来解决更换浏览器指纹的问题。

    候鸟防关联指纹浏览器(mbbrowser.com)安装教程
    1、安装完成后,双击桌面上的“候鸟浏览器”图标打开;
    候鸟指纹浏览器下载 (mbbrowser.com

    2、在弹出登录框中输入您注册好的账户名称、密码信息,点击登录;

    3、登录后弹出候鸟浏览器的主界面,点击下面“新建环境配置”;

    4、弹出新建环境窗口进行配置,步骤分别是填入配置名称、选择系统、选择分辨率、随机一个UA、选择一个代理方式、填入代理IP信息、检测代理(检查代理的同时时区、国家、语言等信息会根据您的IP所在地区自动匹配),在Webrtc指纹处勾选“自动识别代理IP”设置完成后点击“创建环境”;

    我们使用候鸟浏览器的一个重要目的就是防止网站通过webrtc看到我的真实IP。我们在成功安装候鸟浏览器之后,需要设置一些参数:WebRTC 设置为替换模式。

    如果你不知道公网IP是多少,建议勾上自动检测IP,这样浏览器在启动的时候会自动检测出口IP. 内网IP地址一般随机一下就好,保证每个配置文件里的不要相同就可以。

    其作用是让网站检查不到你在用代理上网,让网站认为你就是台当地的电脑,而不必担心本机 IP 地址被暴露和被对方网站检测到。同时打开公网 IP 和内网 IP 设置,勾上公网 IP 的自动检测 IP 功能(增强伪装效果)

    我们可以看到,在用候鸟浏览器进行伪装之后,我们的ip地址、DNS以及WebRTC都统一变成了美国ip,这也就意味着我们成功阻止了网站对浏览器底层指纹的访问,隐藏了我们真实的ip地址。

    我们来看一下其它参数:

    JS.Navigater是一组Javascript对象,它储存了各种参数及其值,用于描述所使用的计算机的细节。浏览器可以自由访问所有JS.Navigator对象参数。由于它们具有一些独特性,特别是在各成分组合时,网站可以利用这些参数识别和追踪用户指纹。

    网站也会分析这些设置的一致性,从而揭示指纹的变化。这样的分析可能会暴露浏览器指纹随机发生器的使用。

    5、创建完成后,主界面环境列表中会出现刚刚创建的环境,点击“运行”按钮运行环境;

    6、环境运行后会弹出chrome浏览器,可以按“停止”按钮关闭环境;

    WebRTC插件会泄漏什么信息

    • 公网IP地址
    • 内网IP地址
    • 媒体设备的数量及其哈希值
    展开全文
  • WebRTC什么

    千次阅读 2019-04-04 17:30:32
    WebRTC(Web Real-Time Communication)是什么?标准?API?还是一个项目?众说纷纭。那么WebRTC到底是什么呢?

    计划做远程会见,主要功能是实现PC端、移动端音视频通信,监控以及录制。选择了两种方案,一种是集成声网的SDK,另一种是基于WebRTC。关于两种方案都写了一个Demo。第一次接触音视频通信,在这里整理下,希望帮助到更多人。

    WebRTC是什么

    WebRTC(Web Real-Time Communication)是什么?标准?API?还是一个项目?众说纷纭。那么WebRTC到底是什么呢?
    webRTC.org
    从官网上的描述我们可以知道,WebRTC是一个免费的开放项目,它通过简单的API为浏览器和移动应用程序提供实时通信(RTC)功能
    在这里插入图片描述
    这是官网给出的WebRTC架构图,其中

    • 紫色部分是Web开发者API层;
    • 蓝色实线部分是面向浏览器厂商的API层
    • 蓝色虚线部分浏览器厂商可以自定义实现。

    对于开发人员来说,WebRTC就是一组API。经常有人说WebRTC是JavaScript API的媒体引擎,准确说WebRTC是一个带有JavaScript API的媒体引擎。但这并不是全部。WebRTC并不止仅限于JavaScript。有很多系统是用C,Java,Python,C#,Erlang,Dart,甚至PHP所写。在移动端,原生软件在其客户端WebRTC SDK实现中使用的是Objective-C,Swift或者Java。但是最主要的是JavaScript。
    在这里插入图片描述

    ------摘自WebRTC权威指南

    W3C和IETF正在制定WebRTC标准,现在处于Draft状态。所以WebRTC是一组标准、协议也没错。只不过处于草案阶段

    如何使用WebRTC

    了解了WebRTC的基本概念之后,我们接下来看下如何使用WebRTC。首先我们需要知道的是,使用WebRTC的目的是:建立对等连接,传输媒体捕获的数据从而实现音视频通信。

    与传统的C/S或B/S架构不同,建立WebRTC会话的流程如下
    在这里插入图片描述
    WebRTC的通信过程可以看成如下三步:
    1.浏览器获取媒体设备(摄像头和麦克风)。
    2.通过信令过程,每一个peer和其它所有peer交换信息。
    3.发信之后,peers可以直接连接,并开始通信交流。

    为了实现这个过程,对于交换信息需要一个信令服务器。同样需要一对STUN/TURN服务器来实现NAT穿透。并且在不能直接通信的情况下传递媒体。

    如果你正致力于寻找一个使用WebRTC的应用的实现方法,那么下面这些是你需要处理的:

    客户端

    WebRTC只适用于浏览器吗?

    No, 图一可以看出Chrome、Firefox、Opera、Android、ios都支持WebRTC。事实上,WebRTC不仅可以用于浏览器、Android、ios,甚至可以和sip、Jingle、PSTN建立会话

    所以客户端可以是浏览器、移动应用、PC应用或者嵌入式设备。

    如何在Android APP中使用WebRTC呢?

    一种方式是引入官网提供的SDK,
    https://webrtc.org/native-code/android/
    在这里插入图片描述
    另一种方式是 基于webview加载使用WebRTC的H5页面。
    两种方式我都实践过了,都是可行的。

    信令

    信令的作用

    在实时通信中,信令的主要作用体现在四个方面

    1. 协商媒体功能和设置。
    2. 标识和验证会话参与者的身份。
    3. 控制媒体会话、指示进度、更改会话和终止会话。
    4. 当会话双方同时尝试建立或更改会话时,实施双占用分解。

    第1项是必备功能,第2、3、4项是可选功能或只是Web应用程序的一部分。

    为了避免出现冗余,并最大限度地提高与已有技术的兼容性,WebRTC标准并没有规定信令方法和协议。JavaScript会话建立协议JSEP概述了这种方式:

    WebRTC通话建立的思想是完全指定和控制媒体平面,但是尽可能将信令平面留给应用程序。其原理是,不同的应用程序可能更喜欢使用不同的协议,例如现有的SIP或Jingle呼叫信令协议,或者对于特定应用程序定制的东西,可能是针对新颖的用例。在这种方式中,需要交换的关键信息是多媒体会话描述,其指定了建立媒体平面所必需的传输和媒体配置信息。

    信令传输

    通常有三种方式用于传输WebRTC信令:HTTP、WebSocket和数据通道。

    信令协议

    WebRTC信令协议的选择不必局限于所选的信令传输方式。开发人员可选择创建自己的专有信令协议,采用SIP或Jingle等标准信令协议,或者使用通过抽象化处理剥离了信令协议细节的库。

    简单来说,如果你只需进行浏览器间通信话,推荐使用node.js作为信令服务器,通过socket.io传输信令。
    如果你需要与SIP或Jingle客户端进行互操作,你需要解决两个层面的问题:信令层、媒体层。
    两个网络使用的信令机制不同,所以要进行信令的转换,才能完成媒体的协商,建立会话。媒体层要完成编码的转换,以及rtp/srtp转换等功能。这里主要说项信令层面的互通。

    以SIP为例,目前sip和webrtc信令上互通有两种解决方案:

    • 用JavaScript实现sip协议栈,webrtc应用程序基于这个协议栈开发。这样webrtc client发出的信令就是sip信令,但一般采用websocket为信令传输协议。这样的webrtc client就可以直接注册到支持ws的sip server上了。
      jssip 、sipml5 都是这种解决方案。
    • 通过转换网关实现协议的转换,从而互通。一个开源的网关项目就是 webrtc2sip。
      webrtc2sip是一个功能很完善的网关,既实现了信令层,也实现了媒体层,编码转换功能很强大,也可以直接当做媒体网关,用于编解码,沟通两端的媒体。

    NAT穿透

    端到端通信的一个主要问题是,在许多情况下,这些端点并不在公共互联网中,而是位于网络(和端口)地址转换器(NAT)后面的专用地址空间中。随着互联网从DARPA项目发展成为全球范围的网络,很快就会明白IPv4的232地址空间早晚会用尽。
    在20世纪90年代,开发了多种策略来延迟IPv4地址耗尽的时间,其中之一就是NAT的设计。NAT将端点的真实IP地址隐藏于世界其他地方,这使得端点之间建立端到端直接连接变得困难。这就是协助框架—包括STUN和TURN(或使用中继NAT穿越)—派上用场的地方。

    我写Demo时使用的是公共的穿透服务器,但是建议自己搭建NAT穿透服务器。
    下面是webRTC中文社区列出的一些第三方NAT穿透服务器。
    在这里插入图片描述

    媒体

    媒体服务器不是必需的。那么媒体服务器到底有什么用处呢?

    多人参与的视频通话

    使用WebRTC我们可以建立对等通信,即P2P通信,那如果要实现多人通信,例如一个视频会议,该怎么做呢?
    有三种方案供我们选择

    1. Mesh(P2P)
      在这里插入图片描述
      网状结构即peer间两两连接,但随着参与者数量的增加,客户端会消耗大量的CPU和带宽。显示情况中,即便是最优的网络环境,参与人数超过5人之后,网状结构的视频通话就很难良好的运行了。这种架构只适合人数比较少的情况。一般建议2-3人使用场景。
    2. MCU(Multi-point Control Unit)
      在这里插入图片描述
          MCU表示多点控制单元。由使用peer连接变为只需要连接到中心服务器,中心服务器反过来发送消息到其它peers,并且对其它peers也是这样。
          通过使用MCU避免了Mesh中的问题。即使用户数量增加,也不会对用户处理能力和带宽产生影响,因为每个用户只需连接到媒体服务器。但是它却把压力从客户端转移到了媒体服务器上了
    3. SFU(Selective Forwarding Unit)
      在这里插入图片描述
      SFU表示选择转发单元。SFU可以说是相对于Mesh和MCU的一种折中方案。在SFU结构中,每个peer向媒体服务器发送自己的流,媒体服务器反过来将流引到其它peers。当然,当用户数量增加时,下载带宽会增加。

    视频录制

        让所有视频流都通过一个媒体服务器的好处之一是我们可以录制媒体并且存储下来以备不时之需。
        关于视频录制你可能会有以下几个问题

    • 要实现视频录制必须使用媒体服务器吗?
    • 不通过媒体服务器进行录制的话,那么录制应该在哪里进行呢?
    • 怎么把本地视频流和远程视频流保存到一个文件?
    • 录制的视频如何上传到服务器?

        其实,实现视频录制有很多种方案,不一定通过媒体服务器实现。我实现的思路是:客户端利用requestAnimationFrame函数进行录制并推送到服务器上,从而减轻服务器的压力。如果录制时间比较长的话,可以设置定时录制并上传服务器,然后在服务器上通过Ffmpeg把这些文件合并为一个文件。

    这个链接会对你有所启发:
    https://stackoverflow.com/questions/18509385/html-5-video-recording-and-storing-a-stream

    这里面提到了Media Recorder API、HTML Media Capture之类的东西。我使用的是RecordRTC,这是它的链接:https://github.com/muaz-khan/WebRTC-Experiment/tree/master/RecordRTC

    与其他通信技术的整合

    使用媒体服务器的另一个优势是可以与超出网页技术允许范围内的系统相通信,比如说通过SIP中继与PSTN进行通信,或者穿过RTMP流传输到支持它的服务中,比如Facebook Live和YouTube流直播。

    媒体流的处理

    一些媒体服务器允许以非常低的水平处理音视频流,比如能够在视频上运行机器视觉模型,或者将音频流发送给语音识别引擎,就像Google Speech一样。这些功能将WebRTC提升到了另一个层次;在我看来,它允许在一个普通的通信平台上添加更丰富和创新的互动,会大大提升它的价值。

    第三方媒体服务器

    在这里插入图片描述

    ------摘自WebRTC中文社区


    WebRTC回声消除简介
        在语音通话中所指的回声有两种,电路回声和声学回声,随着目前回声消除技术的发展,电路回声已经被很好的解决,所以现在回声消除的工作重心主要放在了解决声学回声消除的方法上。GIPS公司给WebRTC设计的回声消除算法是比较先进且效果较好的一种,我们所熟悉的腾讯QQ中就使用了这项技术,GIPS公司之前一直紧握着这项技术专利,直到Google将GIPS公司收购并且完全开源WebRTC,我们才有机会学习研究回声消除算法。WebRTC源代码中设计了两个回声消除模块,AEC(Acoustic Echo Canceller)和AECM(Acoustic Echo Canceller Mobile),AEC是在电脑端使用的回声消除器,而AECM是在移动端使用。由于电脑与移动设备的差别比较明显,在处理速度上,编解码器的性能上和内存方面都有着较大的差异。
       WebRTC还提供了音视频的采集、编解码、网络传输、显示等功能
    啸叫(或重音)
        特别需要注意的是,对本地的video/audio,要设置一个 muted 属性,这里的意思是指将本地视频流播放时静音,否则,就会出现本地视频流的声音又一次作为音频输入源的循环中,造成我们常说的“啸叫”或者“重音”问题。

    展开全文
  • WebRTC什么

    2018-06-28 11:38:56
    是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频...

    webrtc全名为网页实时通信(Web Real-Time Communication)的缩写是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。

    特点

    编辑
    WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。
    WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox\...)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现,W3C等组织正在制定Javascript 标准API,目前是WebRTC 1.0版本,Draft状态;另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。同时,Google也希望和致力于让WebRTC的技术成为HTML5标准之一,可见Google布局之深远。
    WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。

    架构

    编辑

    颜色标识说明

    (1)紫色部分是Web开发者API层;
    (2)蓝色实线部分是面向浏览器厂商的API层
    (3)蓝色虚线部分浏览器厂商可以自定义实现

    架构组件介绍

    (1) Your Web App
    Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。 [1]  
    (2)Web API
    面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里。  [2]  
    这些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三类,详细的API说明可以看这里。
    Network Stream API
    MediaStream:MediaStream用来表示一个媒体数据流。
    MediaStreamTrack在浏览器中表示一个媒体源。
    RTCPeerConnection
    RTCPeerConnection: 一个RTCPeerConnection对象允许用户在两个浏览器之间直接通讯。
    RTCIceCandidate :表示一个ICE协议的候选者。
    RTCIceServer:表示一个ICE Server。
    Peer-to-peer Data API
    DataChannel:数据通道( DataChannel)接口表示一个在两个节点之间的双向的数据通道 。
    (3)WebRTC Native C++ API
    本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。
    (4)Transport / Session
    传输/会话层
    会话层组件采用了libjingle库的部分组件实现,无须使用xmpp/jingle协议
    a. RTP Stack协议栈
    Real Time Protocol
    b. STUN/ICE
    可以通过STUN和ICE组件来建立不同类型网络间的呼叫连接。
    c. Session Management
    一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。
    (5)VoiceEngine
    音频引擎是包含一系列音频多媒体处理的框架,包括从 视频采集卡到网络传输端等整个解决方案。
    PS:VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的。在VoIP上,技术业界领先,后面的文章会详细了解
    a. iSAC
    Internet Speech Audio Codec
    针对VoIP和 音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认的编解码器
    采样频率:16khz,24khz,32khz;(默认为16khz)
    自适应速率为10kbit/s ~ 52kbit/s;
    自适应包大小:30~60ms;
    算法延时:frame + 3ms
    b.iLBC
    Internet Low Bitrate Codec
    VoIP音频流的窄带语音编解码器
    采样频率:8khz;
    20ms帧比特率为15.2kbps
    30ms帧比特率为13.33kbps
    标准由IETF RFC3951和RFC3952定义
    c.NetEQ for Voice
    针对音频软件实现的语音信号处理元件
    NetEQ算法:自适应抖动控制算法以及语音包丢失隐藏算法。使其能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小。
    是GIPS公司独步天下的技术,能够有效的处理由于 网络抖动和语音包丢失时候对语音质量产生的影响。
    PS:NetEQ 也是WebRTC中一个极具价值的技术,对于提高VoIP质量有明显效果,加以AEC\NR\AGC等模块集成使用,效果更好。
    d.Acoustic Echo Canceler (AEC)
    回声消除器是一个基于软件的信号处理元件,能实时的去除mic采集到的回声。
    e.Noise Reduction (NR)
    噪声抑制也是一个基于软件的信号处理元件,用于消除与相关VoIP的某些类型的背景噪声(嘶嘶声,风扇噪音等等… …)
    (6)VideoEngine
    WebRTC视频处理引擎
    VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。
    a. VP8
    视频图像编解码器,是WebRTC视频引擎的默认的编解码器
    VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。
    PS:VPx编解码器是Google收购ON2公司后开源的,VPx现在是WebM项目的一部分,而WebM项目是Google致力于推动的HTML5标准之一
    b. Video Jitter Buffer
    视频抖动缓冲器,可以降低由于视频抖动和视频信息包丢失带来的不良影响。
    c. Image enhancements
    图像质量增强模块
    对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升 视频质量

    相关说明

    编辑
    谷歌2011年6月3日宣布向开发人员开放WebRTC架构的 源代码。这个源代码将根据没有专利费的BSD( 伯克利软件发布)式的许可证向用户提供。  [3]   开发人员可访问并获取WebRTC的源代码、规格说明和工具等。  [4]  

    分析

    编辑

    视频

    WebRTC的视频部分,包含 采集、编解码(I420/VP8)、 加密、媒体文件、 图像处理、显示、网络传输与流控( RTP/RTCP)等功能。
    视频采集---video_capture
    源代码在webrtc\modules\video_capture\main目录下,包含接口和各个平台的源代码。
    在windows平台上,WebRTC采用的是dshow技术,来实现枚举视频的设备信息和视频数据的采集,这意味着可以支持大多数的视频采集设备;对那些需要单独驱动程序的 视频采集卡(比如 海康高清卡)就无能为力了。
    视频采集支持多种媒体类型,比如I420、YUY2、RGB、UYUY等,并可以进行帧大小和 帧率控制。
    视频编解码---video_coding
    源代码在webrtc\modules\video_coding目录下。
    WebRTC采用I420/VP8编解码技术。 VP8是google收购ON2后的开源实现,并且也用在 WebM项目中。VP8能以更少的数据提供更高质量的视频,特别适合视频会议这样的需求。
    视频加密--video_engine_encryption
    视频加密是WebRTC的video_engine一部分,相当于视频应用层面的功能,给 点对点的视频双方提供了数据上的安全保证,可以防止在Web上视频数据的泄漏。
    视频加密在发送端和接收端进行加解密视频数据, 密钥由视频双方协商,代价是会影响视频数据处理的性能;也可以不使用视频加密功能,这样在性能上会好些。
    视频加密的数据源可能是原始的 数据流,也可能是编码后的数据流。估计是编码后的数据流,这样加密代价会小一些,需要进一步研究。
    视频媒体文件--media_file
    源代码在webrtc\modules\media_file目录下。
    该功能是可以用本地文件作为视频源,有点类似 虚拟摄像头的功能;支持的格式有 Avi
    另外,WebRTC还可以录制音视频到本地文件,比较实用的功能。
    视频图像处理--video_processing
    源代码在webrtc\modules\video_processing目录下。
    视频 图像处理针对每一帧的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。
    视频显示--video_render
    源代码在webrtc\modules\video_render目录下。
    在windows平台,WebRTC采用direct3d9和directdraw的方式来显示视频,只能这样,必须这样。
    网络传输与流控
    对于 网络视频来讲,数据的传输与控制是核心价值。WebRTC采用的是成熟的RTP/RTCP技术。

    音频

    WebRTC的音频部分,包含设备、编解码(iLIBC/iSAC/G722/PCM16/RED/AVT、NetEQ)、加密、声音文件、声音处理、声音输出、音量控制、音视频同步、网络传输与流控(RTP/RTCP)等功能。
    音频设备---audio_device
    源代码在webrtc\modules\audio_device\main目录下,包含接口和各个平台的源代码。
    在windows平台上,WebRTC采用的是Windows Core Audio和Windows Wave技术来管理音频设备,还提供了一个混音管理器。
    利用 音频设备,可以实现声音输出,音量控制等功能。
    音频编解码---audio_coding
    源代码在webrtc\modules\audio_coding目录下。
    WebRTC采用iLIBC/iSAC/G722/PCM16/RED/AVT编解码技术。
    WebRTC还提供NetEQ功能---抖动缓冲器及丢包补偿模块,能够提高音质,并把延迟减至最小。
    另外一个核心功能是基于语音会议的混音处理。
    声音加密--voice_engine_encryption
    和视频一样,WebRTC也提供声音加密功能。
    声音文件
    该功能是可以用本地文件作为音频源,支持的格式有Pcm和Wav。
    同样,WebRTC也可以录制音频到本地文件。
    声音处理--audio_processing
    源代码在webrtc\modules\audio_processing目录下。
    声音处理针对 音频数据进行处理,包括回声消除(AEC)、AECM(AEC Mobile)、自动增益(AGC)、降噪(NS)、静音检测(VAD)处理等功能,用来提升声音质量。
    网络传输与流控
    和视频一样,WebRTC采用的是成熟的RTP/RTCP技术。


    展开全文
  • webrtc和jingle技术

    2015-09-11 16:59:41
    webrtc和jingle技术研究。语音和视频技术研究。
  • 在线教育的兴起和5G时代的到来对于WebRTC来说是一次很好的机遇,现在使用WebRTC技术的公司越来越多,学习和掌握WebRTC对于音视频开发者而言已经成为必要的技术之一。该课程将通过入门和实战,带你快速入门WebRTC开发...
  • WebRTC技术初探

    2021-01-22 13:13:40
    基于Web的实时通信技术简称WebRTC(Web real-time communication),是最近兴起的一种在Web浏览器内支持音/视频实时通信的新技术。基于该技术,开发者仅需调用简单的JavaScript API即可获得音/视频实时通信能力。该...
  • 尤其现在5G时代已经到来,WebRTC技术为必备技能。本课程序为WebRTC的理论基础教程,将带领你理解并掌握WebRTC的系统架构,媒体协商,网络协商,协议,信令服务,连接建立等理论知识。适合0基础小白以及想从事音视频...
  • WebRTC 拥塞控制技术

    千次阅读 2017-02-22 11:04:07
    对于共享网络资源的各类应用来说,拥塞控制技术的使用有利于提高带宽利用率,同时也使得终端用户在使用网络时能够获得更好的体验。在协议层面上拥塞控制是TCP的一个总要的组成部分;但是对于非面向链接的传输层协议...

    1. 概述

    对于共享网络资源的各类应用来说,拥塞控制技术的使用有利于提高带宽利用率,同时也使得终端用户在使用网络时能够获得更好的体验。在协议层面上拥塞控制是TCP的一个总要的组成部分;但是对于非面向链接的传输层协议,如UDP,其在协议层面上并没有对拥塞控制进行强制性的要求,这样做保证了最优的传输性能,且在拥塞控制的设计上也保留了更大的灵活性。

    WebRTC为我们提供了强大的音视频媒体引擎,前端开发者可以通过调用几个简单的js接口就能实现基于Web浏览器的实时音视频通信。而在媒体数据传输上,WebRTC采用了实时性较强UDP协议,并使用了RTP/RTCP技术。本文的主要内容就是介绍WebRTC中基于RTP/RTCP实现的拥塞控制技术。


    2. 拥塞控制算法

    WebRTC采用了两种拥塞控制算法:(1)基于延迟(delay-based)的拥塞控制算法;(2)基于丢包(loss-based)的拥塞控制算法。算法(1)由数据的接收方实现,接收方需要记录每个数据包到达的时间和大小,并计算每个数据分组之间(inter-group)的延迟的变化,由此判断当前网络的拥塞情况,并最终输出码率估计值由RTCP feedback(TMMBR或 REMB)反馈给发送方;算法(2)则由数据的发送方来实现,发送方通过从接收方周期性发来的RTCP RR(Receiver Report)中获取丢包信息以及计算RTT,并结合TMMBR或REMB中携带的码率信息算得最终的码率值,然后由媒体引擎根据码率来配置编码器,从而实现码率的自适应调整。从上面的描述可以看出,这两个算法在系统中并不是孤立存在的。


    拥塞控制算法时序图.png

    2.1 基于延迟(delay-based)的拥塞控制算法

    基于延迟的拥塞控制算法可以分成以下4个部分:(1)到达时间模型(arrive-time model);(2)预过滤(Pre-filtering);(3)到达时间滤波器(arrive-time filter);(4)过载检测器(over-use detector)。


    基于延迟的拥塞控制算法.png

    2.1.1 到达时间模型(arrive-time model)

    设相邻两个数据分组到达接收方的时间间隔为t(i) - t(i-1),而两者被发送的时间间隔则为T(i) - T(i-1),那么就有延迟变量d(i)=t(i)-t(i-1) - (T(i)-T(i-1))。如果d(i) > 0,就说明数据在网络传输时存在延迟的现象。

    在WebRTC中延迟变量d(i) = w(i)被视为随机过程W中一个采样点,并且是链路承载能力、网络当前传输状况以及当前发送速率等因素综合作用的结果。该随机过程W符合正态分布。当网络发生过载(over-use)时,我们期望w(i)会上升;当网络空闲(Under-use)时,则期望w(i)会下降。

    测量方程进一步改写为 d(i) = m(i) + v(i),其中m(i)符合均值为0的正态分布(标准正态分布),v(i)表示为网络抖动等因素带来的对数据延迟的影响。

    2.1.2 预过滤(Pre-filtering)

    预过滤的目的是处理由于通道中断造成的延迟瞬间变大的情况。在通道发生中断时,数据包会持续进入网络队列中,而当通道恢复时,所有的数据包会在一个burst时间(5 ms)里面全部发送,而这些数据包可能原先包分布于多个数据分组。而预过滤所要做的就是将这些在同一个burst时间里发送的数据包合为一个数据分组。

    这里涉及到了WebRTC中关于数据传输的一个设计--PacedSender。Encoded数据完成RTP封装之后先是被保存在本地应用的队列中,而不是直接发送到网络。此时可以将PacedSender视为一个数据发送的节拍器,它每隔一个burst时间启动一次,启动之后会将队列中的RTP包全数发出。

    数据包会在下面两种情况下被划分到一个数据分组:

    • 在同一个burst时间区间内被发送的数据包序列;
    • 一个数据包与相邻数据包的到达时间间隔小于一个burst时间,同时d(i) < 0,那么这个数据包将会被划到当前的分组中。

    2.1.3 到达时间滤波器(arrive-time filter)

    在此系统希望通过预测m(i)来检测当前的网络是否过载;而这里所采用的预测方法是卡尔曼滤波(Kalman filter)
    状态方程:m(i+1) = m(i) + u(i), 其中u(i)表示为状态噪声,符合0均值正态分布。
    测量方程:d(i) = m(i) + v(i), 其中v(i)表示为测量噪声,符合0均值正态分布。
    卡尔曼滤波器根据“5组公式”来迭代更新m(i) 的估计值m_hat(i),该估计值m_hat(i)则是下文过载检测器的检测依据。关于卡尔曼滤波器如何实现预测的详细介绍在这里就不做展开了,可参考文献[3]

    2.1.4 过载检测器(over-use detector)

    通过Kalman 滤波器能够获得延迟变量m(i)的估计值,而过载检测器的工作原理其实就是通过m(i)与阈值del_var_th进行比较来对当前的网络拥塞状况进行检测。如果m(i) > del_var_th且m(i) > m(i-1),同时该状态至少持续了overuse_time_th毫秒,则判断为网络过载(Over-use);如果m(i) < -del_var_th,则判断为网络空闲(Under-use);剩余的情况都被判断为Normal状态。

    由此可见,阈值del_var_th的设计对于整个算法的性能来说至关重要。如果del_var_th的值设得过大,那么整个算法的动态就会显得过于平滑,此时只有在数据分组严重delay时检测器才会触发over-use的信号;相反的,如果del_var_th的值设得过小,那么检测器就会对delay非常敏感,从而导致频繁触发over-use信号。因此,WebRTC提出了针对阈值del_var_th的动态调整算法:

    del_vat_th(i) = del_var_th(i-1)+ (t(i) - t(i-1)) * K(i) * (|m(i)| - del_var_th(i-1))

    其中,当|m(i)| < del_var_th(i-1)时K(i)=K_d;否则,K(i)=K_u。

    在WebRTC中本小节所涉及的各参数的参考值如下:
    del_var_th(0) = 12.5 ms, overuse_time_th = 10 ms, K_u=0.01, K_d=0.00018

    2.1.5 速率控制(rate control)

    速率控制子系统根据当前网络的拥塞情况(由过载检测器提供),计算带宽估计值并请求发送方对速率进行调整。该子系统通过有限状态机对速率进行自适应调整。其状态迁移如下图所示:


    速率控制状态机.png
    • 状态 Increase: 表明当前没有检测到网络拥塞,在此状态下传输速率需要逐步增加;它先是通过乘性增加来调整速率(乘性因子为1.08),当速率接近临界值时再通过加性增加逐步收敛,而这里所谓的临界值是指上一次在状态Decrease 时统计的下行码率;
    • 状态 Decrease: 表明当前检测到了网络拥塞,在此状态下传输速率需要逐步下降;在这里,WebRTC所采用的方法是乘性下降,其乘性因子为0.85;
    • 状态 Hold: 表明保持当前的速率不做改变。

    速率控制子系统最终会输出一个带宽估计值A_hat,并通过RTCP Feedback(TMMBR/REMB)请求发送方进行速率调整。

    2.2 基于丢包(Loss-based)的拥塞控制算法

    基于丢包的拥塞控制是通过对丢包率,RTT和带宽估计值A_hat这三个参数进行决策而实现的。其中带宽估计值A_hat正是由上节中的速率控制子系统所提供。

    基于丢包的拥塞控制在每次收到对方发送RTCP之后都会运行:

    • 当丢包率保持在[2%, 10%]时,当前数据发送方的带宽估计值As_hat保持不变;
    • 当丢包率大于10%时,带宽估计值将会降低:As_hat(i) = As(i-1)*(1-p),其中p为丢包率;
    • 当丢包率小于2%时,带宽估计值将会上升:As_hat(i) = As(i-1)*1.05。

    As_hat更新之后将与A_hat进行比较,然后取两者中的较小值作为最终的带带宽估计值。

    其实在原生的代码中,系统还会将丢包率和RTT作为参数,通过TFRC [RFC 5348]的吞吐率计算公式对当前的带宽进行估计,而最终的估计值则是取三者中的最小值。


    3. 后语

    通过上文的介绍,我们知道WebRTC中的拥塞控制算法还是非常完备的。其分别针对数据包的延迟和丢包设计了delay-based和loss-based拥塞控制算法,在两者的共同作用之下,WebRTC能够满足大部分场景下的实时视频通话业务。但是,如果有要对WebRTC中的媒体引擎进行移植的朋友,首先要分析一下WebRTC的拥塞控制算法是否满足你的业务需求:如果是开发独立应用,由于业务闭环,直接使用现有的算法应该问题不大;但是,如果是用于开发提供类似VoLTE/VoWIFI这样的运营商增值服务的应用,需要依据运营商的技术手册和3GGP协议等来对拥塞控制算法进行适配。

    展开全文
  • Webrtc 视频会议技术

    2013-11-29 14:02:59
    转载几篇做可以做视频会议的技术,以后会累加 1:http://caok1231.com/blog/2013/10/22/webrtc-2/ 2:  
  • 什么是WebRTC

    千次阅读 2020-05-29 09:31:03
    什么是WebRTCWebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项...
  • WebRTC技术

    千次阅读 2013-12-12 13:43:06
    这是一段简单的代码,关于HTML5的WebRTC技术,主要描述了如何使用RTCPeerConnection的步骤. 代码地址: https://github.com/samdutton/simpl/blob/master/rtcpeerconnection/js/main.js Demo地址: ...
  • webrtc技术

    2019-08-10 16:20:50
    starrtc,IM即时通信消息系统 地址 https://github.com/starrtc https://gitee.com/explore/im
  • WebRTC技术什么突然崛起了?

    千次阅读 2020-09-27 13:54:22
    什么是WebRTCWebRTC,即Web Real-Time Communication(网页即时通信)。它是一个开源项目,旨在创建简单、标准化的流程通过Web提供实时通信(RTC)。 WebRTC最初是为了在网页浏览器中进行实时通信而建立的。你...
  • WebRTC直播技术方案

    2020-04-28 19:08:40
    我们都知道,WebRTC是面向互联网的一种即时通信标准,由于被Chrome、火狐、Safari等主流浏览器支持,并提供了一致和简洁的API,使得开发WebRTC的视频通信应用非常简单和流行。在大多数情况下,我们认为双向视频通信...
  • #使用方法 使用此应用需要安装Node。 安装完后,在命令行进入文件根目录后运行npm install安装所需依赖。 打开server.js文件,这只...实时对战小游戏(这个是低端版的Cube Slam,之前GOOGLE用WEBRTC技术开发了一款实
  • WebRTC IPFS信令 该项目是一个概念证明,旨在了解我们是否可以使用IPFS进行WebRTC信令,从而无需使用单独的服务器。 目标1-浏览器到浏览器信令 状态:已完成 我目前已打开调试功能,因此控制台日志确实显示了一些...
  • WebRTC

    2015-09-15 15:09:39
     可能您还不知道WebRTC什么,但您一定用过他里面的东西,因为QQ就用到了他的核心技术,不过那时候这些东西还不叫WebRTC,他也还掌握在GIPS手里(他们家的语音技术可谓独步天下),而且当年小马哥也给人家交了不少...
  • webRTC技术

    2020-10-26 16:25:58
    webRTC运行机制 轨和流 Track MediaStream 重要的类 MediaStream RTCPeerConnection(媒体流传输) RTCDataChannel(文本,文件等非视频文件流传输,通过 RTCPeerConnection 获取) webRTC使用 获取设备 ...
  • 音视频WebRTC直播技术
  • WebRTC技术在浏览器上直接实现语音、视频和文件共享等业务,极大地提高了使用的便利性。由于其开源和开放,使得VoIP应用的开发更为简单和快速。在对WebRTC进行介绍的基础上,分析了其发展趋势以及对运营商通信业务的...
  • WebRTC技术调研

    2017-07-06 10:01:00
    相关网址: 协议:https://www.w3.org/TR/webrtc/ https://apprtc.webrtc.org/ https://apprtc.appspot.com/ https://github.com/webrtc/apprtc 自建AppRTC:...基于webrtc的apprtc服务器的搭...
  • WebRTC 具有开放标准、简单易...总结了 WebRTC 的主要技术特点,对设计和开发基于 WebRTC 技术的移动客户端应用和 Web 应用进行技术分析,给出基于 WebRTC 技术的移动客户端应用、Web 应用和服务平台的参考设计和实现。
  • WebRTC技术详解

    千次阅读 2021-05-04 00:41:02
    随着4G的普及和5G技术的应用,实时音视频技术正在蓬勃发展。实时通信技术已经渗透到各行各业,支撑着人们的日常生活。在互联网领域,花椒、映客等直播平台吸引了大量的用户;在教育领域,通过实时直...
  • RTC在规模直播场景下的技术分析.pdf 泛娱乐场景下的实时音视频技术解析-陈若非.pptx AMG2.0 手游棋牌的实时音视频新体验-陈若非_Final.pptx 高泽华-面向不可靠传输网络的抗丢包编解码器v2.pdf 好未来-直播的演进与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,861
精华内容 3,544
关键字:

webrtc是什么技术