博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebRTC如何颠覆移动世界
阅读量:6221 次
发布时间:2019-06-21

本文共 8697 字,大约阅读时间需要 28 分钟。

hot3.png

WebRTC是一种新兴的技术,也被称为RTCWEB是一项在浏览器内部进行实时和音频通信的技术。WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,支持跨平台:Windows,Linux,MAC,Android。

WebRTC堪称近年来最大的一次技术革新,加入了很多交互特性,为网络带了很多革命性的新“天赋”,而这些“天赋”使网络世界向前迈一大步。

  当开发者希望使用音频或者视频通话时,可以直接使用已有的代码,唯一需要做的只需在移动设备上创建一个独立的程序。该标准提出后,许多传统的VoIP服务供应商将逐渐衰落和死亡。传统的固定销售(电话销售)以及传统的语音设备将被淘汰,电话网络的形式已一去不复还了。这对于移动运营商来说将面临一种新的挑战。

 WebRTC的开放标准使浏览器间直通很容易在互联网架构中实现。你可以想象不管我们用什么或者在哪里都可以通过音频进行交流,而且它们都是免费的。从苹果到三星,从商务手机到TV,无论你是在家还是在车里亦或者在夏威夷,这些就是WebRTC带给我们的好处。

看两大巨头如何拥抱WebRTC?

  谈及移动领域,谷歌和苹果公司也积极拥抱了这门技术。如果两个巨头同时推动WebRTC,并说服移动运营商参与进来,那么消费者将会非常受益。

  WebRTC给谷歌带来了丰厚的利润,比如Google Hangouts拥有数百万的用户进行群聊,管理终端用户软件部署存在许多复杂性,如果要减少或者消除终端用户软件,WebRTC是一个非常不错的方法。

 

  这对于设备制造商来说有利而无害,由于谷歌在WebRTC方面是主要的推动者且拥有Android系统,可以推测,未来Android设备将会推出免费的音频/视频服务。基于WebRTC开放标准这些设备可以相互间进行操作。这将有助于Google手机以及平板电脑的销售。

 

  苹果对于WebRTC的支持似乎相对要平静些。倘若没有苹果公司的支持,大约一半移动市场是不可访问的。这也就意味着如果开发者依赖WebRTC来开发音频或者视频,在Android和iOS两大平台上建立本地应用,他们也只有一半的用户可以使用此功能。这无疑对WebRTC社区是个重大的打击。

 但话又说回来,苹果可以随时将这项技术投放到iOS系统中。相信不久的将来,苹果会采取此动作。

web RTC  官网

1、WebRTC目的

       
       WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox\...)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现,W3C等组织正在制定Javascript 标准API,目前是WebRTC 1.0版本,Draft状态, ;另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。同时,Google也希望和致力于让WebRTC的技术成为HTML5标准之一,可见Google布局之深远。

2、WebRTC架构图

架构图颜色标识说明:
(1)紫色部分是Web开发者API层;
(2)蓝色实线部分是面向浏览器厂商的API层(也就是红色框标内模块,也是本人专注研究的部分)
(3)蓝色虚线部分浏览器厂商可以自定义实现

3、WebRTC架构组件介绍

