WebRTC API
Node.js v10.15.3 文档
廖雪峰 - nodejs
Webrtc 笔记 - 获取源码
WebRTC 音频引擎实现分析
实时通信 RTC 技术栈之:视频编解码
开源实时音视频技术 WebRTC 中 RTP/RTCP 数据传输协议的应用
WebRTC 项目源码在国内的镜像
WebRTC API
Node.js v10.15.3 文档
廖雪峰 - nodejs
Webrtc 笔记 - 获取源码
WebRTC 音频引擎实现分析
实时通信 RTC 技术栈之:视频编解码
开源实时音视频技术 WebRTC 中 RTP/RTCP 数据传输协议的应用
WebRTC 项目源码在国内的镜像
WebRTC 端对端连接:
RTCPeerConnection:
基本格式
1
|
pc = new RTCPeerConnection([configuration]);
|
RTCPeerConnection 方法分类:
本文主要为初步接触WebRTC的开发者介绍WebRTC turnserver的原理机制,以及Agora在此方面的部分经验。如遇到疑问,可以点击这里,与作者直接交流。
众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转。比如现在有两个客户端,甲和乙,他们俩想要通信,首先需要甲和服务器、乙和服务器之间建立信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲的消息进行中转,发送到乙处,反过来也是一样。这样甲与乙之间的一次消息要通过两段信道,通信的效率同时受制于这两段信道的带宽。同时这样的信道并不适合数据流的传输,如何建立浏览器之间的点对点传输,一直困扰着开发者。WebRTC应运而生。
WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输,支持网页浏览器进行实时语音对话或视频对话。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。它是谷歌2010年5月以6820万美元收购拥有编解码、回声消除等技术的Global IP Solutions公司而获得的一项技术。该项目是由GIPS项目和libjingle项目融合而成。其中GIPS部分主要提供媒体的处理的功能。libjingle项目部分主要提供P2P传输部分的功能。2011年5月开放了工程的源代码,与相关机构 IETF 和 W3C 制定行业标准,组成了现有的 WebRTC 项目,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。
WebRTC是一个开源项目,旨在使得浏览器能为实时通信(RTC)提供简单的JavaScript接口。说的简单明了一点就是让浏览器提供JS的即时通信接口。这个接口所创立的信道并不是像WebSocket一样,打通一个浏览器与WebSocket服务器之间的通信,而是通过一系列的信令,建立一个浏览器与浏览器之间(peer-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。并且WebRTC通过实现MediaStream,通过浏览器调用设备的摄像头、话筒,使得浏览器之间可以传递音频和视频。
WebRTC并不是单一的协议, 包含了媒体、加密、传输层等在内的多个协议标准以及一套基于 JavaScript 的 API。通过简单易用的 JavaScript API ,在不安装任何插件的情况下,让浏览器拥有了 P2P音视频和数据分享的能力。同时WebRTC 并不是一个孤立的协议,它拥有灵活的信令,可以便捷的对接现有的SIP 和电话网络的系统。
关键要认识到的是,点对点并不意味着不涉及服务器,这只是意味着正常的数据没有经过它们。至少,两台客户机仍然需要一台服务器来交换一些基本信息(我在网络上的哪些位置,我支持哪些编解码器),以便他们可以建立对等的连接。用于建立对等连接的信息被称为信令,而服务器被称为信令服务器。
WebRTC没有规定您使用什么信令服务器或什么协议。 Websockets是最常见的,但也可以使用长轮询甚至邮件协议。
为了让初学者快速起步把 WebRTC demo 跑起来,我写了一个极其简单的 startup demo 项目,展示了如何基于 WebRTC API 实现一对一的视频通话。该项目地址:https://github.com/Jhuster/RTCStartupDemo
本文则主要介绍如何从一对一通话升级到多人通话,即视频会议,其中涉及到如下几个问题:
多人会议,每个 Client 是创建多个 PeerConnection 还是只有一个 PeerConnection ?
多人会议,谁来发起 OFFER,谁来作为 ANSWER,如何把多个 Client 相互间的连接分别建立起来 ?
首先,我们用下面这一张图来看看两个 WebRTC Peer 之间是如何建立一对一通话链路的:
最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧。
音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整一个专题详细讲一讲~~目前的话,我先给出一个大的方向性的学习指南,希望对初学者有所帮助。
我一直相信带着 “任务” 去学习和实践,效率会高很多,因此我列出了一系列音视频相关的 “开发任务”,从简单到困难(当然,不一定非常严格和完美,部分任务先后可调整),大家在完成任务的过程中,遇到任何不懂的地方都要及时去 google,或者去请教身边的大牛,不放过任何一个疑点,相信大家会很快就能把音视频周边相关知识积累起来。
这是由一篇我的演讲稿整理出来的文章,目标读者是对音视频开发感兴趣但是又不知道如何下手的初学者们,希望把我的经验分享出来,对大家有所帮助。
经常收到一些网友的来信或者留言,反馈如下这样的困惑:
“我是一名应届毕业生,该如何快速地成长起来”
“我只懂 C/C++,是学 Android 开发有前途,还是 iOS 开发有前途?”
“我是一名 Android/iOS 开发,已经可以独立完成一个完整的 App 开发上线,该如何继续提升?”
“我想从事音视频开发,该如何入门? 如何进阶 ?”
很高兴看到大家有这样的问题,因为这也从侧面反映了你是一个积极向上,想不断努力来提升自己的人。
我就先从一个简单的问题聊起,“到底 Android 开发有前途还是 iOS 开发有前途?”
如今越来越多的公司投身到 WebRTC 的开发和应用之中,同时也有越来越多的开发者对 WebRTC 技术感兴趣。相对于单向传输的直播和播放器,支持“实时+双向” 音视频通话的 WebRTC 项目显然要庞大和复杂很多很多。由于 WebRTC 官方没有提供服务器的实现,自己从 0 搭建一套开源的 WebRTC 服务器、跑通并且读懂官方的 AppRTCDemo 代码还是需要很费一些周折的。
基于这些原因,我启动了一个小的开源项目:RTCStartupDemo,致力于提供一套超级简单的信令服务器,以及配套的完全基于 WebRTC 官方 API 的客户端 demo 示例代码(含:Web/Android/iOS/Windows 全平台),目标是让所有有兴趣学习 WebRTC 的同学,都能快速把项目 run 起来,看到通话效果,理解核心 API,快速入门。
前面两篇文章分别介绍了如何利用 WebRTC API 实现一对一视频通话和多人视频会议,并给出了相应的 demo 程序,该 demo 是基于官方预编译好的库开发的。如果要想深入学习和研究 WebRTC,仅仅掌握偏上层的 API 接口是远远不够的,而是应该做到能自己编译和修改 WebRTC 源码,这样才能不受限制地根据自己的需要优化和改进产品的质量和效果。
网上有很多介绍 WebRTC 源码编译的文章,我这里也不会赘述太多,只介绍些关键经验。总体来说,有下面几个点先提前说明一下:
1. 最靠谱的编译指南是官方的指导文章:https://webrtc.org/native-code/android/
2. WebRTC Android 的编译只支持在 Linux 环境中进行,推荐安装 Ubuntu 16.04 的物理机或者 VPS,不建议在 Mac/Windows 上使用 Docker 或者虚拟机等方式来编译,容易遇到很多奇怪的问题。当然,我下面也还是会介绍下 Mac 下如何利用虚拟机来编译。
3. WebRTC Android 的源码和配套工具大约 16 GB 左右,国内由于 GFW 的原因,需要配置代理来下载和同步,由此可能带来很多奇奇怪怪的问题。
4. 时间就是金钱,由于配置代理同步代码容易遇到各种坑,比较推荐的方式是在 Linode 或者 Vultr 购买一台位于国外的 VPS 虚拟机,基本上参照 WebRTC 官方文档,半天时间就可以顺利走通整个源码同步和编译流程了。