自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 rust 学习笔记1

RUSTRust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。Rust的应用Rust 语言可以用于开发:传统命令行程序 - Rust 编译器可以直接生成目标可执行程序,不需要任何解释程序。Web 应用 - Rust 可以被编译成 WebAssembly,WebAssembly 是一种 JavaScript 的高效替代品。网络服务器 - Rust 用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十

2021-12-06 15:46:55 432

原创 c++基础 - enable_shared_from_this 解决什么问题

文章目录enable_shared_from_this 解决什么问题场景enable_shared_from_this 解决什么问题需要在内部使用this的情况,例如回调参数是this, 可以shared_from_this原理是创建一个weak_ptr, 调用shared_from_this 的时候,返回以weak_ptr为参数的构造shared_ptr 就可以和 weak_ptr 共享sp_count_base 指针,这样所有从shared_from_this返回的ptr 都处于共享状态1、创建

2021-10-27 11:48:53 622

原创 c++11 总结-2

文章目录4、 c++11 解决内存泄露问题4.1 shared_ptr4.2 weak_ptr4.3 unique_ptrenable_shared_from_this4.4 通过智能指针管理第三方库分配的内存其他细节make_shared5、c++11 让多线程开发变得简单5.1 线程5.4 互斥锁、条件变量、原子变量5.5 call_once/once_flag5.6 异步操作6、c++11 便利工具6.1 chrono 库6.2 数值类型和字符串的相互转换6.3 宽窄字符转换7、 其他特性7.1 委托

2021-10-27 11:46:55 446

原创 c++11 总结-1

文章目录1、让程序更简洁1.1、类型推导1.2、模板细节的改进1.3、列表初始化1.4 基于范围的for 循环1.5 std::funtion 和 bind1.6 lambda 表达式tuple2、改进性能2.1 右值引用move & forward2.4 emplace_back 减少内存拷贝和移2.5 无序容器3、消除重复,提高代码质量3.1 type_traits 类型萃取3.2 可变模板参数函数模板展开类可变模板展开其他3.3 可变模板参数和type_taits 的综合应用1、optiona

2021-10-27 11:42:28 280

原创 《深入解析 windows OS 学习笔记》- 概念和工具

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Windows概念和术语1.Windows API2.运行时库3. .NET框架总结前言 在本章将介绍 windows 操作系统的概念和术语,例如 Windows API,进程,线程,虚拟内存,内核态和用户态,objects , handles(句柄),安全 和注册表。还会介绍可以研究W

2021-10-27 08:41:05 389

原创 opengl - 流程

glut:OpenGL Utility Toolkit,用于开发独立于窗口系统的OPENGL程序。其中打包了很多窗口操作相关的接口,包括窗口创建、显示、输入设备读取、窗口管理等;使用它可以在OPENGL开发中快速完成窗口的相关操作。不过已经在1998年停止更新与维护。freeglut:一个完全开源的替代glut的库glew:OpenGL Extension Wrangler Library,一个跨平台的C++扩展库,基于OpenGL图形接口。以Windows平台开发为例,Windows默认只支持Open

2021-10-26 22:16:40 227

原创 Direct3D - 术语专场,管线

设备类型D3D_DRIVER_TYPED3D_DRIVER_TYPE_HARDWARE : 速度最快,在硬件中实现 Direct3D 功能D3D_DRIVER_TYPE_REFERENCE:参考驱动程序,它是支持每个 Direct3D 功能的软件实现。。参考驱动器是为精度而不是速度而设计的,因此速度慢但准确。D3D_DRIVER_TYPE_NULL :NULL 驱动程序,它是没有渲染功能的参考驱动程序。此驱动程序通常用于调试非渲染 API 调用。D3D_DRIVER_TYPE_SOFTWARE:

2021-10-25 08:38:42 528

原创 项目开发 - CMake教程+实战

通过Cmake 搭建一个demo,已熟悉cmake 的相关命令。本文需要达到的目标构建多个文件的demo vs 工程,生成exe界面采用Qt依赖三方库自定义配置一些宏1、 cmake 介绍CMake 是一个开源、跨平台的工具系列,旨在构建、测试和打包软件CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装。也就是项目或者工程对的搭建,例如:windows 的vs , linux 下 makefile 。要知道这些工程的搭建是非常麻烦的。CMake 功能强大。

2021-10-24 17:42:15 925

原创 webrtc基础 - SDP(Session Description Protocal)

