- 博客(1206)
- 资源 (52)
- 收藏
- 关注

原创 老程序员解Bug的通用套路
程序员在很多人的印象里是一份严(ku)谨(bi)的职业,也是一个被搞怪吐槽乐此不疲的职业,程序员们面对复杂的代码敲打电脑时连眉头都不会皱一下,但是有一个词却是他们痛苦的根源,它就是Bug。 记得刚毕业入行时,我们老大派给我和另外一个新来同事的第一件事就是修Bug,要不是在学校敲过几年代码,还真不知道如何下手!和我一起进公司的另外一个同事完全就是以“看戏者”的身份,看我搞了...
2018-06-06 09:25:29
12468
25

原创 C++17新属性详解
C++17的入选特性有:(1).非类型模板参数的 auto 模板参数分为两种,一种是类型模板参数,也是我们用得最多的一种:template <typename T, typename U>auto add(T t, U u) { return t+u;} 里面的 T 和 U 都是类型模板参数。另一种是非类型模板参数,它可以让不同的字面量成为模板的参数:te...
2018-05-27 21:59:38
54557
5

原创 C++大牛的博客
1. C++大牛的博客 Bjarne Stroustrup的博客: Bjarne Stroustrup’s HomepageBjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样
2018-01-21 21:37:00
6078
1

原创 C++模板详解
一.C++模板的定义: 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。模板是一种对类型进行参数化的工具;二.使用模板的目的: 能够使得程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些
2017-05-31 21:19:42
2502
1

原创 Qt的常用布局使用详解
Qt布局详解: 界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置。那么做出来的界面才看起来美观。那么如何对界面进行布局呢?Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout,QStackLayout。(布局管理类)这些类简单易用,无论在代码中还是用Qt Design
2016-09-30 09:06:16
5783
1

