- 博客(53)
- 收藏
- 关注
原创 WebRTC服务质量(12)- Pacer机制(04) 向Pacer中插入数据
是外部接口,将传入的 RTP 包封装后调用内部函数处理。是内部核心逻辑,负责:将 RTP 包按优先级和时间戳入队列;管理动态发送预算;更新流量探测器。Pacer 的最终目标是控制 RTP 包的发送节奏,确保带宽利用率的同时避免网络过载,同时按优先级调度多种类型的数据包。
2024-12-25 16:52:59
769
原创 WebRTC服务质量(11)- Pacer机制(03) IntervalBudget
public:// 用于设置目标码率// 用于计算我们这个时间分片,有多少数据可以发送private:// 通过带宽评估算法评估出的目标码率(也就是1s内发送多少数据)// 在budget中最大可以存放多少字节// 在一个时间分片内,还有多少数据可以发送本文主要介绍了Pacer模块中怎么根据目标码率,然后通过来完成动态调整每段时间的字节预算,使整体码率稳定在设计的目标值附近,同时平衡欠载和过载的情况。
2024-12-25 01:56:31
1529
原创 WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
每个流由Stream类表示,Stream当前队列状态,如总字节数、包大小和优先级。内部维护单独的优先级队列(调度时实时更新优先级,确保新加入高优先级包时能调整队列次序。是一个高效的多流、多优先级调度队列,适用于 RTP 媒体数据的分组发送场景。它通过流内、流间的双重调度机制,结合优先级动态提升、统计队列时间和暂停控制等特性,确保在带宽有限的网络环境中最大程度提高数据的实时性和发送效率,是 WebRTC Pacer 模块的核心部分。
2024-12-25 01:00:49
1424
原创 WebRTC服务质量(09)- Pacer机制(01) 流程概述
本文主要介绍了Pacer模块的作用,以及相关重要的框架代码,其实还有很多细节后面再打开看看。
2024-12-23 15:21:50
1431
原创 WebRTC服务质量(08)- 重传机制(05) RTX机制
函数是 WebRTC 中 RTP 协议层实现丢包恢复的重要部分。它利用记录和 RTX 协议实现高效的重传机制,同时考虑到带宽管理、速率限制和两种重传策略(RTX 和普通 RTP)的兼容性。在具体代码实现中,它通过灵活的封装和严格的速率控制,保证了无损恢复的同时避免了网络拥塞情况。
2024-12-23 01:57:03
1623
原创 WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
本文主要介绍了接收Nack包的流程,其实也就是接收一般RTCP包的流程,并且从Call模块开始走读了一下代码,走读代码过程中千万要记住自己大概处于流程的什么位置,要么会lost yourself!!!
2024-12-22 23:07:29
710
原创 音视频基础(01)H264重要概念
GOP是视频编码中的一个单位,由一组视频帧组成。通常包括一个I帧(关键帧),后面跟随多个P帧和B帧。GOP的长度(即帧的数量)和结构(I帧、P帧和B帧的排列组合)会影响编码的效率和视频的质量。码率(Bitrate)码率指视频在单位时间内传输的数据量,通常以kbps(千比特每秒)或Mbps(兆比特每秒)来表示。码率越高,视频质量通常越好,但所需的带宽也越大。帧率(Frame Rate)帧率是指每秒播放的帧数,通常以fps(frames per second)表示。
2024-12-22 01:44:24
762
原创 Windows平台代码下载编译
我的是Windows11平台,在要下载代码的目录打开cmd,记住,不要使用powershell,由于depot_tools某些脚本设置,会有其他问题。备注:7897是你自己代理的端口。
2024-12-21 13:53:06
605
原创 Android显示系统(14)- Vsync机制(01) 框架介绍
其实这个黄油计划已经极大改善了显示流程,可我们想想,如果某个程序员设计的Layout导致CPU好多个Vsync都没有准备好数据,是不是依然会Jank?所以,还得提高我们自身知识水平!
2024-12-19 12:32:22
1199
2
原创 WebRTC服务质量(06)- 重传机制(03) NACK找到真正的丢包
上一篇文章我们记录了丢包,但是这些包都是一些可疑丢包,本文我们就分析下如何从可疑丢包中找到真正丢包。本文主要介绍了从可疑丢包中找到真正丢包的逻辑,我们也看出来,webrtc不是简单的丢了包就要求重传,还对序列号跨度,超时时间等做了限制,这样才不会导致重传风暴。
2024-12-17 23:14:06
1382
原创 WebRTC服务质量(05)- 重传机制(02) NACK判断丢包
本文主要介绍了NACK的格式,以及NACK的调用栈,并且介绍了如何判断丢包,但请记住,这些包都是“可疑丢包”,真正的丢包下一节介绍。
2024-12-17 01:21:59
1160
原创 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述
NACK(Negative Acknowledgments)是一种反馈机制,用于通知发送端某些数据包在传输过程中丢失了,从而让发送端可以知道需要重新发送丢失的数据包。RTX(Retransmission)是WebRTC中实现NACK的一个实际重传机制,用于基于NACK反馈进行丢包的重传。
2024-12-16 18:12:26
974
原创 Android显示系统(13)- 向SurfaceFlinger提交Buffer
Buffer被填充完渲染数据之后,通过Binder告诉SF端对应的消费者,后续通知流程:生产者->进入了消费者->Layer->SurfaceFlinger。就进入了视频显示的主流程,具体如何显示,且听下回分解。
2024-12-16 16:08:43
1402
原创 Android显示系统(12)- 向SurfaceFlinger申请Buffer
本文主要介绍了,应用层如何申请并获得SurfaceFlinger的Buffer,省略了中间Binder部分,不熟悉的可以看之前的文章,还有,最重要的是返回的都是buffer在mSlots数组中的索引,不是傻乎乎拷贝数据。
2024-12-15 23:01:52
1165
原创 Android显示系统(11)- 向SurfaceFlinger申请Surface
至此,Surface获取部分讲解完成,拿到画布之后该往里填数据了吧?
2024-12-13 11:23:50
1203
原创 Android显示系统(10)- SurfaceFlinger内部结构
本文主要讲了SurfaceFlinger内部几个非常重要的概念,并且,分析了APP和SurfaceFlinger建立连接的时候,SurfaceFlinger干了啥,后续再分析:如何获取画布,如何往画布上作图,如何提交已经做好图的画布,并且会专门分析buffer管理。
2024-12-12 19:17:53
1272
原创 WebRTC服务质量(03)- RTCP协议
RTCP(RTP Control Protocol)是一种控制协议,与RTP(Real-time Transport Protocol)一起用于实时通信中的控制和反馈。RTCP负责监控和调节实时媒体流。通过不断交换RTCP信息,WebRTC应用能够调整比特率、编码方式等,适应网络条件,确保音视频通话的质量。同时,RTCP与RTP共同工作,使得数据传输不仅准确,而且高效。
2024-12-11 13:08:51
1385
原创 WebRTC服务质量(02)- RTP协议
本文主要介绍了RTP协议,要理解它只是传输音视频数据,不管你丢包,质量,带宽等乱七八糟的东西,这些都是由RTCP配合完成的,下一节看看RTCP。
2024-12-10 18:50:14
685
原创 WebRTC服务质量(01)- Qos概述
WebRTC 的 QoS 策略是一个复杂的多层动态优化过程,以实现实时音视频通信的高质量和低延迟。提高网络可靠性(NACK/RTX、FEC、JitterBuffer 等)。动态调整码率与带宽适配(拥塞控制、Transport-cc、主动丢包等)。降低数据发送量(SVC、Simulcast、动态帧率调整等)。延迟优化(Pacer、DTLS 优化、ICE 节点选择等)。音频质量优化(Opus 自适应、音频冗余编码、回声消除等)。设备性能适配(硬件加速、帧率和分辨率平衡等)。
2024-12-10 17:02:07
1154
原创 Android显示系统(09)- SurfaceFlinger的使用
之前文章讲解了Android显示系统的架构,并且花了大量时间介绍了OpenGL ES,以及为了保证OpenGL ES的平台无关性,Android引入的EGL。不过我们都是借助于来学习的,而我们构建对象的时候,在Native层做了很多的事情,其中,大多数逻辑都是辅助我们完成的,它才是整个Android显示系统的核心。最重要的职责就是合成各个App传递过来的Surface。本文先学会在Native层使用,后续根据代码一点点引入不同知识。**说明:**后续文章如果出现SF那就是我对的缩写。
2024-12-10 11:54:38
1774
原创 Android显示系统(08)- OpenGL ES - 图片拉伸
如上图所示,我本来要笑得很开心,就像左边图片一样,结果笑抽了,像右边一样了。这里面有个视口的概念,视口是指在屏幕上用于显示图形的矩形区域。我们之前说了,在渲染管线的投影变换正交变换和透视变换,其中透视变换一般用于显示3D效果,物体距离观察者越远,尺寸越小,造成深度感,一般适用于电影、游戏等场景;而正交变换一般用于显示2D图片,无论距离如何,物体的尺寸保持不变,因此我们选择正交变换;
2024-12-08 21:55:16
644
原创 Android显示系统(07)- OpenGL ES - 纹理Texture
矩阵乘以单位矩阵时,任何矩阵都不会发生改变。例如,对于一个二维或者三维的变换,单位矩阵是一个不做任何变换的基础矩阵。在三维空间中,具体的单位矩阵形式如下:1 0 0 00 1 0 00 0 1 00 0 0 1本章主要讲解了内部纹理如何渲染,你可以简单理解成如何显示出你手机图库里面某张照片。需要掌握的内容非常多,主要涉及GPU内部结构和关键接口的了解,纹理的概念,并且得了解一些纹理参数,每个参数又和一些业务场景相关,只要做图形学相关,纹理是必须掌握的,大家加油压!
2024-12-08 01:19:39
1602
1
原创 Android显示系统(06)- OpenGL ES - VBO和EBO和VAO
本文主要介绍了VBO、EBO、VAO,大家掌握了基本概念和使用之后,其实也就掌握了一种产品性能优化的思路。
2024-12-06 23:12:48
1642
原创 Android显示系统(05)- OpenGL ES - Shader绘制三角形(使用glsl文件)
上一篇文章我们使用了Shader绘制了一个基本的三角形,但是,发现那样写Shader程序特别麻烦,各种加双引号,还没有语法高亮提示。因为glsl也和java、c++一样是一门语言,实际工程项目都是单独的glsl文件管理的,本节我们整改下之前的项目。
2024-12-05 23:37:48
655
原创 Android显示系统(04)- OpenGL ES - Shader绘制三角形
在现代的图形渲染中,通常会使用两种主要类型的着色器:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)。这两种着色器分别负责处理图形的顶点数据和片元(像素)数据,通过编写这些着色器程序,开发人员可以实现各种复杂的图形效果和渲染技术。顶点着色器顶点着色器用于处理图形的顶点数据,如位置、颜色、法线等。主要作用包括对顶点位置的变换(如模型变换、视图变换、投影变换)、法线变换、顶点着色等。顶点着色器的输出通常是裁剪空间坐标或者屏幕空间坐标。片元着色器。
2024-12-04 19:49:09
1593
原创 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用
我们应用层和Native层其实都可以直接调用EGL接口或者OpenGL ES的接口,但是,可能比较复杂一些,Android提供了更加方便的类供应用开发者使用,会在自己的渲染线程GLThread启动之后创建OpenGL ES环境。
2024-12-04 01:04:58
929
原创 Android显示系统(02)- OpenGL ES - 概述
为了介绍清楚Android显示系统,得从实战的目的花几篇文章介绍下OpenGL ES,对OpenGL ES熟悉的可以直接跳过这几章。OpenGL ES是OpenGL的精简版,专门用于嵌入式平台,因为嵌入式平台硬件资源有限,做了定向的优化。而OpenGL就是定义了一套渲染API标准(注意不是库),方便不同操作系统,不同硬件对渲染进行统一。目的就是一个:将3D世界转换到2D屏幕显示出来,比如以前小学课文中有一篇叫做《画杨桃》,3D空间中的杨桃就像我们设计的一个模型,但是,从不同视角去看,在2D屏幕上形成的一张画
2024-12-03 20:00:28
1517
原创 Android 基础类(01)- Thread类 - readyToRun和threadLoop
在阅读AOSP代码过程中,我们经常会看到ThreadreadyToRun和threadLoop,不清楚的同学,可能在这儿连调用逻辑都搞不清楚了,因为找不到谁调用了它。我这儿先不去深究Thread内部逻辑,只阐述调用时机。
2024-11-28 11:21:42
475
原创 Android显示系统(01)- 架构分析
本文主要从框架层面对Android显示系统进行了介绍,里面最重要的就是,它管理者众多模块完成了Android每一帧画面的显示。
2024-11-26 18:46:29
1355
2
原创 Android Binder通信02 - 驱动分析 - 架构介绍
本章着重讲了一下架构,并没有涉及多少代码,后续通过实际用到的情景进行分析代码。
2024-11-15 11:16:07
1147
原创 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇
前面介绍了视频数据采集,那么采集到的数据如何上传给上层应用的?本节看看。其实逻辑还是非常明确的,也是常见的设计模式(观察者模式)。将底层数据一层层抛给应用层,注意要关注,处理媒体数据,由于量非常大,尤其高清视频,我们所说的抛数据不是你一层层拷贝,留意每个环节怎么做的,哪些环节拷贝了数据,因为什么迫不得已拷贝的,这对诸位写出软件实时性有很大影响。!!
2024-11-13 21:07:05
1361
原创 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇
本节主要讲了怎么将两个Filter进行连接,连接之后就可以进行数据采集了。
2024-11-13 19:03:02
1644
原创 WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
是DirectShow API中的一个函数,它用于创建一个枚举器对象,该对象可用于枚举系统中注册的所有DirectShow滤波器的类标识符(CLSID)。: 指定要枚举的设备类别的 CLSID。传入NULL时,将枚举所有的设备类别。: 指向接口指针的指针。枚举器将通过该指针返回。dwFlags: 可选的标志,用于指定枚举器的行为。
2024-11-13 14:53:41
1450
原创 WebRTC视频 02 - 视频采集类 VideoCaptureModule
DirectShow是一种由微软开发的多媒体框架,主要用于Windows平台上处理和操控流媒体数据。该技术提供了一组API,支持音频和视频的捕获、处理、转换和播放。模块化结构DirectShow基于过滤器(filter)的架构,每个过滤器执行特定的任务,如源读取、数据解析、编码、解码、渲染等。过滤器之间通过引脚(pin)连接,形成一个可定制的处理链。多种格式支持支持多种媒体格式,包括AVI、MPEG、ASF、WAV、MP3等。这使得开发者可以构建能够处理多种媒体格式的应用程序。实时流媒体处理。
2024-11-12 23:52:20
1384
原创 WebRTC视频 01 - 视频采集整体架构
本章主要介绍了视频数据采集的关键类VcmCapture、VideoTrack、VideoBroadcaster,VideoCapture。并且交代了这几个类的主要职责,以及如何利用他们创建一条数据链路的。后续,对具体的引擎再做分析。
2024-11-12 02:10:34
1631
3
原创 WebRTC音频 05 - 音频采集编码
本文主要介绍了音频数据采集线程、编码线程如何配合完成音频数据从采集到编码发送的流程。涉及到引擎层的AudioState(包括其中的adm),以及ACM模块,还有Call模块,如果不了解这几个模块,可以看我的WebRTC音频 03 - 实时通信框架-优快云博客。
2024-10-18 00:20:11
537
原创 WebRTC音频 04 - 关键类
在WebRTC音频代码阅读过程中,我们发现有很多关键的类比较抽象,搞不清楚会导致代码阅读一脸懵逼。比如PeerConnection、Call、AudioState、Channel、Stream,本文就尽力介绍下。
2024-10-16 17:56:46
852
2
原创 WebRTC基本类 - 智能指针(RefCountedObject和scoped_refptr)
路径:rtc_base\ref_counted_object.hpublic:protected:构造函数重载该类提供了多个构造函数重载,以便使用不同数量的参数初始化对象。构造函数使用完美转发将参数传递给基类构造函数。AddRef 方法AddRef()方法用于增加引用计数。标记为const表示它不会修改对象的逻辑状态。Release 方法Release()方法减少引用计数,并在计数达到零时删除对象(表示这是最后一个引用)。它返回一个枚举值,表示释放操作后的状态。
2024-10-16 16:25:21
780
2
原创 WebRTC音频 03 - 实时通信框架
前面介绍了音频设备管理,并且以windows平台为例子,介绍了ADM相关的类,以及必须用到的重要API,本文我们分析下,在一个音视频呼叫过程中,音频是如何参与其中的,都有哪些成员参与其中。本文主要是介绍了音频各个模块在整个呼叫过程中所处的角色,以及何时创建(创建时机)、创建的什么样(类图);主要从总体分析,如果要具体到每个类,后续会根据业务场景再做分析,比如:采集过程中用到哪几个类,具体调用哪个函数等等,关注我,不迷路!
2024-10-15 00:30:19
577
原创 Android Binder通信 - bio_put_string16_x函数
这函数主要就是向binder_io结构体里面写入一个string16的字符串。
2024-10-13 17:49:47
729
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人