SDP 简介SDP全称是Session Description Protocol,翻译过来就是描述会话的协议。主要用于两个会话实体之间的媒体协商。协商能力SDP 是一个本机的能力的描述文本,主要是为了解决参与会话的各成员之间能力不对等的问题,如果参加本次通话的成员都支持高质量的通话,但是我们没有去进行协议,为了兼容性,使用的都是普通质量的通话格式,这样就很浪费资源了。协商出大家支持的音视频编解码器、编解码器相关的参数(如音频通道数,采样率等)、传输协议等信息。SDP协议SDP 格式SDP

2021-10-22 18:25:01 506

原创 webrtc基础 - RTP/RTCP

1、简介RTP—实时传输协议,其在多点传送(多播)或单点传送(单播)的网络上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:音频,视频或者仿真数据。RTP没有为实时服务提供资源预留的功能,也不保证QoS(服务质量)。RTP的数据传输功能由一个控制协议(RTCP)来扩展,通过扩展,可以用一种方式对数据传输进行监测控制,该协议(RTCP)可以升级到大型的多点传输(多播)网络,并提供最小限度的控制和鉴别功能。RTP 和 RTCP 被设计成和下面的传输层和网络层无关。总结:RTP 只是简单数据的封

2021-10-22 17:32:08 1730

原创 webrtc QoS -服务质量总结

什么是QOSQoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来说是十分重要的,特别是对于流多媒体应用,例如VoIP和IPTV等,因为这些应用常常需要固定的传输率,对延时也比较敏感。webrtc 的QoS 的方法NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VF

2021-10-22 15:18:32 597

原创 webrtc源码学习 - 术语概念介绍

文章目录1、术语介绍1.1 协议1.1.1 ICE:1.1.2 STUN:1.1.3 TURN:1.1.4 JSEP1.1.5 DTLS1.1.6 mDns1.2 音视频1.2.1 track1.2.1 音频1.3 术语2.3.1 candidate1、术语介绍由于在webrtc 学习过程中,经常由于一些概念不了解,中断去大量搜资料,效率比较,所以做个整理,将所有的概念集中在一起不断丰富。每个概念有简单介绍和详细说明的链接。1.1 协议1.1.1 ICE:ICE:interactive conne

2021-10-21 17:22:28 1007

原创 webrtc源码学习 - thread 线程实现

文章目录1、webrtc thread 介绍1.1类图1.2 thread 为什么继承 MessageQueue2、thread 的实现2.1 Thread::Start2.2 线程循环Run2.3 线程调用的示例2.4 Post2.5 Get1、webrtc thread 介绍1.1类图1.2 thread 为什么继承 MessageQueuethread 继承MessageQueue, 主要是复用了Post 等接口,大家可以想一下,正常情况下,我们实现线程,queue 作为成员变量,添加任务的

2021-10-21 16:00:11 1007

原创 webrtc基础 - STUN、TURN 协议

前言在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。STUN,首先在RFC348

2021-10-20 17:17:16 815

原创 webrtc源码学习 - 资料总览

文章目录1、webrtc基础组件介绍2、概念介绍1.1 协议1.1.1 ICE:1.1.2 STUN:1.1.3 TURN:1.1.4 JSEP1.1.5 DTLS1.1.6 mDns1.2 音视频1.2.1 track3、P2P1、webrtc基础组件介绍webrtc源码学习 - windows摄像头采集webrtc源码学习 - Message 和 MessageQueue消息队列webrtc 源码学习 - 信号和槽的实现webrtc源码学习 - 3种异步处理webrtc源码学习 - PROX

2021-10-20 17:13:48 176

原创 webrtc基础 - NAT

NATNAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。外网和内网的映射的解决方案NAT实现方式:1、即静态转换Static Nat、2、动态转换Dynamic Nat3、端口多路复用OverL

2021-10-20 16:51:52 1145

原创 Direct3D- 概念整理(swap chain)

概念surface, 在direct 3d 中用了存储2d 图形数据帧,swap chain为了避免在动画中出现闪烁,最好的做法是在一个离屏(off-screen)纹理中执行所有的动画帧绘制工作,这个离屏纹理称为后台缓冲区(back buffer)。当我们在后台缓冲区中完成给定帧的绘制工作后,便可以将后台缓冲区作为一个完整的帧显示在屏幕上;使用这种方法,用户不会察觉到帧的绘制过程,只会看到完整的帧。从理论上讲,将一帧显示到屏幕上所消耗的时间小于屏幕的垂直刷新时间。硬件会自动维护两个内置的纹理缓冲