原创 优秀程序设计的18大原则
优秀程序设计的18大原则1、避免重复原则(DRY - Don’t repeat yourself)编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就很容易形成一个抽象体。2、抽象原则(Abstraction Principle)与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。
2016-07-11 17:07:57
6359
原创 GB35114和GB/T 28181协议详解
一、协议定义与背景1.1、GB/T 28181-2016 全称:《公共安全视频监控联网系统信息传输、交换、控制技术要求》 定位:中国安防行业标准,规范视频监控系统互联互通协议。 核心目标:解决不同厂商设备/平台的互操作性问题,定义设备注册、实时流传输、设备控
2025-06-29 23:16:39
1016
原创 银河麒麟系统安装指南
银河麒麟操作系统的开发背景是中国政府推动软件自主可控,减少对外国技术的依赖。这一战略的一部分是开发和使用本土化的软件产品,其中操作系统是核心组件。银河麒麟就是在这样的背景下应运而生。
2025-06-21 22:51:26
2510
原创 NACK机制在音视频直播丢包重传中的应用与优化
NACK机制作为实时音视频传输中丢包恢复的核心技术,在保障媒体质量方面发挥着不可替代的作用。通过深入理解其工作原理、精心设计实现细节并结合具体应用场景进行优化,可以显著提升直播系统的抗丢包能力和用户体验。
2025-06-21 22:45:11
635
原创 Elecard StreamEye Tools使用详解
Elecard StreamEye Tools是一款专业视频流分析工具套件,提供全面的视频编码、传输和播放质量分析功能。该工具集包含StreamEye核心分析模块以及StreamAnalyzer、BufferAnalyzer等专业组件,支持流结构分析、视频质量评估、缓冲区行为检测和音视频同步分析等功能。安装要求Windows系统,配备许可证后可实现完整功能。通过实际案例分析展示了其在解决视频卡顿、音视频不同步等常见问题中的应用,是视频工程师进行编码优化和质量检测的得力工具。
2025-06-21 21:56:54
1150
原创 几种主流开源流媒体服务器项目分析对比
本文对比了四大开源流媒体服务器:SRS、ZLMediaKit、Janus和mediasoup。SRS适合快速搭建直播系统,支持多协议但WebRTC功能较新;ZLMediaKit擅长协议转换,在安防监控领域表现突出;Janus提供灵活插件机制,适合小型会议场景;mediasoup专精WebRTC,适合大规模实时互动应用。选型建议:直播选SRS或ZLMediaKit,实时互动用mediasoup,定制化需求可选Janus或mediasoup,安防领域优选ZLMediaKit。
2025-06-21 21:56:45
111
原创 YUV各种格式的像素占用内存大小计算
在视频处理、图像处理和计算机视觉领域,YUV是一种常用的颜色编码系统。与RGB格式不同,YUV将亮度信息(Y)与色度信息(UV)分离存储,这种特性使其在视频压缩和传输中具有优势。不同的YUV格式在内存占用和图像质量之间提供了不同的权衡方案。下面我们将详细分析各种YUV格式的内存占用计算方法。
2025-06-21 21:56:34
1059
原创 ONVIF协议详解
在当今的安防监控领域,设备品牌林立、技术栈各异已成为常态。想象一下:当你需要整合不同品牌的摄像头、NVR和视频管理平台时,却发现它们根本"无法对话"——这种兼容性噩梦正是ONVIF协议要解决的核心问题。
2025-05-31 22:56:14
1342
原创 创业者走好第一步:域名、商标、专利一个也不能少!
在当今商业社会中,品牌的重要性不言而喻,然而,如果忽视了域名和商标的保护,品牌的安全就会受到严重威胁;缺乏著作和专利的积累,企业将无法在激烈的市场竞争中占据有利地位;而加强企业的知识产权(IP)管理,则能够极大地激发创业和创新的活力。因此,创业者在起步阶段,必须将域名、商标、著作专利视为不可或缺的三大要素。
2025-05-30 23:41:53
421
1
原创 FFmpeg多码率输出详解
本文介绍了基于FFmpeg的自适应码率流(ABS)实现方案,内容涵盖:1)流媒体传输挑战与HLS/DASH协议原理;2)FFmpeg单解码多编码架构设计,包括分辨率适配和时间戳同步;3)完整代码实现,涉及输入输出初始化、多路编码器配置及HLS/DASH格式生成;4)性能优化建议,如硬件加速编码、多线程处理和码率梯度配置。该方案能有效解决网络带宽波动导致的播放卡顿问题,适用于直播和点播场景,提供最佳用户体验。
2025-05-30 23:25:06
906
原创 C++ const使用详解
在主函数main()里,标识符gc的值在编译期间是不知道的,这也意味着需要存储空间,但是初始化要在定义点进行,而且一旦初始化,其值就不能改变,我们发现c2是由gc计算出来的,它的作用域与其他类型const的作用域是一样的,这是对#define用法的一种改进。如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。const同样运用于类中,但是它的意义又有所不同,我们可以创建const的数据成员,const的成员函数,甚至是const的对象,但是保持类的对象为const比较复杂,
2025-05-30 23:23:43
983
原创 音视频IPC技术
摘要:网络摄像机(IPC)作为现代安防核心组件,经历了数字化、编码优化和AI集成三次技术跃迁。当前主流设备已实现4K@60fps采集、140dB HDR和0.0001Lux低照度性能。系统采用异构计算架构,集成NPU、高端图像传感器和定制化Linux系统,支持智能编码、ROI技术及超分辨率重建。网络传输通过QUIC协议和自适应算法优化,时延降低300ms。嵌入式AI实现35FPS的YOLOv5推理,多模态分析准确率达99.2%。应用场景涵盖智慧城市和工业检测,未来6G、光子芯片和量子加密技术将推动IPC向更
2025-05-30 23:17:12
1209
原创 C++模板元编程深度解析
本文探讨了C++模板元编程的核心原理与应用。作为"编写程序的程序",元编程通过编译期计算实现性能优化,其核心机制包括类型参数化、模板特化和递归实例化。现代C++引入constexpr、概念约束等特性,简化了元编程实践,支持编译期分支和数据结构。高阶技巧如表达式模板可优化计算,而类型萃取则增强了类型安全性。相比动态语言的元编程,C++的静态特性在性能上具有优势,但也增加了调试难度。这些特性使C++模板元编程成为高性能计算领域的重要工具。
2025-05-25 23:58:49
373
原创 音视频IPC技术详解
音视频IPC技术通过5G、AI和WebRTC实现了低延迟、高画质的实时传输,广泛应用于视频会议、安防监控和直播领域。其核心技术包括动态分辨率调整、H.265编码优化、WebRTC传输协议及抗丢包策略,5G网络切片和边缘计算进一步提升了性能。典型案例如Zoom的分层编码和抖音的混合CDN架构,未来将向AI编码、全息通信和量子加密方向发展,推动音视频技术的智能化革新。
2025-05-25 23:10:23
597
原创 实时音频编解码中的长时预测(LTP)技术详解
在实时语音通信、在线会议等场景中,音频编解码技术需要同时满足高压缩率、低延迟和强鲁棒性的严苛要求。长时预测(Long-Term Prediction,LTP)作为时域预测编码的核心技术之一,通过挖掘语音信号的周期性特征,显著提升了编码效率。下面我们将深入解析LTP在实时音频编解码中的实现原理与关键技术点。
2025-04-30 22:00:58
1425
原创 typedef使用详解
在上述的变量定义中,s1、s2、s3都被定义为char *,而s4则定义成了char,不是我们所预期的指针变量,根本原因就在于#define只是简单的字符串替换而typedef则是为一个类型起新名字。当然,使用typedef就没有这样的问题。2) typedef的特别长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。经过查找,函数名就是一个指针,但是意义是不一样的,如同于数组a[],a和&a其实都是一样的。
2025-04-30 22:00:51
232
原创 频带扩展与线性预测编码
LPC是一种通过预测当前样本与之前样本之间的线性关系来进行语音信号建模的技术。其核心思想是:其中:x(n) 为当前语音样本,ak 为LPC系数,p 为预测阶数,e(n) 为预测误差,也称为激励信号。频带扩展在LPC中的应用极大地增强了滤波器的稳定性,改善了语音编码的效果。通过对LPC系数施加衰减因子,使得滤波器极点远离单位圆,从而避免了由于滤波器不稳定带来的杂音问题。频带扩展方法都可以有效提升语音处理系统的性能,增强系统的稳定性和鲁棒性。
2025-04-30 22:00:44
919
原创 Delta-Sigma ADC模数转换器
在当今的电子系统中,模数转换器(ADC)扮演着连接模拟世界与数字领域的关键角色。从智能手机的音频处理到医疗设备的生物电信号采集,ADC的性能直接决定了系统的精度和可靠性。在众多ADC架构中,Delta-Sigma(ΔΣ)型ADC凭借其独特的噪声整形技术和高分辨率特性,逐渐成为高精度应用的首选方案。Delta-Sigma技术在过去三十年中彻底改变了高精度数据采集领域的发展轨迹。随着5G通信、物联网和人工智能的爆发式增长,对ADC性能的要求将愈发严苛。
2025-04-14 00:12:32
1142
原创 Opus编码之多速率信号处理的深度解析
随着5G-A和6G技术的演进,多速率处理正在向超低时延方向突破。爱立信实验室展示的1ms端到端音频系统,采用毫米波频段的多速率波束成形技术,开启了无线音频传输的新纪 元。在量子声学、神经形态计算等前沿领域,多速率理论正在与生物听觉机制深度融合,预示着智能音频处理革命的到来。
2025-04-13 23:13:19
953
原创 C++中extern “C”深层探索
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。C引用C++函数例子工程中包含的三个文件的源代码如下://C++头文件 cppExample.h#endif。
2025-04-05 22:20:59
701
原创 C++静态成员小结
对于具有虚函数的类型来说,需要有一个方法为它的实体提供类型信息(RTTI)和虚函数入口,常见的方法是建立一个虚函数入口表,这个表可为相同类型的对象共享,因此对象中需要有一个指向虚函数表的指针,此外,为了支持RTTI,许多编译器都把该类型信息放在虚函数表中。基于上述两点,可以说用sizeof对类名操作,得到的结果是该类的对象在存储器中所占据的字节大小,由于静态成员变量不在对象中存储,因此这个结果等于各非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节。类中的静态成员真是个让人爱恨交加的特性。
2025-04-05 22:20:47
132
原创 BBR算法原理与实现深度解析
BBR算法通过重新定义拥塞控制的基本范式,为现代网络应用提供了突破性的解决方案。随着QUIC协议的普及和智能网卡技术的发展,BBR类算法将在边缘计算、云游戏、工业物联网等领域发挥更重要的作用。
2025-03-31 23:26:00
1647
原创 音频编解码器Opus详解
Opus是一款完全开放、免版税、功能多样的音频编解码器。它适用于互联网上的交互式语音和音乐传输,但也适用于存储和流媒体应用。Opus是由IETF(互联网工程任务组)标准化的开源音频编解码器(RFC 6716),由Xiph.Org基金会、微软、Mozilla等公司联合开发。它结合了Skype的SILK语音编码和Xiph的CELT音乐编码技术,支持从6kbps到510kbps的可变比特率,以及8kHz到48kHz的采样率范围。
2025-03-30 23:15:39
1706
原创 实时美颜直播SDK开发总结
实时美颜是一种通过算法对视频或图像中的人脸进行实时美化处理的技术,广泛应用于直播、短视频、视频通话等场景。其核心目标是在保证低延迟的前提下,对人脸皮肤、五官、轮廓等进行自然优化,同时保留细节和真实感。
2025-03-30 22:21:47
698
原创 从文本文件里读取信息,然后对里面的数据进行排序
要清楚"文件结束符"(0xff).就是说我们文件最后的字符不是文件结束符,而最后的字符的下一位才是.所以操作再读多一次.就为什么上面if (FILE.eof())总是false的. 在一些编译器中(dev c++),它读到最后一个字符后文件位置的指针会定在那儿,所以就会重复最后一个字符.主要的是把eof()改为peek() == EOF来判别,其中peek()是取文件当前指针,EOF是文件尾标符,它的值为-1.所以采用这种方法就解决上面eof()的问题了..这种方法也可以用在读写二进制文件中.
2025-03-23 21:45:17
1103
原创 递归算法详解
递归调用一种是解决方案,一种是逻辑思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……递归调用就是在当前的函数中呼叫当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。这个函数叫做fact,它自己调用自己,这个就是一个典型的递归调用,调用过程类似一个栈。
2025-03-23 20:59:55
1428
原创 判断检查链表是否有环
判断两个链表是否有环是C++中一个常见的问题。在正常情况下,链表的最后一个节点的指针指向nullptr,表示链表的结束。但如果链表中存在环,意味着链表中的某个节点的指针指向了链表中之前的某个节点,形成了一个循环结构。
2025-03-23 20:31:33
427
原创 判断两个链表是否相交
判断两个链表是否相交,指的是判断两个单链表是否存在至少一个公共节点。如果存在公共节点,那么从这个公共节点开始,两个链表后续的所有节点都是相同的,因为单链表的每个节点只有一个指向下一个节点的指针。如果遍历到链表末尾都没有找到相同的节点,则说明两个链表不相交。可以通过遍历两个链表,找到它们的长度,然后让较长的链表先走差值步,使得两个链表剩余的长度相同,再同时遍历两个链表,判断是否有相同的节点。如果两个链表相交,那么从相交节点开始,它们的后续节点是完全相同的。也就是说,相交节点及其之后的节点在内存中是共享的。
2025-03-23 20:19:03
692
原创 单向链表的反转
最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。初始化三个指针,分别为 prev(指向前一个节点,初始值为 nullptr)、curr(指向当前节点,初始值为链表头节点)和 next(指向下一个节点)。reverseList 函数:实现了链表的反转逻辑,通过遍历链表,改变每个节点的 next 指针指向。在这个过程中,需要记录当前节点、前一个节点和下一个节点,以避免在修改指针时丢失后续节点的信息。
2025-03-23 19:59:13
960
原创 C++堆和栈详解
优先使用栈:适合小数据、短生命周期、确定性内存需求。谨慎使用堆:适合动态、大数据、跨作用域共享的场景,但需注意释放和同步。个人建议大家通过智能指针(C++) 简化堆管理。
2025-02-25 23:36:40
1375
原创 C++实现经典的“快速排序(Quick Sort)”算法
快速排序是一种基于分治法的排序算法。它的基本思想是通过一个“基准元素”(pivot)将待排序数组分成两个子数组,其中一个子数组的元素全部小于基准元素,另一个子数组的元素全部大于基准元素,然后递归地对两个子数组进行排序。
2025-02-25 23:26:26
771
原创 C实现的单链表及其19种操作
单链表是一种线性数据结构,由一系列节点组成,这些节点按顺序链接。每个节点包含数据部分和一个指向下一个节点的指针。链表的第一个节点称为头节点 ,最后一个节点的指针指向空 ,表示链表的结束。以上代码完整实现了所有18种链表操作,并包含快速排序实现。使用时需要注意指针操作的正确性和内存管理。
2025-02-23 21:02:19
1093
原创 C++实现单链表及其19种操作
单链表是一种线性数据结构,由一系列节点组成,这些节点按顺序链接。每个节点包含数据部分和一个指向下一个节点的指针。链表的第一个节点称为头节点 ,最后一个节点的指针指向空 ,表示链表的结束。在C++语言中,可以使用结构体来定义节点:int data;} Node;//定义链表节点结构int data;Node* next;以上代码完整实现了所有18种链表操作,并包含快速排序实现。使用时需要注意指针操作的正确性和内存管理。
2025-02-23 21:00:35
487
原创 PTS、Timebase和视频编码器码率控制
开发者容易犯的一类错误是,设置Timebase = 1 / FPS,而PTS的数值又是按照毫秒或微秒得来的,即设置给编码器的Timebase,不是PTS真正的时间单位。两个是等效的,可以认为固定帧率时,用frame_num作为pts,用1/fps作为timebase。固定帧率的视频,以上两种码率控制结果相同。另一种码率自适应实现方式是设置VFR = true,需要调整码率时reconfig新的码率给编码器。一般而言,设置给编码器的VFR参数应该按照真实采集情况而定。对于固定帧率的视频,
2025-02-23 20:58:13
844
jQuery瀑布流经典布局源码
2016-01-28
Navicat安装指导及安装资源
2024-03-23
vncserver和vncviewer
2017-06-01
Hadoop技术全套图书
2016-03-21
大数据资料集锦
2016-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人