- 博客(81)
- 收藏
- 关注
原创 live555源码分析——client RTCP处理(RR报告构造详解)
本文详细分析live555客户端RTCP处理机制,重点探讨RR(Receiver Report)报告的构造过程。RTPSource负责收数据,RTCPInstance负责汇报接收质量,两者通过RTPReceptionStatsDB共享统计数据。包括SSRC、总丢包数、瞬时丢包率、最高序列号、抖动、LSR、DLSR等关键字段的计算方法。扩展序列号解决16位序列号回绕问题抖动计算采用RFC 3550标准的一阶增益滤波器LSR/DLSR配合实现RTT测量。
2026-05-31 21:30:00
759
原创 live555源码分析——client流程分析3(RTP over TCP/UDP)
本文是对博客live555源码分析的补充,重点探讨客户端流程中的关键问题。
2026-05-31 20:00:00
453
1
原创 live555--搭建RTSP服务器
职责分离:数据采集、编码、推送各司其职易于扩展:更换摄像头只需修改,更换编码器只需修改复用性强可以被不同的上层应用复用。
2026-05-30 20:30:00
461
原创 live555源码分析--client流程分析2
本文深入分析 live555 客户端的核心源码,包括关键类的作用、回调函数的执行流程,以及实际项目中遇到的问题与解决方案。
2026-05-29 22:30:00
403
原创 live555基础入门
Live555 的架构设计非常清晰,采用分层设计思想,各层职责分明。在 Live555 的异步事件驱动模型中,负责管理所有事件。理解这些事件类型是掌握 Live555 运行机制的关键。从代码实现和逻辑分类来看,事件主要分为以下三类和中的类都是用于整个系统的基础功能类。代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误,就需要保存的指针。则提供了任务调度功能。整个程序的运行发动机就是它,它调度任务,执行任务(任务就是一个函数)。由于在全局中只有一个,所以保存在了中。
2026-05-28 21:15:00
423
原创 消息队列实战:RabbitMQ与ZeroMQ
ZeroMQ(也称ZMQ、0MQ)是一个高性能的异步消息库,旨在用于可扩展的分布式或并发应用程序。它提供了一个消息队列,但与面向消息的中间件不同,ZeroMQ可以在无需专用消息代理的情况下运行。RabbitMQ和ZeroMQ各有优势,RabbitMQ适合需要高可靠性和丰富功能的企业级场景,ZeroMQ适合追求高性能的轻量级场景。在实际应用中,需要根据业务需求、性能要求和团队能力来选择合适的技术。
2026-04-29 22:15:00
864
原创 gRPC实战指南:高性能微服务通信框架
基于IDL(接口定义语言,Interface Define Language)文件定义服务,通过proto3工具生成指定语言的数据结构、服务端接口以及客户端Stub。gRPC是一个高性能的RPC框架,适合微服务、实时通信和多语言混合开发场景。其基于HTTP/2和Protobuf的设计使其具有低延迟、高吞吐量的特点。在选择是否使用gRPC时,需要考虑浏览器支持、广播通信等场景的限制。
2026-04-28 21:00:00
453
原创 UML统一建模语言指南
UML(Unified Modeling Language,统一建模语言)是一种基于面向对象的可视化建模语言。📊 采用一组形象化的图形符号(如类图)作为建模语言🎯 使用这些符号可以形象地描述系统的各个方面🔗 通过建立图形之间的各种关系(如类与类之间的关系)来描述模型用例图(Use Case Diagram)也称为用户模型图,是从软件需求分析到最终实现的第一步,它是从客户的角度来描述系统功能。类图(Class Diagram)描述系统中类的结构和类之间的关系,是最常用的UML图。
2026-04-27 21:15:00
498
原创 设计模式基础与SOLID原则
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。在特定环境下解决软件设计中某类通用问题的方案。它不是可以直接复制粘贴的代码,而是一种解决问题的思路和方法论。设计模式是软件开发的智慧结晶,SOLID原则是面向对象设计的指导思想。📈 提高代码质量和可维护性🔄 增强代码的可扩展性和灵活性🤝 提升团队协作效率🎯 培养良好的设计思维记住。
2026-04-26 10:00:00
409
原创 创建型设计模式详解(单例与工厂)
定义:一个单例类只创建自己的唯一实例对象,有且只有一个,这个单例类提供了一种访问其唯一实例的对象的方式,直接访问,不需要实例化该类的对象。作用:在整个程序空间中,该类只存在一个实例对象。适用场景创建的一个对象需要消耗的资源过多,比如I/O与数据库的连接需要全局访问的对象,如配置管理器需要控制实例数量的场景典型应用实例应用场景说明📱 设备序列号每部苹果手机都有自己的唯一序列号,专门用来产生序号的类应该设计为单例模式🔧 管理器类一些manager类,比如管理进程运行的类🏫 学校管理。
2026-04-25 10:47:42
418
原创 C++反射机制深度解析
反射(Reflection)是一种在程序运行时检查、访问和修改对象状态和行为的机制。拥有反射特性的语言可以在运行时获取类的信息、调用类的方法、创建类的实例。Class<?但C++作为编译型语言,不提供原生的反射机制。然而,在某些场景下,我们确实需要类似的功能。组件作用单例工厂全局管理类名与创建函数的映射注册器类封装注册逻辑,简化使用全局对象在main()之前自动执行注册反射的价值📦 解耦框架代码与业务代码🔌 支持插件化架构🎯 实现配置驱动开发💡记住。
2026-04-24 21:00:00
434
原创 行为型设计模式
核心思想:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的改变。观察者模式(Observer Pattern)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。角色说明角色说明Subject(主题/被观察者)维护观察者列表,状态变化时通知所有观察者Observer(观察者)定义更新接口,收到通知时执行相应操作ConcreteSubject(具体主题)存储具体状态,状态改变时触发通知。
2026-04-23 08:18:03
287
原创 YOLOv8目标检测实战详解
人工智能、深度学习是当前技术发展的重要趋势。数据准备 → 模型构建 → 模型部署💡定位建议了解模型的输入与输出能够使用各种推理框架进行模型转换与推理具备快速适配各硬件平台的能力掌握流媒体、视频编解码、图像处理等技术能够快速写出稳定、高性能的C++代码✅输入格式:NCHW格式的640×640 RGB图像✅输出格式张量,包含边界框和类别置信度✅前处理:缩放 → BGR转RGB → 归一化 → HWC转CHW✅后处理:转置 → 解码筛选 → NMS去重✅Pose版本。
2026-04-22 21:00:00
901
原创 深度学习模型部署实战指南
权重是神经网络训练过程中不断调优得到的数据,搭配各种神经网络的算子,可以实现检测、分类、识别等任务。简单来说,权重就是一堆经过训练优化的数值参数。深度学习算法由一个个计算单元组成,我们称这些计算单元为算子(Operator,简称OP)。算子的三个要素:算子的名称:标识网络中的某个算子,同一网络中算子的名称需要保持唯一算子的类型:网络中每个算子根据算子类型进行实现逻辑的匹配算子计算数据的容器:即张量(Tensor),包括输入张量和输出张量。
2026-04-21 21:15:00
396
原创 目标跟踪算法DeepSort实战
目标跟踪(Object Tracking)是计算机视觉领域的核心技术之一,其目标是在视频序列中持续定位和追踪特定目标的位置。任务目标检测目标跟踪输入单张图像视频序列输出目标位置和类别目标轨迹和ID关键能力识别图像中的物体保持目标身份一致性DeepSort(Deep Learning + SORT)是对经典SORT算法的改进,通过引入深度学习特征来解决遮挡和身份切换问题。使用卡尔曼滤波预测目标位置使用匈牙利算法进行数据关联使用深度外观特征区分相似目标✅DeepSort原理。
2026-04-20 21:00:00
990
原创 树结构详解与应用
树是n(n≥0)个节点的有限集合。当n=0时,称为空树。有且仅有一个特定的称为**根(Root)**的节点当n>1时,其余节点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,称为根的子树(SubTree)二叉树是每个节点最多有两棵子树的树结构。二叉树的子树有左右之分,其次序不能颠倒。重要特性第i层上最多有 2^(i-1) 个节点深度为k的二叉树最多有 2^k - 1 个节点对于任何一棵二叉树,叶子节点数 n₀ = 度为2的节点数 n₂ + 1存储结构优点缺点适用场景。
2026-04-19 22:15:00
393
原创 栈与队列实战指南
栈是一种只能在一端进行插入或删除操作的线性表(说明栈还是线性表结构,只是操作受限而已)。其中允许进行插入或删除操作的一端称为栈顶,另一端称为栈底。栈的插入操作一般叫入栈(Push),删除操作叫出栈(Pop)。队列是一种先进先出(FIFO:First In First Out)的数据结构。数据结构特点时间复杂度典型应用顺序栈后进先出,数组实现入栈出栈O(1)函数调用、表达式求值链栈后进先出,链表实现入栈出栈O(1)动态增长的栈队列先进先出入队出队O(1)任务调度、消息队列。
2026-04-18 08:30:00
381
原创 排序算法大全
排序是将一组数据按照特定规则(如升序或降序)重新排列的过程。排序算法的目的是让数据变得有序,便于后续的查找和处理。| 算法 | 最好 | 平均 | 最坏 || 冒泡排序 | O(n) | O(n²) | O(n²) || 选择排序 | O(n²) | O(n²) | O(n²) || 插入排序 | O(n) | O(n²) | O(n²) || 希尔排序 | O(n) | O(n^1.3) | O(n²) || 归并排序 |O(n log n) |O(n log n) |O(n log n) |
2026-04-17 07:45:00
1102
原创 线性表详解:顺序与链式存储
线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。数据结构优点缺点适用场景顺序表随机访问快、存储密度高插入删除慢、需要预分配查询多、修改少单链表插入删除快、动态分配不能随机访问、额外指针空间修改多、查询少循环链表可从任意节点遍历全表实现稍复杂轮询调度双向链表双向遍历、删除简单空间开销大LRU缓存、浏览器历史。
2026-04-16 20:30:00
740
原创 堆与优先队列详解
堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作。一般的操作进行一次的时间复杂度在 O(1) ~ O(log n) 之间。优先队列是一种特殊的队列,元素的出队顺序不是按照入队顺序,而是按照优先级。操作普通队列优先队列入队O(1)O(log n)出队O(1)O(log n)查看队首O(1)O(1)
2026-04-15 07:47:19
400
原创 查找算法详解:二分查找
二分查找(Binary Search),也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。核心思想:每次将搜索区间减半,通过比较中间元素与目标值,决定继续在左半部分还是右半部分查找。// 返回 [left_bound, right_bound]二分查找类型搜索区间返回值适用场景基本二分索引或-1查找单个元素左边界左边界索引查找第一个等于target的右边界右边界索引查找最后一个等于target的二分查找的关键点✅明确搜索区间:闭区间还是左闭右开✅正确更新边界mid。
2026-04-14 21:45:00
416
原创 数据结构与算法基础
数据结构研究的是数据元素之间的关系。在计算机科学中,我们需要解决的问题不仅仅是存储数据,更重要的是如何组织数据,以便高效地进行操作。关系类型描述示例1:1一对一关系线性表、栈、队列1:N一对多关系树结构N:N多对多关系图结构算法是解决问题的有限步骤。有穷性:算法必须在有限步骤内结束确定性:每一步都有明确的含义输入:有零个或多个输入输出:有一个或多个输出可行性:每一步都是可执行的。
2026-04-13 07:55:37
598
原创 CUDA编程与API详解
CUDA(Compute Unified Device Architecture)是NVIDIA推出的并行计算平台和编程模型,让开发者能够使用NVIDIA GPU进行通用计算(GPGPU)。Context类似进程,是GPU资源的容器Stream是任务队列,实现操作并行Event是同步工具,用于计时和协调Driver API提供底层精细控制,提供高级便捷封装选择合适的API和编程模式,结合实际场景优化,才能充分发挥GPU的并行计算能力。
2026-04-12 14:45:00
528
原创 Makefile编写
Makefile是一个描述文件依赖关系和构建规则的文本文件。哪些文件需要编译哪些文件需要重新编译如何编译和链接生成目标# 定义变量CC = gcc# 使用变量%.o: %.c变量类型递归展开(推荐):=简单展开?条件赋值(未定义时才赋值)+=追加赋值变量默认值说明CCccC编译器CXXg++C++编译器CFLAGSC编译选项CXXFLAGSC++编译选项LDFLAGS链接选项ARar静态库生成工具CC = gcc%.o: %.c。
2026-04-10 07:27:56
445
原创 Linux多进程编程
独立的地址空间系统资源分配的基本单位动态的、有生命周期的进程与程序的区别特性程序进程本质静态代码动态执行资源不占用占用CPU、内存生命周期永久临时。
2026-04-09 07:48:56
368
原创 Linux IO操作
文件描述符(File Descriptor)是一个非负整数,用于标识打开的文件、管道、套接字等。标准文件描述符值名称说明0标准输入1标准输出2标准错误。
2026-04-08 21:30:00
228
原创 GDB调试工具
定义快捷命令endend基本操作变量检查栈管理高级功能:多线程、core分析调试技巧善用条件断点使用watch监视变量配合core文件定位崩溃多线程调试使用scheduler-locking。
2026-04-07 20:45:00
225
原创 Linux ioctl系统调用实战
ioctl是一个通用的设备控制接口,允许用户程序与设备驱动程序通信。它提供了一种执行设备特定操作的机制。参数fd:文件描述符(通常是设备文件)request:请求码,表示要执行的操作…:可选参数,通常是数据指针返回值成功:返回非负值(取决于具体请求)失败:返回-1,设置errno统一接口:一个系统调用处理多种操作网络配置:IP、MAC、子网掩码等串口编程:波特率、数据位、校验位设备控制:各种硬件设备的配置使用要点正确处理返回值和错误了解具体设备的请求码。
2026-04-07 07:59:25
400
原创 进程间通信IPC
进程拥有独立的地址空间,一个进程无法直接访问另一个进程的变量。共享数据协调执行传递消息因此操作系统提供了IPC机制。IPC类型传输速度适用场景复杂度管道中等简单数据流低FIFO中等无亲缘关系进程低消息队列中等格式化数据中共享内存最快大量数据共享高信号量同步互斥中Socket较慢跨机器通信高管道:最简单,适合父子进程FIFO:命名管道,适合无亲缘进程共享内存:最快,需要同步机制消息队列:格式化消息,灵活信号量:同步工具,配合其他IPC使用。
2026-04-06 17:00:00
364
原创 Linux信号机制
异步性:信号可以在任何时刻到达简单性:只传递信号编号,不传递数据软件中断:类似硬件中断,但由软件实现类比:信号就像是进程的"门铃",当有人按下门铃(发送信号),进程会暂停当前工作来应答(处理信号)。可重入函数是指可以被多个线程或信号处理函数安全调用的函数。当进程执行到某个函数时收到信号,信号处理函数中又调用了该函数,如果两次调用结果正确,则该函数是可重入的。信号本质:异步通信机制,软件中断信号来源:键盘、系统调用、定时器、硬件异常等处理方式:默认、忽略、捕获核心API。
2026-04-06 07:45:00
428
原创 Linux epoll高并发网络编程
epoll是Linux高并发网络编程的核心技术。原理:红黑树、就绪链表、回调机制API模式:LT模式和ET模式的区别与使用实践:完整服务器示例、最佳实践优化:性能调优技巧select/poll:适合连接数少、活跃连接比例高的场景epoll:适合连接数多、活跃连接比例低的场景。
2026-04-05 11:00:00
345
原创 Linux多线程编程完全指南
线程是进程内部的执行单元,是CPU调度的基本单位。独立的执行栈和寄存器状态线程局部存储(Thread Local Storage)调度优先级和策略代码段、数据段、堆内存文件描述符、信号处理当前工作目录、用户ID等死锁是指两个或多个线程互相等待对方释放资源,导致所有线程都无法继续执行。线程基础:理解进程与线程的关系,掌握创建、等待、退出操作线程安全:识别竞态条件,使用同步机制保护共享资源互斥锁:最常用的同步机制,保护临界区死锁预防:固定加锁顺序,使用trylock读写锁。
2026-04-05 07:30:00
425
原创 CMake构建系统入门
CMake(Cross-platform Make)是一个开源的跨平台构建系统生成器。平台生成的构建文件Linux/UnixMakefileWindowsVisual Studio项目文件(.sln)macOSXcode项目跨平台Ninja文件# 基本形式# 指定版本# 指定语言# 指定描述和主页# 添加编译宏定义PRIVATEPUBLIC# 等价于编译选项 -DDEBUG_MODE=1 -DPROJECT_NAME="MyApp"endif()使用。
2026-04-05 06:31:47
419
原创 C语言调用Shell的几种方法详解
方法简易度功能效率安全性适用场景system()★★★★★基础低低简单命令执行popen()★★★★中等中中需要获取输出fork+exec★★强大高高高性能、高安全要求system():最简单,适合快速执行简单命令popen():可以获取输出,适合需要读取结果的场景fork+exec:最灵活,性能最好,适合生产环境原型开发选system()需要输出选popen()生产环境选fork+exec始终注意安全性,防止命令注入。
2026-04-04 19:45:00
343
原创 Linux时间函数
在现代操作系统中,时间有着举足轻重的地位。无论是日志记录、性能测试、定时任务还是多媒体同步,都离不开精确的时间管理。Linux系统提供了丰富的时间相关API,本文将全面解析Linux时间编程的核心概念和实践技巧。
2026-04-04 08:00:00
410
原创 Linux系统常用命令
链接是指向文件的引用,分为软链接(符号链接)和硬链接两种。blkid用于查看块设备的UUID、Label、挂载、文件系统类型等信息。需要先安装e2fsprogs。
2026-04-03 21:15:00
390
原创 Linux开发环境搭建指南
本文介绍在Linux(CentOS/Ubuntu)上搭建C/C++开发环境的完整流程,包括编译器、构建工具、Docker等常用开发工具的安装。
2026-04-03 07:21:35
228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