WEBRTC

“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. Android WebRTC开发入门

    在学习 WebRTC 的过程中,学习的一个基本步骤是先通过 JS 学习 WebRTC的整体流程,在熟悉了整体流程之后,再学习其它端如何使用 WebRTC 进行互联互通. 申请权限 Camera 权限 ...

  2. openresty 前端开发入门五之Mysql篇

    openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...

  3. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  4. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  5. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  6. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  7. VR原理讲解及开发入门

    本文是作者obuil根据多年心得专门为想要入门的VR开发者所写,由52VR网站提供支持.   1. VR沉浸感和交互作用产生的原理:   在之前,我们观看一个虚拟的创造内容是通过平面显示器的,52VR ...

  8. Eclipse_luna_J2EE_For_JS+tomcat8.0环境搭建、配置、开发入门

    一.所有需要的软件.插件等下载地址 J2SE的官方下载路径:http://www.oracle.com/technetwork/java/javase/downloads/index.html Ecl ...

  9. OWIN的理解和实践(三) –Middleware开发入门

    上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介绍下Middleware的开发 ...

随机推荐

  1. LeetCode OJ--Merge Two Sorted Lists

    http://oj.leetcode.com/problems/merge-two-sorted-lists/ 有序链表的归并排序 #include <iostream> using na ...

  2. Cryptography I 学习笔记 --- 流密码

    1. 对于一次性密码本(one time pad),没有唯密文攻击(cypher text only attack),也就是说如果攻击者只能拿到密文,他什么也做不了 2. 完美密码:密钥长度大于密文长 ...

  3. Python内置函数和匿名函数

    内容回顾: 1.列表推导式 [变量(加工后的变量) for 变量 in iterable] 循环模式 [变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式 生成器表达式 ...

  4. HDU 5790 Prefix(Hash + 主席树)

    题目链接  Prefix 题意  给定一个字符串序列,求第$l$个字符串到第$r$个字符串之间有多少个不同的前缀 强制在线 考虑$Hash$ 首先把所有前缀都$hash$出来,按顺序组成一个长度不超过 ...

  5. DNS重绑定DNS Rebinding攻击

    DNS重绑定DNS Rebinding攻击 在网页浏览过程中,用户在地址栏中输入包含域名的网址.浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户.而对于域名所有 ...

  6. jenkins的Pipeline代码流水线管理

    1.新建一个pipline任务 2.自写一个简单的pipline脚本 a.Pipeline的脚本语法在Pipeline Syntax中,片段生成器,示例步骤中选择builf:Build a job b ...

  7. Django-自己写的py文件调用models&Non-ASCII character报错&url接收参数

    1.这个设置是网上能查到的最多的,但是没解决我的问题: Django的models.py在外部独立使用,新建一个文件夹,和monitor1目录平级 import sys,os sys.path.app ...

  8. upper_bound——自己的实现

    int BSearch() { int ln(1),rn(n+1); while(ln+1<rn) { int mid=(ln+rn)>>1; if (Check(mid)) { l ...

  9. mysql function

    mysql 自定义函数的使用 先查看函数功能是否开启:show variables like '%func%'; 若是未开启则:SET GLOBAL log_bin_trust_function_cr ...

  10. Java中HashMap的初始容量设置

    根据阿里巴巴Java开发手册上建议HashMap初始化时设置已知的大小,如果不超过16个,那么设置成默认大小16: 集合初始化时, 指定集合初始值大小. 说明: HashMap使用HashMap(in ...