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

就 冲着6000多万美金的技术,就很值得研究一下!WebRTC提供了视频会议的核心技术,包括音视频采集、编解码、网络传输、显示等功能,并且还支持跨平 台:Windows,Linux,Mac,Android,尤其是在实时通信方面的很多技术可以灵活嫁接到非RTC类流媒体系统中,例如,在低带宽下的视 频抖动控制,图像效果增强,通用NAT穿透过程等等(后面咱们再具体细说如何嫁接),那么这就需要我们对WEBRTC的整体流程以及深层次的框架进行熟悉 和掌控,这一篇里,我们先通过浏览器端WEBRTC视频通话过程,了解WEBRTC浏览器基本接口和一次RealTime视频通话的流程。

  

WEBRTC结构

  首先,从WEB-RTC方面分析WEBRTC在浏览器上的接口结构,在浏览器端,WEBRTC主要实现了三个接口

  • MediaStream, 实现对本地音视频资源的封装,例如从Camera、Microphone、远端Stream等等,MediaStream表示一个媒体数据流,一个 MediaStreamTrack表示MediaStream中的一个媒体源,如音频、视频、字幕等等。
  • RTCPeerConnection,语音或者视频通话过程,内部涵盖呼叫、应答、穿透、加密、传输及会话管理等一系列流程,一个RTCPeerConnection代表一对通话过程中的一端。
  • RTCDataChannel,在PeerConnection之上,传输自定义数据。

#MediaStream

在浏览器端,MediaStream接口名称为getUserMedia, 该接口为上层提供同步的音视频流,比如在本地媒体资源获取的时候,一路MediaStream可以是一路本地Camera提供的视频Track与一路本地 Microphone提供的音频Track经过同步后的Stream。当然,在浏览器端获取到音视频数据后,可以做本地化的各种处理,例如抓图、图像样式 变化、本地显示滤镜等等。

#RTCPeerConnection

RTCPeerConnection主要是用来处理点到点之间的连接和数据 传输,使整个过程能够稳定且高效。在RTCPeerConnection下,封装了大量的编解码、通信协议的工作来实现整个实时通信过程,甚至是在不能提 供稳定带宽情况下的实时通信,主要功能点包括:

  • 丢包补偿(packet loss concealment)
  • 回音消除(echo cancellation)
  • 自适应带宽(bandwidth adaptivity)
  • 视频抖动缓冲器(dynamic jitter buffering)
  • 自动增益控制(automatic gain control)
  • 噪声降低和抑制(noise reduction and suppression)
  • 图像清理(image 'cleaning')(!暂且这么翻译吧)
 
#RTCDataChannel

RTCDataChannel提供了在RTCPeerConnection 之上交换自定义数据的方法,相比于流媒体数据,在PeerConnection上传输自定义数据,不仅是在量上,而且在可靠性、安全性、灵活性方面,远能 够满足需求。这样在开发基于音视频的游戏和应用上,提供了较大的方便。

WEBRTC组件

#Transport/Session

  • 完整的RTP/SRTP协议栈
  • STUN、TURN、ICE过程
  • Session管理机制。

#VoiceEngine

WebRTC极具价值的技术之一,支持722,PCM,ILBC,ISAC等编码,在VoIP上,技术业界领先!

NetEQ算法:自适应抖动控制算法以及语音包丢失隐藏算法。使其能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小。能够有效的处理由于网络抖动和语音包丢失时候对语音质量产生的影响。NetEQ也是WebRTC中一个极具价值的技术,对于提高VoIP质量有明显效果,加以AEC(回声消除)\NR(噪声抑制)\AGC等模块集成使用,效果更好。

#VideoEngine

VP8视频图像编解码器,是WebRTC视频引擎的默认的编解码器,VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。

视频抖动缓冲器,可以降低由于视频抖动和视频信息包丢失带来的不良影响。

图像质量增强模块对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。

WEBRTC基本介绍的更多相关文章

  1. 《Getting Started with WebRTC》第二章 WebRTC技术介绍

    <Getting Started with WebRTC>第二章 WebRTC技术介绍 本章作WebRTC的技术介绍,主要讲下面的概念:   .  怎样建立P2P的通信   .  有效的信 ...

  2. WebRTC概念介绍

    WebRTC WebRTC(Web Real-Time Communication).Real-Time Communication,实时通讯. WebRTC能让web应用和站点之间选择性地分享音视频 ...

  3. webRTC 基础介绍

    WebRTC 全称为:Web Real-Time Communication.它是为了解决 Web 端无法捕获音视频的能力,并且提供了 peer-to-peer(就是浏览器间)的视频交互.实际上,细分 ...

  4. 【转载】WEBRTC基本介绍

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

  5. Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会

    文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...

  6. webrtc教程

    cdsn博客不支持word文件,所以这里显示不完全.可到本人资源中下载word文档: v0.3:http://download.csdn.net/detail/kl222/6961491 v0.1:h ...

  7. iOS下WebRTC音视频通话(三)-音视频通话

    前两篇文章记录了音视频通话的一些概念和一些流程,以及一个局域网内音视频通话的示例. 今天以一个伪真实网络间的音视频通话示例,来分析WebRTC音视频通话的过程. 上一篇因为是在相同路由内,所以不需要穿 ...

  8. iOS下WebRTC音视频通话(一)

    在iOS下做IM功能时,难免都会涉及到音频通话和视频通话.QQ中的QQ电话和视频通话效果就非常好,但是如果你没有非常深厚的技术,也没有那么大的团队,很难做到QQ那么快速和稳定的通话效果. 但是利用We ...

  9. WebRTC 零基础开发者教程(中文版)下载

    WebRTC 简介 WebRTC,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术. WebRTC提 ...

随机推荐

  1. 用android studio创建第一个安卓程序加载html5 页面

    前言 软件版本:android studio v1.0正式版,由于v0.x以来软件变化一直比较大,很多问题搜索的解决方案也都是v0.x版本时代的,故首先声明一下版本. 动机:由于工作中需要对移动端软件 ...

  2. Unity3d 中文菜单

  3. SVM vs. Softmax

    http://cs231n.github.io/linear-classify/

  4. bilingual evaluation understudy

    BLEU is designed to approximate human judgement at a corpus level, and performs badly if used to eva ...

  5. MyBatis -- 一步步教你使用MyBatis

    1.建立开发环境 1.1  创建项目,java项目或者javaweb项目均可,如图: 1.2  加入所须要的jar包到项目lib文件夹下 一个MyBatis-3.2.4.jar包 一个驱动包mysql ...

  6. HTTP 304 详解

    把Last-Modified 和ETags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存.因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面 ...

  7. php生成随机密码的自定义函数

    php生成随机密码的自定义函数 生成一个随机密码的函数,生成的密码为小写字母与数字的随机字符串,长度可自定义. 复制代码代码如下: <?php /*  * php自动生成新密码自定义函数(带实例 ...

  8. 每天一个Linux命令(14)head命令

    head命令用于显示文件的开头的内容.在默认情况下,head命令显示文件的头10行内容.    如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头. 如果不指定文件,或者文件为"- ...

  9. 【leetcode刷题笔记】Maximal Rectangle

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...

  10. zookeeper学习与实战(二)集群部署

    上一篇介绍了单机版zookeeper安装,这种情况一般用于开发测试.如果是生产环境建议用分布式集群部署,防止单点故障,增加zookeeper服务的高可用. [环境介绍]       三台机器:192. ...