【转】Web实现音频、视频通信
Google开源实时通信项目WebRTC
Google正式开源了WebRTC实时通信项目,希望浏览器厂商能够将该技术内建在浏览器中,从而使Web应用开发人员能够通过HTML标签和JavaScript API就实现Web音频、视频通信功能。
WebRTC(Web Real Time Communication)并不是Google原来自己的技术。在2010年,Google以大约6820万美元收购了VoIP软件开发商Global IP Solutions公司,并因此获得了该公司拥有的WebRTC技术。如今,互联网的音频、视频通信服务技术一般都是私有技术,如Skype, 需要通过安装插件或者桌面客户端来实现通信功能。Google希望Web开发人员能够直接在浏览器中创建视频或语音聊天应用,Global IP Solutions公司之前已经针对Android、Windows Mobile、iPhone制作了基于WebRTC的移动客户端。Google此次将WebRTC开源出来,就是希望浏览器厂商能够将该技术直接内嵌到浏 览器中,从而方便Web开发人员。
WebRTC的博客说明了WebRTC的优势和发展方向:
直到现在,实时通信仍然需要私有的信号处理技术,大部分都是通过插件和客户端来安装使用。我们通过WebRTC开源了收购GIPS后获得的音频、视频引擎技术,让开发人员能够了解信号处理技术,并使用了BSD风格的授权。这会支持开发人员通过简单的HTML和JavaScript API创建音频和视频聊天应用。
我们正在与其他浏览器开发厂商Mozilla和Opera等紧密合作,尽快在浏览器中实现这项技术以便于Web社区使用。此外,我们还积极地参与IETF和W3C工作组的活动,定义和实现一套实时通信标准。
其官网上列表了使用WebRTC技术的四个理由:
- 互联网成功的一个关键因素是一些核心技术如HTML、HTTP和TCP/IP是开放和免费实现的。目前,在浏览器通信领域还没有免费、高质量、完整的解决方案。WebRTC就是这样的技术。
- 该技术已经集成了最佳的音频、视频引擎,并被部署到数以百万级的终端中,经过超过8年的磨练。Google不会从该技术中收取费用。
- 包含了使用STUN、ICE、TURN、RTP-over-TCP的关键NAT和防火墙穿越技术,并支持代理。
- 构建在浏览器中,WebRTC通过提供直接映射到PeerConnection的信号状态机来抽象信号处理。Web开发人员因此可以选择适合应用场景的协议(例如:SIP、XMPP/Jingle等等)。
WebRTC的架构图如下所示:
图 1 WebRTC架构图(图片来源:WebRTC官方网站)
关于架构图的组成部分,包括:
Web API——第三方开发人员用来开发基于Web的应用,如视频聊天。
WebRTC Native C++ API——浏览器厂商用于实现Web API的函数集。
Session Management——抽象session层,支持调用构建和管理层,由应用开发者来决定如何实现协议。
VoiceEngine——音频媒体链的框架,从声卡到网络。
iSAC——一种用于VoIP和流音频的宽带和超宽带音频编解码器,iSAC采用16 kHz或32 kHz的采样频率和12—52 kbps的可变比特率。
iLBC——用于VoIP和流音频的窄带语音编解码器,使用8 kHZ的采样频率,20毫秒帧比特率为15.2 kbps,30毫米帧的比特率为13.33 kbps,标准由IETF RFC 3951和3952定义。
NetEQ for Voice——动态抖动缓存和错误隐藏算法,用于缓解网络抖动和丢包引起的负面影响。在保持高音频质量的同时尽可能降低延迟。
VideoEngine——视频媒体链的框架,从相机像头到网络,从网络到屏幕。
VP8——来自于WebM项目的视频编解码器,非常适合RTC,因为它是为低延迟而设计开发的。
Image enhancements——消除通过摄像头获取的图片的视频噪声等。
其他更详细的架构分析可以查看这里的文档。
PeerConnection位于WebRTC Native C++ API的最上层,它的代码实现来源于libjingle(一款p2p开发工具包),目前被应用于WebRTC中。其中关键的两个类定义是:
class PeerConnectionObserver {
public:
virtual void OnError();
virtual void OnSignalingMessage(const std::string& msg);
virtual void OnAddStream(const std::string& stream_id,
int channel_id,
bool video);
virtual void OnRemoveStream(const std::string& stream_id,
int channel_id,
bool video);
};
该类定义了一个抽象的观察者。开发人员应该继承实现自己的观察者类。
class PeerConnection {
public:
explicit PeerConnection(const std::string& config);
bool Initialize();
void RegisterObserver(PeerConnectionObserver* observer);
bool SignalingMessage(const std::string& msg);
bool AddStream(const std::string& stream_id, bool video);
bool RemoveStream(const std::string& stream_id);
bool Connect();
void Close();
bool SetAudioDevice(const std::string& wave_in_device,
const std::string& wave_out_device);
bool SetLocalVideoRenderer(cricket::VideoRenderer* renderer);
bool SetVideoRenderer(const std::string& stream_id,
cricket::VideoRenderer* renderer);
bool SetVideoCapture(const std::string& cam_device);
};
具体的函数说明可以查看相应的API介绍。
正如Google所说的,它一直在参与制定和实现HTML 5标准中的视频会议和p2p通信部分,虽然还不是正式标准,但是我们可以从草案的示例中看到未来Web开发人员的使用情况:
// the first argument describes the STUN/TURN server configuration
var local = new PeerConnection('TURNS example.net', sendSignalingChannel);
local.signalingChannel(...); // if we have a message from the other side, pass it along here
// (aLocalStream is some GeneratedStream object)
local.addStream(aLocalStream); // start sending video
function sendSignalingChannel(message) {
... // send message to the other side via the signaling channel
}
function receiveSignalingChannel (message) {
// call this whenever we get a message on the signaling channel
local.signalingChannel(message);
}
local.onaddstream = function (event) {
// (videoElement is some <video> element)
videoElement.src = URL.getObjectURL(event.stream);
};
目前有关Web实时通信的技术标准正在制定当中,W3C的Web Real-Time Communication工作组今年五月份刚刚正式成立,并计划在今年第三季度发布第一个公开草案,从其工作组的路线图中可以看出,正式的推荐标准预计将在2013年第一季度发布,有关W3C标准是否会对WebRTC项目的发展有所影响,未来还要看草案的具体细节。
Google希望开源的WebRTC技术能够获得越来越多的浏览器厂商支持,WebRTC的网站已经宣布将在Chrome、Firefox和Opera上实现相应的API接口。Opera首席技术官Håkon Wium Lie对媒体表示,Google能够把价值不菲的代码贡献出来非常了不起,Opera一直希望能够在浏览器中实现实时通信技术。
提到实时通信技术,不得不让人想起行业巨头Skype。巧合的是,就在前不久,微软刚刚斥资85亿美元现金收购网络电话服务商Skype,当时有许多分析师指出,微软的收购将直面Google的竞争:
…...收购也挫败了竞争对手Google利用Skype技术完善通话服务的计划。
MSN即时通讯、必应(bing)搜索、网络广告等成了微软在互联网领域迎战谷歌的三大阵地。然而,相对于谷歌在互联网行业的呼风唤雨,微软的互联网战略一直没有真正展现出让业界看到其能够挑战谷歌的核心优势。
谷歌和苹果都已经在网络电话上投入了数年时间。苹果一直在力推iChat和FaceTime,谷歌也在普及其网络通信相关产品Chat和Voice。不过,谷歌和苹果都有一个共同的问题,他们很难在竞争对手的平台上生存。苹果用户无法和谷歌以及微软的用户进行视频聊天,谷歌在跨 平台方面做了很多努力,但是仍有不少障碍。
不过Skype则没有这一问题,作为免费服务的Skype可以运行在苹果、Linux以及Windows电脑上,也支持Android和iPhone等手机平台,甚至可以在电视机上运行。
收购Skype,微软不仅仅是为了从中受益,微软还希望借此使Skype远离谷歌的“魔爪”。如果谷歌收购了Skype,这对微软来说无疑是一个沉重的打击。想想吧,如果谷歌收购了Skype,并将Skype整合进Google Apps、Gmail、Google Talk和Google Voice等谷歌产品之中,再想想如果谷歌将Skype与Android平台进行一些深度整合,这对微软来说,无疑是一场灾难。即便微软并未很好的将Skype整合进自家产品之中,但这也避免了谷歌通过收购Skype来获得巨大的价值。
就在微软收购Skype不久,Google就宣布对WebRTC开源,这不免让人有所联想。有国外媒体评论说,Google此次开源是想让广大用户远离该行业的领导者如Skype和Apple的FaceTime平台。通过浏览器来支持实时通信技术,Google希望开发社区能够在自己的应用中集成该功能,从而削弱其他对手。
这已经不是Google第一次大方地开源关键项目。去年,Google曾经将VP8视频编解码项目开源,以支持HTML 5技术中的视频媒体播放。如今,多种主流浏览器都已经支持VP8格式,成为主要的多媒体格式,相比伴随着专利、付费纠纷的H.264,开放、免费的VP8更让浏览器厂商放心。
转载于:https://www.cnblogs.com/zhaozhan/archive/2012/03/31/WebRTC.html
【转】Web实现音频、视频通信相关推荐
- Web端阿里云音视频通信推流、拉流demo
请先阅读官网文档阿里云音视频通信 前提:一些前期的准备工作需要后端人员去操作.下面我只要介绍Web端推流和拉流的实现方式 一.推流 首先请从官网下载最新sdk,添加到同层目录如下图 <!DOCT ...
- 跨平台视频通信项目-OpenTok
1 理论知识 1.1 OpenTok平台简介 即时视频通信日益成为主流服务,通过WebRTC,开发者可以轻松地将即时视频通信功能加入到应用中.视频聊天创业公司TokBox推出OpenTok,可实现浏览 ...
- 视频通信关键技术探索及实践
导读:2021年10月21日,「QCon 全球软件开发大会」在上海举办,网易智企技术 VP 陈功作为出品人发起了「AI 时代下的融合通信技术」专场,邀请到多位技术专家与大家一起分享相关技术话题. 我们 ...
- 进入全真互联网——音视频通信的技术变革
导 语 随着5G和下一代编解码.传输等技术持续演进,音视频通话技术从低延时到超低延时实时通信快速迭代,越来越多应用与服务迁移至线上,越来越真实无损地还原线下体验,新的互动方式和场景不断涌现,从高度数字 ...
- 译:WebRTC视频通信浅析
译:WebRTC视频通信 http://blog.csdn.net/csdnhaoren13/article/details/50999168 原文:http://www.html5rocks.com ...
- 译:WebRTC视频通信
原文:http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/ WebRTC可以进行p2p之间的通信,但是仍需要服务支持. 1. si ...
- 视频教程-Android WebRTC 实现1V1实时音视频通信-Android
Android WebRTC 实现1V1实时音视频通信 从2012年开始从事移动互联网方面的开发工作,曾担任去哪儿网开发工程师,搜狗高级开发工程师,拥有多年一线实战开发经验. 擅长语言:Object- ...
- 视频通信为何能够在疫情之下脱颖而出?
@[TO(本篇文章翻译自Enghouse首席科学家Alex Eleftheriadis,将以他的口吻叙述.) 正文 前言:本篇文章仅表达我的个人观点,不代表我所关联的任何公司的立场. 几天前,我的好朋 ...
- 各种音频视频编码方法
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
最新文章
- 算法------验证回文串
- c语言链表把多少分以上打出来,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
- Memory Dog for Autodesk Maya
- python绘图函数m_Python散点图。m的尺寸和样式
- php 自动验证类,Thinkphp实现自动验证和自动完成
- 修改docker-仓库资源地址Error response from daemon: Get https://index.docker.io/v1/search
- 使用echarts(二)自定义图表折线图
- 调整样式_“寒来暑往”美国海军陆战队应季节调整迷彩样式的规定变化
- 如何计算环形复杂度_数据结构与算法复杂度
- Bailian4104 单词翻转(POJ NOI0107-27)【堆栈+字符流】
- 斯威夫特山地车_斯威夫特弦乐
- 软件开发过程与需求获取
- WeUI实例(官方)
- 【全】常见的空气净化技术,你知道几种类型?
- Xilinx公司的Vivado 2022.2版本在Windows和Linux系统上的下载配置教程
- recv/send堵塞和非堵塞
- supermap三维地下管线
- 申宝在线炒股北交所新股表现抢眼
- 能力态度必不可少,能力大于态度
- Java、Python、大数据、人工智能、软件测试等学科零基础到项目实战教程免费分享!
热门文章
- tomcat配置https_「Java」 - Tomcat amp; 配置HTTPS
- libjpeg学习3:turbojpeg试用
- 虚拟机启动后链接超时
- cart算法_机器学习十大算法之一——决策树CART算法
- 【Elasticsearch】 es include_type_name unless the include_type_name parameter is set to true
- 【Elasticsearch】Elasticsearch 索引策略
- 【Flink】Flink No JAAS configuration section named Client ERROR:Authentication failed
- 20-10-026-安装-KyLin-2.6.0-单机版安装(MAC官网下载)-spark引擎
- 79-Spark Standalone架构设计要点分析
- 【Antlr】Antlr生成调用图