- 博客(225)
- 资源 (31)
- 收藏
- 关注
原创 I/O多路复用机制的区别(select, poll, epoll)
每次调用时,都需要将完整的fd集合从用户态拷贝到内核态。最后再将整个集合(或标记了就绪状态的集合)拷贝回用户态,用户程序还需要再次遍历以找出真正就绪的fd。epoll主要通过其独特的设计机制来显著减少数据拷贝的开销,其核心在于将频繁的、全量的数据拷贝转变为一次性的注册和高效的事件通知。所有被监视的fd,而只需检查就绪链表是否为空。这个回调函数,该函数将对应的fd加入到就绪链表中。,应用程序可以直接处理,无需再遍历所有监控的fd来判断哪些真正就绪。系统调用,将需要监控的文件描述符(fd)及其关注的事件。
2025-12-15 11:26:36
636
原创 log4cplus实现网络日志发送、存储(组播地址发送接收)
log4cplus自2.0.0版本以及支持了udp模式,但是在我的嵌入式设备无法交叉编译,因此在1.2.1版本加入udp支持。 是一个仿照 log4j 用 C++ 实现的强大、灵活、可配置的日志库。,它负责将日志事件序列化并通过网络发送到远端的日志服务器。要实现网络日志,核心就是使用或自定义一个 。
2025-11-20 13:46:20
161
原创 emmc使用寿命预估
eMMC 的寿命主要受限于其 NAND Flash 存储单元的编程/擦除(P/E)循环次数。一个存储单元存储的 bit 数越多,其寿命和性能通常越低。NAND 类型全称说明典型擦写寿命 (P/E 次数)SLC一个存储单元存储 1 bit 数据,性能高,寿命长。MLC一个存储单元存储 2 bit 数据,性能与寿命适中。TLC一个存储单元存储 3 bit 数据,成本低,寿命相对较短。QLC一个存储单元存储 4 bit 数据,容量密度高,寿命最短。性能比较。
2025-11-20 10:35:38
492
原创 rtsp中的base64
sprop-parameter-sets 包含了H.264解码所必需的序列参数集(SPS) 和图像参数集(PPS),它们以逗号分隔,并采用 Base64 编码。解码后,我们得到原始的字节序列:00 00 01aO48gA==。
2025-11-19 09:47:30
279
原创 log4cplus实现网络日志发送、存储
是一个仿照 log4j 用 C++ 实现的强大、灵活、可配置的日志库。要实现网络日志,核心就是使用或自定义一个 ,它负责将日志事件序列化并通过网络发送到远端的日志服务器。。
2025-11-14 10:35:14
242
原创 从中国高铁(CRH)为什么没有4型车说起
正是这种“双巨头”你追我赶的态势,极大地激发了两大集团消化吸收国外技术并加速自主创新的紧迫感,为日后CRH380系列乃至完全自主知识产权的“复兴号”的诞生埋下了伏笔。当时中国轨道交通装备制造业的两大巨头——中国南车和中国北车(2015年合并为中国中车),被塑造成了相互竞争的“国家队”。决策者的最高明之处在于,。所以,“CRH4”这个编号概念,最终以更高级的“CRH400”形式,体现在了下一代高速列车的研发试验环节。这个文化因素就是,数字“4”的发音与“死”非常相近,因此它被认为是一个不吉利的数字。
2025-11-12 19:55:45
324
原创 zlmediakit nginx srs 做为流媒体服务器的区别
首先,我们需要明确这三者的“出身”和核心定位,这决定了它们的设计哲学和适用场景。ZLMediaKit出身: 由国内开发者(ZeroLogic)主导开发,采用 C++11 编写。核心定位: 高性能、高可靠性、跨平台的流媒体服务框架。它从一开始就致力于支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181等),并特别注重作为安防监控、物联网(IoT) 等场景的媒体网关或服务器。它的设计非常模块化,代码质量高。关键词:。
2025-11-12 15:59:40
592
原创 RTMP、HTTP-FLV、HLS 的主要区别是什么
从协议设计的理论层面讲,RTMP 和 HTTP-FLV 的流式传输模式决定了它们的延迟应该在同一个量级(1-3秒)。但在实际应用中,HTTP-FLV 通常能做到比 RTMP 更低、更稳定的延迟,主要原因有三点:”连接建立效率:HTTP-FLV 基于 HTTP,一次简单的握手即可开始传输数据;而 RTMP 需要三次握手,在网络差时重连慢,增加了初始延迟。网络环境友好性:HTTP 是标准协议,穿透防火墙和代理的能力极强,不会被错误拦截或限制,保证了传输的稳定性。。
2025-11-12 15:56:20
657
原创 地铁车辆架修、大修的区别
简单来说,架修是“重点治疗”,针对车辆最核心、最关键的磨损系统进行深度保养;而大修是“全身大手术”,旨在将车辆整体性能恢复到接近新车的状态,是周期最长、范围最广、程度最深、成本最高的一种维修模式。两者共同构成了地铁车辆全寿命周期管理中的重要环节,是确保地铁运营安全、可靠、高效的关键。
2025-11-12 15:49:32
907
原创 为什么从rtsp拉取的媒体流,每个流的rtp时间戳都不是从0开始的
摄像头 A 随机到 0x3c5a1234,摄像头 B 随机到 0x9f00abcd,即使它们同一时刻出帧,RTP 时间戳也不同,接收端靠 RTCP SR 各自映射到 NTP 即可,不会把两路流当成同一条。只要拿到每个流的 SR,就可以把任意一个 RTP 时间戳换算成绝对时钟(NTP)时间,然后再把不同流的数据对齐到同一个时间轴,后面再按解码/渲染时钟做平滑播放即可。两条流都这样做,相当于强行把 b 设为 0,误差就被压缩到“第一帧到达时间差”以内(通常 0–50 ms)。
2025-11-12 13:56:33
758
原创 opencv4实现磨皮美颜,并结合ffmpeg直播推流
在OpenCV4中实现实时的磨皮美颜并推流到直播服务器。流程图如下:fill:#333;color:#333;color:#333;fill:none;摄像头视频捕获美颜处理管线人脸与皮肤检测磨皮与美白细节增强与融合处理后的帧编码与推流FFmpeg子进程RTMP服务器观众端播放。
2025-10-25 16:39:43
952
原创 用ngix搭建rtmp流媒体服务器
安装编译依赖首先,确保你的系统(如CentOS或Ubuntu)已安装必要的编译工具和库。这些是编译Nginx及其RTMP模块的基础 。获取源码需要下载Nginx源代码和模块的源码 。编译安装Nginx进入Nginx源码目录,在配置阶段添加RTMP模块,然后进行编译和安装 。默认安装路径通常是 。安装完成后,需要编辑Nginx的配置文件(通常为 ),在其中添加RTMP相关的配置。基础RTMP配置在文件的根部,与已有的块平级,添加配置块,定义一个基础的直播应用 。可
2025-10-25 16:25:25
715
原创 printf是怎么将字符显示到屏幕的
函数本身并不关心字符编码,它处理的是字节。要正确显示非ASCII字符(如中文),需要确保程序内部处理的字符编码与最终终端模拟器所使用的字符编码(如UTF-8)保持一致,否则就会出现乱码。printf 函数将字符显示到屏幕是一个涉及多层级协作的过程,它并非直接与硬件交互,而是依赖于标准库、操作系统和硬件驱动的协同工作。:缓冲机制是为了减少频繁调用底层系统函数的开销,从而提升I/O效率。语句,在程序运行中途可能看不到立即输出的原因。时缓冲区内容才会被刷新并显示。这也是为什么有时不包含。来强制立即刷新输出。
2025-10-16 15:08:28
263
原创 从ls命令说起:深入理解Linux文件访问机制
在Linux系统中,ls命令是我们最常使用的命令之一。输入ls,屏幕上就会显示出当前目录下的文件和子目录名称。这看似简单的操作背后,却隐藏着一段精妙的系统交互过程。当我们在终端输入ls并按下回车时,系统会进行以下操作:首先读取当前目录的目录项,获取所有文件和子目录的inode号;然后根据inode号,读取每个文件或目录的inode,获取其元数据;最后将获取的文件名和inode信息格式化并输出到终端。这个过程涉及文件系统、内存管理、设备驱动等多个子系统的协同工作。
2025-10-11 11:43:49
312
原创 地铁列车清客遗留物检测系统
在列车每日运营结束、抵达线路终点站(末站)后,该系统被用以替代传统的人工检查,自动化快速完成。系统自动化的快速识别与报警机制,大大缩短了从发现到处置的响应时间,为公共安全提供了强有力的技术支撑。,辅助工作人员快速查找,显著提高失物招领的效率,从而提升乘客的满意度和乘车体验。一旦发现可疑静止物品,系统可立即触发告警,通知列车工作人员前往查看,从而实现。,确保列车在回库前无任何乘客或物品被遗漏,保障运营安全并提升交接效率。,避免物品最终被遗留在终点站,提升乘客服务质量。判定是否为已知遗留物?
2025-09-30 13:14:09
1017
原创 内存管理三原则
遵循这三条内存管理原则,可以显著提高C++代码的质量和安全性。记住:能用栈就别用堆,必须用堆就用智能指针,裸指针应该成为历史遗迹。让这些原则成为你代码审查中的红线,团队开发会更加高效和安全。栈内存分配速度快,由编译器自动管理生命周期,完全避免了内存泄漏的风险。当变量超出作用域时,栈内存会自动释放。:独占所有权,不可复制但可移动。:不增加引用计数的观察者指针。:共享所有权,引用计数。使用标准容器管理对象集合。使用智能指针管理所有权。
2025-09-30 10:26:58
261
原创 使用 libssh2 建立安全的 SSH 连接
把本文代码片段复制到项目里,改 IP、用户名、密钥路径即可跑通第一条安全 SSH 连接!3.3 TCP 连接(POSIX 示例)五、非阻塞模式要点(高并发/单线程)1.2 为什么选 libssh2。三、建立 SSH 连接(阻塞版)VS2015+ 自带;所有可能阻塞的函数都会先返回。3.6 完整示例(单文件版)六、Windows 专属注意。1.1 为什么选 SSH。四、文件传输(SFTP)3.4 握手 & 认证。
2025-09-29 16:40:46
408
原创 解决PyTorch模型加载时的设备不匹配错误
在Easy-Wav2Lip项目中,我遇到了典型的设备不匹配问题。它表明模型权重(weight)和输入数据(input)不在同一个设备上,一个在CPU,另一个在GPU。
2025-09-29 00:26:15
311
原创 你敢说精通C++吗?移动语义与完美转发
实现一个泛型函数forward_to_emplace,将参数完美转发给容器的emplace_back方法,并解释为什么需要std::forward而非std::move?。
2025-09-19 09:04:57
353
原创 问题:解释std::atomic<int>与volatile int在多线程环境下的本质区别,并说明为什么volatile不能用于线程安全的原子操作?
解释std::atomic与volatile int在多线程环境下的本质区别,并说明为什么volatile不能用于线程安全的原子操作?std::atomic提供真正的原子性(硬件级保证,如CAS指令)和内存顺序控制(如memory_order_relaxed)。volatile仅防止编译器优化(强制读写内存),但不保证原子性(可能被线程切换打断)或内存屏障(CPU重排序可能导致问题)。示例:volatile int i=0;i++;可能被编译为多条指令(非原子),而std::atomic i;
2025-09-18 17:18:00
560
原创 FFmpeg网络拉流阻塞问题与可靠超时处理方案
FFmpeg的网络拉流功能强大但易受网络环境影响。通过合理利用其中断回调机制,并结合单调时钟进行时间判断,可以有效地解决函数阻塞问题,并构建出健壮、可靠的流媒体应用。关键实践要点:• 优先使用中断回调:相比于协议特定的超时参数,中断回调提供更统一和可控的超时控制机制。• 依赖单调时钟:使用 av_gettime_relative() 来测量超时间隔,避免系统校时导致意外触发。• 设置合理的超时时间:根据网络环境和应用需求,为连接阶段和读取阶段设置不同的超时阈值。
2025-09-18 10:27:44
1246
原创 秒记 - ping常见故障
记忆键:“出门无回” → 网络可达,但回程被扔(丢包、过滤、往返路径不一致)。记忆键:“出门即被退” → 路由表/网关/子网配错,还没上路就回绝。记忆键:“门都没出就崩” → 本机系统/硬件故障,与网络无关。把“出门”当成临界点,三段故事顺下来,终身不忘。
2025-09-11 21:43:03
222
原创 如何实时监控内核产生的新消息
这个命令会每1秒刷新一次,显示最新的20行内核消息。不同发行版的日志文件位置可能不同,也可以通过。许多Linux发行版会将内核消息记录到。持续监控并显示新的内核消息,类似。文件中,可以直接监控这个文件。表示只显示内核消息,表示实时跟踪新消息。
2025-09-11 09:06:04
180
MAX7219/MAX7221
2009-03-15
光耦应用全面介绍,绝对经典
2009-06-29
Linux嵌入式系统设计与开发
2013-02-02
C++工程实践.pdf
2020-12-04
1-城市轨道交通视频监视系统应用实施指南(发布稿).pdf
2020-12-04
英文单词数据库.db
2020-12-07
5-城市轨道交通广播系统应用实施指南(发布稿).pdf
2020-12-04
2-城市轨道交通视频监视系统检测实施指南(发布稿).pdf
2020-12-04
《牛津英汉词典》txt格式
2020-12-07
Linux编程白皮书
2019-01-05
UNIX环境高级编程(中文版)
2013-02-02
OrCAD培训教材-pdf格式
2009-06-29
Linux_C编程一站式学习_最新版
2013-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