
WebRTC C++ 零基础入门
文章平均质量分 79
分享webrtc native c++开发知识,webrtc c++源码下载编译、源码分析、问题解决,探究webrtc中的c++硬核技术,webrtc c++接口封装,功能实现。
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
令狐掌门
C++程序员,出版过《C++零基础入门视频教程》、《Qt高级进阶视频教程》、《C++ Qt6 QtQuick/QML入门进阶视频教程》、《OBS源码分析与桌面录制视频教程》、《PyQt PySide6零基础入门与项目实战》。
展开
-
c++ webrtc基础(1) :webrtc源码下载与编译、项目模块介绍、学习资料推荐
本篇博客介绍webrtc源码的下载与编译,以及推荐webrtc学习资料。源码下载电脑环境:win10/win11 64bit,合理的上网环境,没有合理的网络环境无法拉取、下载webrtc代码和工具,宽带速度要快,尽量50M. 主要步骤如下:(1) 安装git(2) 打开cmd控制台,下载google开发工具depot_tools:git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git(3) 新建一个目原创 2021-09-19 22:54:18 · 2626 阅读 · 2 评论 -
webrtc新版本无法连接peerconnection_server、无法音视频互通no incoming video...问题解决
在webrtc大概2022之后的版本,会出现无法连接peerconnection_server的现象,如下图:在peerconnection_client界面点击Connect无法连接server.原创 2024-06-14 21:56:58 · 614 阅读 · 0 评论 -
Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017)
在windows上编译webrtc时可能出现如下错误:Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017).在上面也有提示File "C:/webrtc/src/build/vs_toolchain.py", line 174, in GetVisualStudioVersion ' Supported versions are: %s.' ..原创 2021-07-09 22:27:09 · 1685 阅读 · 0 评论 -
webrtc编译错误 KeyError: WINDOWSSDKDIR
windows上编译wrbrtc可能会出现KeyError: 'WINDOWSSDKDIR'这时需要设置windows sdk的路径,例如我的设置set WINDOWSSDKDIR=D:\Windows Kits\10当你在windows上搜索Windows Kits\10时可能会有多个,我也是试了很多次,才找到正确的目录,该目录内容如下不知是否正确,反正我的webrtc用vs2019编译ok了,1144个工程。...原创 2021-07-09 22:48:17 · 1295 阅读 · 0 评论 -
c++ webrtc基础(2) :google c++代码规范
Google 开源项目风格指南 (中文版):https://zh-google-styleguide.readthedocs.io/en/latest/英文版:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml中文版:http://zh-google-styleguide.readthedocs.org/en/latest/google-cpp-styleguide/google c++ 编码规范:http://blog.csd原创 2021-07-22 22:12:26 · 544 阅读 · 0 评论 -
c++ webrtc基础(3) :google c++程序测试框架googletest使用教程
什么是googletest?googletest简介GoogleTest 是 Google 的 C++ 测试和模拟框架,可以帮助程序员测试C++程序的结果预期,GoogleTest 的代码用cmake管理,可以使用cmake进行编译程dll在程序中使用。googletest一般也可以简称为gtest, 最新版本GoogleTest 需要符合 C++11 标准或更新标准的代码库和编译器。 gtest官网:https://google.github.io/googletest/原创 2021-08-19 23:54:28 · 826 阅读 · 0 评论 -
人类最高质量客户端项目chrome源码下载与编译
人类最高质量的客户端项目chrome源码下载与编译对于客户端应用来说,google chrome应该是人类最高质量的客户端项目了,如果是前端开发对chrome应该很熟悉,但是chrome的源码你们看过吗,今天我来教大家怎么获取chrome源码,并用vs2019进行编译,9800多个C++项目,是不是让人窒息,作为C++程序员有没有感觉到巨大挑战。chrome git仓库:https://github.com/chromium/chromiumchrome源码下载(1)环境准备win10-64 ,预留原创 2021-07-31 23:12:54 · 2857 阅读 · 0 评论 -
absl教程(一):代码下载编译环境配置
abseil简介在webrtc项目中,google没有采用C++ STL, 而是自己造了一个新的轮子“abseil”, 位于third_party模块,该库和C++ STL、Boost的功能类似,都是一些容器,算法,时间操作的综合库,不过google说它的性能更好,既然是goole说的,那我们姑且相信,例如下面的代码:for (int i = 0; i < num_devices; ++i) { // 使用abseil库 capturer = absl::WrapUniqu原创 2021-09-20 19:08:00 · 2070 阅读 · 0 评论 -
absl教程(二):absl容器
absl容器介绍Abseil 提供了许多容器作为 STL 容器的替代品,这些容器通常遵循 STL 容器的属性,尽管通常存在一些与标准库不同的 API 和实现细节。在一般情况下,Abseil 容器的设计效率更高;然而,在某些情况下,STL 容器可能更有效。与 Abseil 提供的其他一些抽象不同,这些容器不应被视为其 STL 对应物的直接替代品,因为两组容器之间存在 API 差异。例如,Abseil 容器通常不保证插入或删除后的指针稳定性。Abseilcontainer库定义了以下容器集:B-tre原创 2021-09-20 19:14:25 · 4292 阅读 · 0 评论 -
absl教程(三):The Abseil Flags Library
Abseil 标志库允许以编程方式访问通过命令行传递给二进制文件的标志值。Abseil Flags 库提供以下功能:以线程安全的方式访问 Abseil 标志访问在程序生命周期内任何时候都有效的标志值通过确保同一二进制文件中的唯一性来防止标志名称冲突由许多内置使用标志提供的相关帮助文本对布尔值、整数和字符串类型提供类型支持,并可扩展以支持其他 Abseil 类型和自定义类型默认值和对读写标志值的编程访问允许分布式声明和定义标志,尽管这种用法有缺点,通常应该避免。这些标志的值由命令行解析 a翻译 2021-09-21 15:41:49 · 1071 阅读 · 0 评论 -
absl教程(四):Strings Library
该absl/strings库提供了用于操作和比较字符串、将其他类型(例如整数)转换为字符串或为其他用途评估字符串的类和实用程序函数。此外,该 strings库还包含用于将数据存储在连续内存中的“类字符串”类的实用程序函数。本文档概述了strings 库的亮点和一般用例。有关特定类、函数和字段的更多详细信息,请参阅特定头文件中的源文档。尽管“字符串”通常被认为是 C++ 中的标准类型,但它们并不是内置类型,而是通过std::string类在标准库中提供 。从根本上说,一个字符串由一个大小和一个char字符翻译 2021-09-21 15:51:10 · 894 阅读 · 0 评论 -
absl教程(五):Synchronization library
同步库包括用于跨不同线程管理任务的抽象和原语。该库包含以下头文件:mutex.h提供用于管理资源锁的原语。互斥锁是这个库中最重要的原语,也是大多数并发实用程序的构建块。notification.h提供一种简单的机制来通知线程事件。barrier.h并blocking_counter.h为累积事件提供同步抽象。Abseilbase库还包括许多与并发相关的头文件:base/thread_annotations.h提供用于记录多线程代码的锁定策略的宏,并为滥用此类锁定提供警告和错误。ba翻译 2021-09-21 15:53:54 · 783 阅读 · 0 评论 -
C++ handler回调机制模拟与代码实现
C++在使用第三方SDK开发时, 经常会看到callback、handler的用法,实现sdk的某个接口类,获取相关操作的通知,可以同步,也可以异步,下面将将介绍这种方式的实现。一、 用vs2019创建dll项目例如下面是一个音视频会议的sdk, 包含创建引擎、加入房间,离开房间,销毁引擎等接口接口层:EngineInterface :纯虚类,具体实现在EngineImplEngineEventHandlerInterface :虚基类,该类需要用户来派生实现,用于接收EngineImpl的相原创 2022-02-25 15:47:59 · 901 阅读 · 0 评论 -
C++ WebRTC基础(4) :webrtc信号槽has_slots<> :sigslot - C++ Signal/Slot Library
webrc信号槽介绍 webrtc的很多类都是用了信号槽机制,类似于Qt的信号槽,webrtc中的信号槽如下: PeerConnectionClient类class PeerConnectionClient : public sigslot::has_slots<>, public rtc::MessageHandler { public: enum State { NOT_CONNECTED, RESOL原创 2021-09-21 16:24:47 · 612 阅读 · 0 评论 -
C++ WebRTC基础(5) :webrtc c++ 线程异步调用介绍与代码演示
在进行RTC应用开发时,会有加入频道,其它用户加入频道,房间的流发生变化等操作,对于这些行为,需要有相应的通知,发给界面层,需要进行异步处理,例如当有用户加入房间时,就触发对应的回调函数返回加入的结果,而这个结果是用户层被动获取的,因为不知道什么时候加入成功,通过常会有一个virtual方法让界面层override获取结果。 webrtc源码提供了线程异步调用的实现,代码在rtc_base/rtc_base, 如下所示:webrtc的异步调用在头文件async_invoker.h中有相关的说明原创 2021-09-29 00:24:07 · 1421 阅读 · 0 评论 -
Windows C++ COM编程基础
Windows COM简介 webrtc的windows端代码,用到了很多COM技术,比如使用摄像头视频采集、音频设备管理等,都是使用windows最底层的COM技术,为了更好的熟悉webrtc windows端代码,需要对windows com技术有所了解,不然无法深入到底层,打通底层逻辑,自下而上,再自上而下,这样理解webrtc的代码才轻松一点。关于音视频的采集,可以参考我的OBS源码分析专栏,OBS是录制直播推流项目,会涉及到音视频的采集,底层也是com技术。 那么,COM组件到底是什么?C原创 2022-02-20 19:13:17 · 1120 阅读 · 0 评论 -
C++ WebRTC基础(6) :webrtc摄像头采集模块简介与代码分析
在rtc互动直播的项目中,必然有视频互动的功能,在pc端,那就得开启电脑得摄像头,采集摄像头数据,然后通过网络发送到对端,webrtc关于视频采集的模块在modules/video_capture.首先来看看video_capture.h文件,class VideoCaptureModule封装了设备枚举,开始采集,结束采集、打开摄像头,采集数据,编码等,webrtc都做好了,我们直接直接调用VideoCaptureModule即可完成电脑摄像头视频采集的相关操作。 注意该类的两个方法(1)视频原创 2021-10-06 09:53:16 · 1562 阅读 · 0 评论 -
C++ webrtc摄像头采集并在Qt界面上显示
上篇博客介绍了webrtc摄像头采集的源码以及它的实现方式,本篇来介绍,如何调用webrtc摄像头采集功能,并在Qt界面上显示摄像头画面。首先创建一个VS Qt x64项目,因为我编译的webrtc代码是x64, 界面如下: 显示视频用的是label, 只是我用qss把它背景默认设为了黑色。 控件名字如下: 下面开始编写代码, 首先添加webrtc头文件路径,lib库,预处理器。 头文件包含 预处理器WEBRTC_WIN_ITERATOR_DEBUG_LEVEL=0原创 2021-10-16 17:43:05 · 1809 阅读 · 3 评论 -
C++ WebRTC基础 (7) :C++ webrtc桌面采集底层技术介绍与源码浅析
音视频通话、桌面分享是各种会议软件、办公软件最基本的功能,实现这些功能,最基础的问题是,如何拿到摄像头、桌面或这窗口的数据,在本专栏的前面介绍了如何获取摄像头数据,本篇来介绍如何采集桌面和窗口,这也是webrtc的底层基石,下面来看看webrtc的基本架构图: 如果做过录制、播放、推拉流项目,那么看这张图,其实并不困难,从最底层往上看:(1)声音采集渲染:在windows上,采集声音必然要用到微软提供的音视频会话API,也就是wasapi,其实obs的源码很好的阐释了各个平台的音视频采集渲染技术原创 2021-11-04 23:49:21 · 1855 阅读 · 0 评论 -
C++ WebRTC PeerConnection介绍
学习webrtc的第一步是学习PeerConnection,虽然现在的webrtc源码异常庞大,万事开头难,只要找好了入口,就可以进行摸索了,webrtc vs2019 c++项目目前我所用的版本一共有1286个子项目,如下图:在这篇文章之前,我介绍了webrtc的摄像头采集,桌面采集的方法,这些都是webrtc最基础的模块,没有他们就无法进行音视频通信,而webrtc最上层的PeerConnection接口依赖与摄像头采集,桌面采集等模块。PeerConnection是学习WebRTC的第一步,但是P原创 2021-11-14 21:26:24 · 1474 阅读 · 0 评论 -
C++ select模型原理介绍与代码演示
在做Socket编程时,当要处理一个server对应多个client,这种可以每个客户端用一个线程来处理,但是客户端太多,程序的性能会降低。Windows提供了select模型,很好的处理了一对多的模型。select的申明如下:Int WSAAPI select(_In_ int nfds, //0,无意义_Inout_opt_ fd_set FAR * readfd...原创 2019-10-24 18:28:24 · 3488 阅读 · 0 评论 -
C++ WebRtc peerconnection_client源码分析 (一)
peerconnection_client和peerconnection_server代码调试稍微比较麻烦,因为是两个项目,需要合理的打断点,不然调试不了。peerconnection_client的源码很有深度,除了webrtc的音视频网络传输外,用到了大量的C++高级用法,例如信号槽,不是只有Qt里才有信号槽,webrtc也是用了大量的信号槽;异步socket、工厂模式、单例模式、观察者模式、异步调用等等,在webrtc的源码里应有尽有,我也是看了webrtc的源码,才知道原来C++还可以这样玩。原创 2021-11-17 00:27:23 · 745 阅读 · 0 评论 -
C++ WebRtc peerconnection_client源码分析 (二)
本篇来聊一聊初始化InitializePeerConnection做了哪些工作,代码如下:bool Conductor::InitializePeerConnection() { RTC_DCHECK(!peer_connection_factory_); RTC_DCHECK(!peer_connection_); peer_connection_factory_ = webrtc::CreatePeerConnectionFactory( nullptr /* network原创 2021-12-05 19:06:21 · 2653 阅读 · 0 评论 -
webrtc peerconnection_server项目移植
webrtc peerconnection_server代码位置如下:这是一个C++控制台项目,可以单独提出来,只要把包含webrtc的头文件,链接库文件就可以编译了,下面介绍如何移植这个项目。一、创建vs2019 C++项目用vs2019创建C++控制台项目,编译模式设为x64,将webrtc的代码文件复制到项目中即可:二、包含webrtc头文件…\webrtc_sdk\include\webrtc…\webrtc_sdk\include\webrtc\third_party\abseil原创 2022-03-07 22:58:10 · 595 阅读 · 0 评论 -
WebRTC引用计数、智能指针的使用与代码分析
webrtc的内存管理采用了内存技术计数,所有的class在创建销毁对象时,不使用new delete,全部使用引用计数与自定义的智能指针来处理。例如下面的类DtlsTransportInterface// A DTLS transport, as represented to the outside world.// This object is created on the network thread, and can only be// accessed on that thread, ex原创 2022-01-29 13:15:31 · 1110 阅读 · 0 评论 -
webrtc音频处理源码概述
在如下函数中,CreatePeerConnectionFactory的后面三个参数是音频处理相关的,只是webrtc peerconnection_client demo都是设为空,如果需要进行音频3A处理、混音等操作,则需要实现音频处理的接口类。bool Conductor::InitializePeerConnection() { RTC_DCHECK(!peer_connection_factory_); RTC_DCHECK(!peer_connection_); peer_co原创 2022-02-03 19:45:24 · 1969 阅读 · 0 评论 -
webrtc线程基础介绍与源码分析
webrtc线程介绍与源码分析原创 2022-02-12 15:01:20 · 576 阅读 · 0 评论 -
webrtc中的代理宏
如果做过MFC开发,应该对于MFC定义的一些宏有印象,侯捷的《深入浅出MFC》对这些宏有详细介绍,在webrtc里也有很多宏定义,例如absl的宏,还有一些很复杂的代理宏。 本篇来介绍webrtc中的一些代理宏,还是从peerconnection_client的InitializePeerConnection开始,代码如下:peerconnection的代理创建bool Conductor::InitializePeerConnection() { RTC_DCHECK(!peer_conn原创 2022-02-17 23:29:26 · 543 阅读 · 1 评论 -
webrtc音频引擎创建与初始化流程详细分析
webrtc是如何采集音频并发送、播放音频呢,本篇将详细说明,首先还是要去看看CreatePeerConnectionFactory的代码,它是整个webrtc通信最开始的地方,看看下面这段代码:rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(。。。){ 。。。 。。。cricket::MediaEngineDependencies media_dependencies;原创 2022-03-08 00:03:35 · 613 阅读 · 0 评论 -
webrtc音频采集与播放底层源码介绍与相关功能分析
webrtc的音频采集和OBS有点类似,在windows平台都会使用到WASAPI,如果你熟悉OBS的代码,那么对于WASAPI应该有所了解,为什么不直接使用FFmpeg命令行呢,音视频的采集是个很复杂的过程,最常见的问题,例如在通话时如果插入耳机或者更换摄像头,用ffmpeg命令行就无法处理了,音频还需要进行3A处理,对于这种复杂场景,最终还是需要有系统API来处里。WASAPI介绍 WASAPI(Windows Audio Session API)是微软从Vista系统中推出的全新音频架构UA原创 2022-03-08 23:58:27 · 1205 阅读 · 1 评论 -
webrtc视频rtp打包拆包介绍与源码分析
webrtc rtp打包拆包原创 2022-03-15 00:18:00 · 1457 阅读 · 0 评论 -
c++封装webrtc sdk(一):设计sdk基本结构
很多人希望把webrtc peerconnection client项目移植到Qt, 然而在移植的过程中会出现很多问题,各种编译错误,C++标准错误,WebRtc代码与Qt冲突等等,那么是否可以解决这种冲突呢?封装webrtc源码为sdk是很好的解决方法,让Qt只调用封装后的标准C++的接口,那么就可以很好的处理这种移植问题了,封装就除了可以给Qt用,也可以给MFC, DuiLib等框架使用,而且完全与webrtc无关。......原创 2022-08-13 02:53:30 · 3024 阅读 · 1 评论 -
c++封装webrtc sdk(二):在sdk端实现webrtc视频渲染
VideoCanvas 视频画布对象的属性view视频显示窗口,在windows里,传入窗口句柄renderMode视频渲染模式,详见 RENDER_MODE_TYPE。mirrorMode视图镜像模式,详见 VIDEO_MIRROR_MODE_TYPE声网在渲染视频时,只需要传入窗口句柄,即可进行显示,渲染全部在sdk里处理,那么我们可以仿照声网,在rtc sdk里做视频渲染。如果大家使用过Qt, 应该知道显示图片,需要传入图片路径,或者用内存buffer进行转换;...原创 2022-08-14 00:12:58 · 1031 阅读 · 0 评论 -
webrtc vp8/9视频编解码介绍
在WebRTC中,VP8和VP9用于视频通信。由于WebRTC的开放性和对开源格式的支持,这些编码被广泛采用。VP9由于其更高的压缩率和对高分辨率视频的支持,越来越受到青睐,尤其是在带宽较低但需要高视频质量的应用场景中。选择VP8还是VP9通常取决于特定应用的需求,包括对带宽的需求、视频质量的要求、以及客户端硬件的编解码能力。VP9虽然提供了更好的性能,但其编解码过程可能对计算资源的需求更高,这在一些老旧设备上可能是一个考虑因素。原创 2024-06-04 16:51:47 · 1477 阅读 · 1 评论