2021-10-20 14:25:13 928

原创 webrtc源码分析-ICE交互链接建立(代码实现)

文章目录创建UDP PORTudp 请求 STUN 服务接收STUN 消息创建UDP PORTvoid AllocationSequence::CreateUDPPorts() { if (IsFlagSet(PORTALLOCATOR_DISABLE_UDP)) { RTC_LOG(LS_VERBOSE) << "AllocationSequence: UDP ports disabled, skipping."; return; } // TODO(mall

2021-10-19 22:28:55 2232

原创 webrtc源码学习 - Network

文章目录network 支持功能获取本机的网络获取本机地址和端口dns 获取network 支持功能1、本地网络2、适配器3、dns获取本机的网络1、调用 GetAdaptersAddresses函数检索与本地计算机上的适配器关联的地址。2、遍历适配器信息- 2.1 判断操作状态,如果是启动才进行处理-bool BasicNetworkManager::CreateNetworks(bool include_ignored,

2021-10-19 17:18:14 299

原创 webrtc基础 - P2P通信协议 ICE

ICEICE的全称为Interactive Connectivity Establishment,即交互式连接建立. ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。他利用STUN 和 TURN 服务器帮助端建立链接ICE 呼叫流程ICE是一个用于在offer/answer模式下的NAT传输协议,主要用于UDP下多媒体会话的建立,其使用了STUN协议以及TURN协议,同时也能被其他实现了offer/answer模型的的其他程序所

2021-10-18 21:37:39 1262

原创 webrtc源码学习 - 点对点(P2P)链接过程(peer connection)

创建PCpc 是 peer connection 的简写,以下文章中pc 都特指 peer connectionPeerConnection 是webrtc 中链接过程非常重要的接口,提供了包括,链接、ICE、track、编解码流程控制流程图创建代码1、创建PeerConnectionFactory 工厂2、创建peer_connection3、创建audio track 和 video trackbool Conductor::InitializePeerConnection() {

2021-10-18 18:52:33 1613

原创 webrtc源码学习 - windows摄像头采集

windows 摄像头采集方案现在市场上大多数的摄像头和采集卡在Windows系统上的驱动基于WDM架构,微软定义了采集卡设备与上层程序间的通信驱动接口,这已经成为一种标准,因此,控制摄像头和采集图像基本都通过Directshow框架来实现。webrtc 摄像头采集由上面的介绍,我们知道在windows 几乎都dshow,那webrtc 摄像头采集也是采用的dshow摄像头采集的模块类图 ,VideoCaptureDS 是采集的实现类,DS 也就是DirectShow 的简写。接下来,我们看

2021-10-18 16:01:59 1043 1

原创 OBS 源码分析- 采集方案之三(游戏采集)

文章目录1、OBS采集方案2、OBS 游戏采集游戏采集原理游戏采集过程初始化获取数据1、OBS采集方案obs的视屏录制主要分3种:窗口采集:采集应用程序窗口显示器采集:也叫全屏采集,可以采集整个屏幕,当有多个显示器时,可以设置采集其中一个显示器游戏采集:可以采集游戏窗口extern struct obs_source_info duplicator_capture_info;extern struct obs_source_info monitor_capture_info;extern s

2021-10-18 14:10:42 5148

原创 windows - GDI 和 opengl 双缓冲

GDI概述GDI在全称是Graphics Device Interface,即图形设备接口。是图形显示与实际物理设备之间的桥梁。GDI使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作先上一个图,窗口渲染的过程,自己的理解可能有问题1.1 GDI 函数GDI函数大致可分类为:设备上下文函数(如GetDC、CreateDC、DeleteDC)画线函数(如LineTo、Polyline、Arc)填充画图函数(如Ellipse、FillRect、Pie)画图属性函数(

2021-10-17 20:38:44 1802

原创 windows - DirectX渲染的学习总结

文章目录1、兼容性硬件兼容性1.2 软件兼容性2 windows 图形架构2.1 基本原理2.2 windows 图形框架参考https://keenjin.github.io/2020/04/DXRender/#3-dx%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%B5%81%E7%A8%8B1、兼容性硬件兼容性使用dxdiag.exe 看显卡硬件对DirectX版本特性的支持,在图中可以看到(功能基本),支持 dx9 - dx12。驱动程序模型是WDDM 2.7

2021-10-17 17:06:10 621

原创 windows - 图形核心框架图

XPDM :非合成模型(window xp)WDDM :合成模型(vista 之后的架构)Windows Vista 核心图形架构,比起 XP 来要丰富了很多通过更多地将 GDI/GDI+ 纳入 DirectX 体系获得硬件加速,图形界面的性能会越来越好(当然,这需要软件厂商们使用新的 Direct2D/DirectWrite 进行编写)。微软希望将所有的图形操作都构建在 DirectX 之上。...

2021-10-17 12:07:24 592

原创 windows - 图形体系结构

文章目录1、Window 图形体系结构1.1 Direct2D 的好处硬件加速透明度和抗锯齿矢量图形2、Windows (DWM)1、Window 图形体系结构Windows 为图形提供了多个 C++/COM API。这些 API 如下图所示。图形设备接口 (GDI) 是 Windows 的原始图形接口。GDI 最初是为 16 位 Windows 编写的,然后针对 32 位和 64 位 Windows 进行了更新。GDI+ 是在 Windows XP 中作为 GDI 的继承者引入的。GDI+ 库是

2021-10-16 18:14:31 1328

原创 windows - DPI (简单明了)

概念要使用 Windows 图形进行有效编程,您必须了解两个相关概念:每英寸点数 Dots per inch (DPI)与设备无关的像素 Device-independent pixel (DIP)字体大小字标准 (磅)我们先了解字体大小这个概念,在标准的概念中定义是这样的排版概念:1 榜 = 1/72 英寸(真实世界的长度),也就2.54 厘米你可以拿尺子量一下,哈哈(肯定是不对,因为屏幕大小不一样)下图就是72 磅的字体显示的问题(物理世界对应)不像在客观世界一样,展示的物

2021-10-16 17:55:29 2358 4

原创 OBS 源码分析- 采集方案之二 (摄像头采集)

1、OBS采集方案obs的视屏录制主要分3种:窗口采集:采集应用程序窗口显示器采集:也叫全屏采集,可以采集整个屏幕,当有多个显示器时,可以设置采集其中一个显示器游戏采集:可以采集游戏窗口extern struct obs_source_info duplicator_capture_info;extern struct obs_source_info monitor_capture_info;extern struct obs_source_info window_capture_info;

2021-10-16 11:59:39 2606

原创 windows - 摄像头采集

1、DriectShow 采集1.1 DirectShow 基础DirectShow 其主要设计目标是通过将应用程序与数据传输的复杂性、硬件差异和同步隔离,简化在 Windows 平台上创建数字媒体应用程序的任务 ,DirectShow简化媒体播放、格式转换和捕获任务下图显示了应用程序、DirectShow组件以及应用程序支持的一些硬件和软件DirectShow之间的关系。在这里插入图片描述Filter是DirectShow技术体系中最基本的概念。如上图所示,DirectShow中的Filter

2021-10-16 11:26:45 1432

原创 windows - DirectShow系统概述

DirectShow系统概述多媒体挑战使用多媒体存在几个主要挑战:多媒体流包含大量数据,必须快速处理这些数据。音频和视频必须同步,以便它同时启动和停止,并且以相同的速率播放。数据可能来自许多源,包括本地文件、计算机网络、广播和摄像机。数据采用各种格式,例如 Audio-Video 交错式 (AVI) 、高级流式处理格式 (ASF) 、运动图片专家组 (MPEG) 和数字视频 (DV) 。程序员事先不知道最终用户的系统中将存在哪些硬件设备。DirectShow解决方案DirectSho

2021-10-16 09:04:38 199

原创 windows - COM 组件介绍

文章目录COM 简介概念CoCreateInstanceIUnKnown 接口IUnknown 的工作原理引用计数接口查询COM 简介Microsoft 组件对象模型 (COM) 是一个独立于平台的分布式面向对象的系统,用于创建可交互的二进制软件组件。 COM 是 Microsoft 的 OLE (复合文档) 、ActiveX (Internet 组件) 等的基础技术。若要了解 COM (所有基于 COM 的技术) ,必须了解它不是面向对象的语言,而是一种标准。 用于创建在运行时进行交互的可重用的软件

2021-10-15 11:42:09 5627

原创 windows - 屏幕抓取技术总结

Windows抓屏技术前3项是主要的使用monitor_capture也是obs中在使用的文章目录1. BitBlt (DC)1.1 调用过程1.2 优缺点2.DXGI2.1 调用流程2.2 性能对比2.3 优缺点3. WGC(Windows Graphics Capture)4. Mirror driver(win8 之前适用)5、GDI hook( 适用较少)6. Windows Media API(依赖SDK 不常用)优缺点:7. PrintWindow8. DWM/Dxgi hook9. Get

2021-10-14 21:56:57 11493 2

原创 windows graphics - DXGI 介绍(DirectX Graphics Infrastructure)

DXGI 概述Microsoft DirectX 图形基础结构 (DXGI) 认识到,某些图形部分的发展速度比其他部分更慢。 DXGI 的主要目的是管理可独立于 DirectX 图形运行时的低级别任务。 DXGI 为未来图形组件提供了通用框架;使用 DXGI 的第一个组件是 Microsoft Direct3D 10。在以前版本的 Direct3D 中,诸如一下功能,等底层任务都包含在 Direct3D 运行时中。 这些任务现在在 DXGI 中实现。硬件设备的枚举、将呈现的帧呈现到输出、控制伽玛

2021-10-14 11:12:51 2227

原创 windows - Hook技术介绍

hook 介绍Hook技术被广泛应用于安全的多个领域,比如杀毒软件的主动防御功能,涉及到对一些敏感API的监控,就需要对这些API进行Hook;窃取密码的木马病毒,为了接收键盘的输入,需要Hook键盘消息;甚至是Windows系统及一些应用程序,在打补丁时也需要用到Hook技术。接下来,我们就来学习Hook技术的原理。分类1、 SetWindowsHookExWindows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。Windows操作系统提供的钩

2021-10-13 17:23:57 1714

原创 webrtc源码学习 - Track Source Sink的关系

1、source & sink 的关系source是生产媒体资源的,sink负责消费。可以理解成sink 就是观察者,soruce 产生数据调用sink OnFrame,下面是2个接口类,非常简单template <typename VideoFrameT>class VideoSourceInterface { public: virtual ~VideoSourceInterface() = default; // 添加sink virtual void

2021-10-12 17:54:16 1046 1

原创 webrtc源码学习 - PROXY 类对象跨线程同步问题

1、背景由于在webrtc 中存在多线程,而多线程的互斥和同步是工程项目中,最需要关注的和解决的问题。那在webrtc是如何解决的呢?1.1 webrtc 3种异步处理机制从webrtc源码学习 - 3种异步处理,中我们了解到有3中异步处理机制,可以让任务在指定的线程中执行。1.2 代理模式了解到上面基础之后,来思考下,如何让所有调用某个对象(类)的接口时候都是在指定的线程上执行呢?这个也是很容易想到,代理模式。让每个接口通过代理封装异步调用,就可以实现接口在指定线程的运行。虽然可以想到使用代理

2021-10-12 14:58:34 290

原创 webrtc源码学习 - Message 和 MessageQueue消息队列

1、webrtc Message 的作用message 主要服务于MessageQueue,用于异步和同步处理2、类图1、涉及的类主要有,Message, MessageHandle, MessageData类图如下2.1 MessageQueueMessageQueue 是消息队列,thread 也是继承与MessageQueue ,其实一般情况是 聚合关系,但是Post 这些接口直接可以复用,减少了Thread的接口。 MessageList msgq_ RTC_GUARDED_BY(c

2021-10-12 10:05:02 338

原创 webrtc 源码学习 - 信号和槽的实现

1、背景在webrtc中使用到信号和槽的机制,信号和槽做qt的核心机制已经非常被大家熟知,但是对于非qt的实现还是第一次遇到,了解下原理。优点:信号和槽,重点解决了观察者继承耦合关系。通过模板替换了继承关系,降低了耦合。可以链接任意函数。qt 的信号槽,是由元对象系统实现,在编译前进行moc ,生成对应的moc.cpp 的源码。比webrtc中的实现要复杂的多,但是使用也更简单。2、认识webrtc中信号、槽1、如何使用非常简单,和qt差不多,信号对象自带connect函数。sigslot::s

2021-10-11 18:04:42 329

原创 webrtc源码学习 - 3种异步处理

1、webrtc 3中异步调用方式1)taskqueue 每个队列上有一个线程执行,线程不需要指定2)asyncTask 在指定的线程上执行,需要指定线程3)SynchronousMethodCall 在指定线程执行完成后,同步等待结果2、具体实现2.1 TaskQueueTaskQueue :是TaskQueueBase 的带来,是依赖注入的方法实现。如下下图TaskQueueBase : 抽象接口,异步执行的接口TaskQueueWin:1、创建一个线程,并启动,每个任务队列有一个线

2021-10-11 17:29:40 555

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除