WebRTC从入门到精通
文章平均质量分 83
WebRTC名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
china_jeffery
持续学习者;
擅长开发开源组件及相关工具;
长期致力于应用各种IT新技术提升生产效率和解决实际问题;
展开
-
WebRTC -- 自定义AudioDeviceModule时线程检查失败
《WebRTC – 添加选择音频输入输出设备功能》一文介绍了Webrtc默认使用计算机上的默认的音频输入输出设备,并且介绍了如何为webrtc指定音频的输入输出设备。读者根据上文介绍的方法实践的时候,Debug版运行时很可能会遇到thread check failed的提示。WebRTC内部有三个主要线程(network_thread,worker_thread,signaling_thread...原创 2020-01-15 11:20:58 · 1690 阅读 · 4 评论 -
WebRTC -- Janus编译部署及配置
Janus是一个开源的WebRTC SFU服务器,可以作为WebRTC的一个端将其收到的数据进行转发,同时提供一些的控制能力,Janus是基于插件架构的,其功能都是通过一个个插件来提供。一、编译部署Janus可以方便的在Linux和MacOS上面编译部署,暂时不支持Windows系统,但可以在Win10的Windows Subsystem for Linux上编译部署。1.1 安装依赖项在...原创 2019-11-12 20:02:14 · 1832 阅读 · 0 评论 -
WebRTC -- 音视频流传输带宽控制
WebRTC没有提供这方面的接口,我们可以通过修改sdp信息来实现音视频流的传输带宽控制,sdp格式参考之前的文章:《WebRTC – SDP格式解析》实现原理比较简单,就是分别在sdp的audio和video媒体部分加入b=AS:信息,可以参考下面的代码实现:void updateSdpAudioVideoMaxKbps(QString &sdp, int audioMaxKbps,...原创 2019-11-12 12:01:28 · 965 阅读 · 0 评论 -
WebRTC -- 添加选择视频输入设备功能
《WebRTC – 添加选择音频输入输出设备功能》介绍了如何添加音频输入输出设备选择功能,本文介绍如何添加选择视频输入设备的功能。添加视频输入设备的选择功能不需要像音频设备那样修改webrtc源码,只需要创建自定义webrtc::VideoCaptureModule即可。int videoDeviceIndex = 0; // 视频输入设备idstd::unique_ptr<webr...原创 2019-11-12 11:48:24 · 965 阅读 · 0 评论 -
WebRTC -- 添加选择音频输入输出设备功能
我们先来看看WebRTC中提供音频设备输入输出功能的类结构:从上图中我们看到:AudioDeviceModule接口类是音频设备模型的基类,该接口类及其子类并不提供任何针对音频的实际操作,实际操作都是由AudioDeviceGeneric接口类的子类来提供。AudioDeviceGeneric接口类是音频设备实际操作(如录音、播放、声音控制等)的基类,然后根据平台不同由不同的类来实...原创 2019-11-12 11:30:44 · 2831 阅读 · 6 评论 -
WebRTC -- 在直播领域应用的可行性分析
一、目前流行的直播技术架构目前主流的直播方案一般采用RTMP架构,首先客户端采集音视频流(如obs studio客户端),然后通过RTMP协议将流推到流媒体服务器,最后流媒体服务器将流处理后分发给各个直播客户端。优点:良好的CDN支持,目前主流的CDN 厂商都有比较成熟的解决方案,另外也有可用的商用SDK方便集成,例如声网等,只要集成对应平台的SDK即可。由于有CDN的支持,相较于端对...原创 2019-11-05 23:29:06 · 1073 阅读 · 0 评论 -
WebRTC -- 解决VP8编码崩溃的问题
问题描述:在Release模式下,WebRTC的VP8编码模块崩溃。解决方案:由于我使用的MSVC编译器编译的(即clang=false参数),MSVC编译器默认对variance_final_from_16bit_sum_avx2函数中的汇编代码进行优化导致的bug,只需要禁用对该函数优化即可:#ifdef _MSC_VER#pragma optimize("", off)#endi...原创 2019-10-30 15:55:14 · 1125 阅读 · 0 评论 -
WebRTC -- 端到端连接过程分析
STUN Server可以使用coturn开源实现,它同时实现了STUN和TURN服务器。Signal Server需要自己实现,可以基于WebSocket等协议,要注意的是:信令服务器需要主动通知Client A/B,所以需要维持一个长连接。...原创 2019-10-29 09:22:12 · 827 阅读 · 0 评论 -
WebRTC -- TURN服务器搭建
本文讲解如何在Ubuntu系统上采用coturn搭建p2p打洞服务器,coturn是一个开源的stun和turn服务器实现。安装依赖项sudo apt-get install opensslsudo apt-get install libsslsudo apt-get install libevent-dev下载coturn源码编译安装git clone https://github...原创 2019-10-28 17:50:51 · 806 阅读 · 0 评论 -
WebRTC -- Mesh、MCU、SFU架构
WebRTC是基于P2P的实时通信技术,(如果P2P打洞失败,则会使用TURN服务器进行数据转发),在有2台客户端参与的情况下,网络拓扑结构如图:一、Mesh架构在只有2个客户端参与情况下,我们可以使用上图的这种拓扑结构。但假如同时有3个客户端参与(如多人视频会议),如果还是按照上面的方式,拓扑结构就会变成:从上图中,我们可以看到,在3人参与的实时通信中,每个客户端要维持4个连接(2个上...原创 2019-10-28 16:44:51 · 4065 阅读 · 0 评论 -
WebRTC -- H264视频编码I、B、P帧
一、概述H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的...原创 2019-10-24 15:33:07 · 1518 阅读 · 0 评论 -
WebRTC -- 流媒体基础概念
流媒体协议 名称 推出机构 传输协议 客户端 RTSP+RTP IETF TCP+UDP VLC, WMP RTMP Adobe Inc. TCP Flash RTMFP Adobe Inc. UDP Flash MMS Microsoft Inc. TCP/UDP WMP HTTP...原创 2019-10-24 11:08:32 · 93003 阅读 · 0 评论 -
WebRTC -- WAVE编码
一. WAVE简介WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或其他压缩数据,属于无损音乐格式的一...原创 2018-04-28 15:50:27 · 20092 阅读 · 0 评论 -
WebRTC -- 在VS工程中使用WebRTC
写作本文时使用的webrtc版本为:branch heads/67虽然使用gn gen --ide=vs out/Debug这样的命令可以生成vs解决方案,但是其内部仍然是使用ninja来编译生成的。如果我们在开发中需要使用msvc来编译生成项目,需要包含哪些目录、引用哪些文件了?一. 预定义宏_CRT_NONSTDC_NO_DEPRECATEV8_DEPRECATI...原创 2018-04-24 10:54:03 · 22473 阅读 · 2 评论 -
WebRTC -- 认识WebRTC
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。它...原创 2018-04-19 11:13:55 · 33628 阅读 · 0 评论 -
WebRTC -- SDP格式解析
如果将WebRTC SDP从语义上分解成不同组件来描述一个多媒体会话信息,那么WebRTC SDP由如下几部分组成: +---------------------+ | v= ...原创 2018-04-18 16:00:03 · 37289 阅读 · 0 评论 -
WebRTC -- P2P及NAT穿越技术介绍
一、 P2P(peer to peer)P2P是一个“点对点传输技术”,也就是2台计算机之间不需要第三台机器作为服务端就能实现数据的传输。每台计算机即是客户端又是服务端。如果每台计算机都有自己的独立的公网IP,那么P2P技术就比较好实现了,但是现实中由于NAT的存在,使得P2P技术最大的难点就在于穿越NAT的限制,俗称“打洞”。二、 NAT(Network Address Transl...原创 2017-11-15 17:26:31 · 86254 阅读 · 0 评论 -
WebRTC--添加IOCP网络模型支持
一、起因webRTC在windows平台默认使用的是WSAAsyncSelect模型,该模型需要有一个windows窗口的支持,而且伸缩性、性能都比较低。 关于WSAAsyncSelect模型的介绍可以参考Windows套接字I/O模型(3) – WSAAsyncSelect模型因为webRTC是点对点的数据传输,对每一个端的性能要求并不高,采用WSAAsyncSelect模型完全是足够的。但原创 2017-12-25 15:10:43 · 94620 阅读 · 0 评论 -
WebRTC--rtc_base库移植
rtc_base是webrtc的基础库,也是一个不可多得的跨平台的基础库,它提供了线程、网络、指针等多个方面的支持。 我们可以将它单独提取出来加以改造,然后使用。 rtc_base库位于src\rtc_base文件夹中。 我们将其移到单独的visual studio工程中,并使用cl.exe编译为静态库。 虽然使用gn gen --ide=vs out/Debug命令生成的visual原创 2017-12-24 21:42:26 · 94549 阅读 · 0 评论 -
WebRTC -- Windows平台编译
写作本文时使用的webrtc版本为:branch heads/67一、 准备工作1.0 科学上网工具如果你不知道什么是“科学上网”或者没有“科学上网”的工具,那么请止步吧。 因为源码都是在命令行中下载,为了防止全局代理对命令行无效,可以设置如下环境变量:netsh winhttp set proxy 127.0.0.1:1080 # 还原命令为:netsh...原创 2019-06-20 10:01:46 · 86132 阅读 · 1 评论 -
WebRTC-线程模型(1)
在介绍WebRTC的线程模型之前,先介绍webrtc线程模型中用到的几个简单、常用的模块或函数。webrtc是一个代码宝库,且它本身跨平台(windows,linux,ios,android),不管是哪个平台上面开发,都可以从中学习到很多有用的东西。一、 设置线程名platform_thread.ccvoid SetCurrentThreadName(const char* name) {#if原创 2017-11-23 14:10:38 · 86408 阅读 · 0 评论 -
WebRTC-线程模型(2)
一、基本原理WebRTC的线程功能由Thread类提供。Thread继承于消息队列MessageQueue,这样WebRTC中的每个线程都有了自己的消息循环,外部可以向该线程的消息循环Post消息Message,然后该线程轮询从消息循环Get到消息后处理消息。UML如下: 二、Message和MessageQueueMessage是单个消息的定义: * posted_from 标记改条消息发送原创 2017-12-01 13:59:48 · 88968 阅读 · 4 评论 -
WebRTC-命令行参数解析
一、 功能介绍webrtc中命令行参数解析功能由rtc_base/flags.h中的Flag类和FlagList类提供。使用起来比较简单,支持参数中含有空格等。可以看成google开源的gflags的轻量版. 支持的命令行语法为:The following syntax for flags is accepted (both '-' and '--' are ok): --fla原创 2017-11-28 11:44:05 · 87458 阅读 · 0 评论 -
WebRTC -- IP地址
§ Unresolved IPUnresolved IP直译为“未能解答的IP”,也就是不能识别的IP。必须既不是IPv4地址也不是IPv6地址,才叫Unresolved IP。 IPv4地址格式:xxx.xxx.xxx.xxx (0 <= xxx <= 255) IPv6地址格式:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (xxxx代表4位十六进制数字)具原创 2017-11-29 16:26:46 · 88588 阅读 · 0 评论 -
WebRTC -- 官方apprtc示例搭建
系统环境Ubuntu 16.04 在搭建之前建议关闭系统防火墙,参考:Ubuntu使用Ufw管理防火墙一. 房间服务器搭建1.1 安装依赖程序apt-get install git unzip lrzsz nodejs npm automake autoconf libtool nodejs-legacy python-webtest golang –...原创 2018-04-26 12:41:05 · 4920 阅读 · 0 评论