(1) Your Web App
Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。
(2) Web API
面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看
(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/;
自适应包大小: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
图像质量增强模块
对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。

4、WebRTC核心模块API

(1)、网络传输模块:libjingle

WebRTC重用了libjingle的一些组件,主要是network和transport组件,关于libjingle的文档资料可以查看 。

(2)、音频、视频图像处理的主要数据结构

常量\VideoEngine\VoiceEngine
注意:以下所有的方法、类、结构体、枚举常量等都在webrtc命名空间里
  

类、结构体、枚举常量

头文件

说明

Structures

common_types.h

Lists the structures common to the VoiceEngine & VideoEngine

Enumerators

common_types.h

List the enumerators common to the  VoiceEngine & VideoEngine

Classes

common_types.h

List the classes common to VoiceEngine & VideoEngine

class VoiceEngine

voe_base.h

How to allocate and release resources for the VoiceEngine using factory methods in the VoiceEngine class. It also lists the APIs which are required to enable file tracing and/or traces as callback messages

class VideoEngine

vie_base.h

How to allocate and release resources for the VideoEngine using factory methods in the VideoEngine class. It also lists the APIs which are required to enable file tracing and/or traces as callback messages

(3)、音频引擎(VoiceEngine)模块 APIs

下表列的是目前在 VoiceEngine中可用的sub APIs
sub-API

头文件

说明

VoEAudioProcessing

voe_audio_processing.h

Adds support for Noise Suppression (NS), Automatic Gain Control (AGC) and Echo Control (EC). Receiving side VAD is also included.

VoEBase

voe_base.h

Enables full duplex VoIP using G.711.

NOTE: This API must always be created.

VoECallReport

voe_call_report.h

Adds support for call reports which contains number of dead-or-alive detections, RTT measurements, and Echo metrics.

VoECodec

voe_codec.h

Adds non-default codecs (e.g. iLBC, iSAC, G.722 etc.), Voice Activity Detection (VAD) support.

VoEDTMF

voe_dtmf.h

Adds telephone event transmission, DTMF tone generation and telephone event detection. (Telephone events include DTMF.)

VoEEncryption

voe_encryption.h

Adds external encryption/decryption support.

VoEErrors

voe_errors.h

Error Codes for the VoiceEngine

VoEExternalMedia

voe_external_media.h

Adds support for external media processing and enables utilization of an external audio resource.

VoEFile

voe_file.h

Adds file playback, file recording and file conversion functions.

VoEHardware

voe_hardware.h

Adds sound device handling, CPU load monitoring and device information functions.

VoENetEqStats

voe_neteq_stats.h

Adds buffer statistics functions.

VoENetwork

voe_network.h

Adds external transport, port and address filtering, Windows QoS support and packet timeout notifications.

VoERTP_RTCP

voe_rtp_rtcp.h

Adds support for RTCP sender reports, SSRC handling, RTP/RTCP statistics, Forward Error Correction (FEC), RTCP APP, RTP capturing and RTP keepalive.

VoEVideoSync

voe_video_sync.h

Adds RTP header modification support, playout-delay tuning and monitoring.

VoEVolumeControl

voe_volume_control.h

Adds speaker volume controls, microphone volume controls, mute support, and additional stereo scaling methods.

(4)、视频引擎(VideoEngine)模块 APIs

下表列的是目前在 VideoEngine中可用的sub APIs

sub-API

头文件

说明

ViEBase

vie_base.h

Basic functionality for creating a VideoEngine instance, channels and VoiceEngine interaction.

NOTE: This API must always be created.

ViECapture

vie_capture.h

Adds support for capture device allocation as well as capture device capabilities.

ViECodec

vie_codec.h

Adds non-default codecs, codec settings and packet loss functionality.

ViEEncryption

vie_encryption.h

Adds external encryption/decryption support.

ViEErrors

vie_errors.h

Error codes for the VideoEngine

ViEExternalCodec

vie_external_codec.h

Adds support for using external codecs.

ViEFile

vie_file.h

Adds support for file recording, file playout, background images and snapshot.

ViEImageProcess

vie_image_process.h

Adds effect filters, deflickering, denoising and color enhancement.

ViENetwork

vie_network.h

Adds send and receive functionality, external transport, port and address filtering, Windows QoS support, packet timeout notification and changes to network settings.

ViERender

vie_render.h

Adds rendering functionality.

ViERTP_RTCP

vie_rtp_rtcp.h

Adds support for RTCP reports, SSRS handling RTP/RTCP statistics, NACK/FEC, keep-alive functionality and key frame request methods.

G

,这对通讯界的意义非常大,不仅是简化了 Web 实时通讯的开发,更重要的是让我们了解了   音视频专利技术的处理细节。
WebRTC 是个很大的项目,其中还包括  (传输)、chrome(上层 web)。由于它是 Google 近期力推的,我相信应该很快会成熟起来,并成为一定范围内(相信有些 Web Browser 会拒绝它的,因为利益)的标准,相当有前景。
 提供的官方文档不是很多,也不够详尽。但是我们还是希望跟寻《 》来尝试编译它,这里的环境是 Windows 7 U 32bit。
首先我们要下载、安装一些工具:
  1. ,用于获得 WebM 等。
  2. ,这是 Google 在 Chromium 中就开始使用的分发工具。直接下载 并解压即可。注意加入系统环境变量 PATH(gclient 所在路径)。
  3. Windows 下我们还要下载、安装 Visual Studio 2005(用 VS2010 也是 OK 的)、 (注意要确认安装 Sample)和 。
之后我们就能去取 WebRTC 的代码了。运行在提示符下运行下面命令即可从服务器下载源码。
gclient config https://webrtc.googlecode.com/svn/trunk
gclient sync --force
其中“sync”命令还能创建开发环境(Linux:make, OSX: XCode, Windows: Visual Studio),如我们这里最关心的是 MS Visual Studio 的解决方案(trunk/webrtc.sln)。我们也可以手工通过下面的命令手工生成开发环境:
gclient runhooks --force
如果需要指定 MS Visual Studio 的版本,请在“gclient”前先如下调用:
set GYP_MSVS_VERSION=2005
set GYP_MSVS_VERSION=2008
源码拿到了,MS Visual Studio 的解决方案也有了,直接用 Visual Studio 打开即可,编译的时候可能会有些小问题,应该都是目录相关的,按照自己的环境重新设定一下即可。如我这里按照下面所指改动有问题的工程即可,工具 - 选项 - 项目和解决方案 - VC++ 目录:
可执行文件:
C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
包含文件:
C:\Program Files\Microsoft SDKs\Windows\v7.1\Include
C:\Program Files\Microsoft DirectX SDK (August 2009)\Include
库文件:
C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib
C:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x86
...
生成文件位于“\trunk\Debug”下,如“peerconnection_server.exe 和 peerconnection_client.exe”,运行效果如下截图:

 

google开源了WebRTC项目,网址是:

WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力。
通过对源码的粗略分析,WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台: windows,,mac,

转载于:https://my.oschina.net/xiahuawuyu/blog/80335

你可能感兴趣的文章
mysql小白练手
查看>>
我的友情链接
查看>>
配置web服务器
查看>>
简单的服务端口检测及报警
查看>>
windows 2008 无法设置IP问题
查看>>
phpstorm的swoole代码提示安装
查看>>
make与makefile
查看>>
我的友情链接
查看>>
敏捷开发思想及Scrum实践
查看>>
几套好用的主题
查看>>
linux下文件删除的原理
查看>>
系统安全
查看>>
多生成树协议MSTP
查看>>
解决奇葩的win7文件不能拖动问题
查看>>
linux网络属性管理总结
查看>>
2015/03/23 磁盘管理
查看>>
2015/03/25 LVM(逻辑卷组管理)
查看>>
好玩的三角型
查看>>
自动化中图像识别
查看>>
mongoDB之用户及权限设置
查看>>