- 博客(54)
- 资源 (9)
- 收藏
- 关注
原创 在 rk3588上通过网络命名空间实现 eth0/eth1 网卡隔离与程序独立部署
本文介绍了如何在RK3588处理器上使用Linux网络命名空间技术实现双网卡隔离。通过创建两个独立网络命名空间(ns_eth0和ns_eth1),将物理网卡eth0和eth1分别移入其中,并配置各自的IP地址、路由和DNS。该方法能确保程序在指定命名空间中运行时只能使用对应网卡,实现网络流量隔离。文章详细说明了操作流程,包括命名空间创建、网卡迁移、网络配置验证等步骤,并提供了持久化配置方案,解决系统重启后配置失效的问题。该技术适用于工业控制、边缘计算等需要网络隔离的场景。
2025-11-08 15:15:12
1231
6
原创 使用V4L2工具验证RK3588平台视频设备节点数据有效性
本文详细介绍了在RK3588平台上验证/dev/video11视频设备节点数据有效性的方法。首先使用v4l2-ctl捕获100帧4K NV12格式视频流,通过检查文件大小(约1.16GB)确认数据输出正常。然后利用FFmpeg将原始数据转换为MP4格式,最终通过播放验证内容完整性。文中还提供了常见问题解决方案和进阶调试技巧,包括实时预览、性能监控等。该方法不仅适用于RK3588,对其他嵌入式Linux视频系统开发调试也具有参考价值。
2025-11-08 14:45:08
1476
原创 rk3588上用rk_mpi_vi_test与ffmpeg实战
摘要:本文详细介绍了在RK3588平台上验证视频输入设备(如摄像头/HDMI)的实用方法。通过瑞芯微工具rk_mpi_vi_test从/dev/video11捕获原始YUV数据(示例命令:./rk_mpi_vi_test -w 3840 -h 2160 -t 4 -n /dev/video11 -m 0 -l 100 -o 1),再使用ffmpeg将YUV转码为MP4格式(示例命令:ffmpeg -f rawvideo -pix_fmt nv12 -s 3840x2160 -r 60 -i /data/te
2025-11-08 14:33:15
1650
1
原创 交叉编译FFmpeg:从x264到RK3588部署实战
本文详细介绍了使用aarch64-none-linux-gnu工具链交叉编译FFmpeg并部署到RK3588 ARM64开发板的完整流程。内容包括环境准备、x264库编译、FFmpeg配置与编译、部署打包以及功能测试。重点解决了交叉编译中的路径配置、依赖管理等关键问题,并提供了RTSP流测试验证方法。文章最后提出了包括硬件编解码整合、静态编译等优化建议,为嵌入式开发者在RK3588平台上实现高性能多媒体处理提供了实用指南。
2025-10-23 21:07:05
1400
原创 音视频开发协议栈全景解析
本文全面解析音视频开发协议栈的分层架构与核心技术。从分层模型(应用层、媒体处理层、传输层等)到具体协议实现,详细对比了UDP/TCP/QUIC特性,深入剖析RTP/RTCP协议栈结构,并给出C++实现示例。同时介绍了QUIC协议在音视频传输中的优势及应用方式,以及主流信令协议(RTSP/SIP/WebSocket/MQTT)的对比分析。通过协议栈全景和具体技术细节的结合,为音视频开发者提供完整的架构视角和技术参考,帮助优化传输性能与实现创新应用。
2025-06-26 20:31:19
700
1
原创 Libevent 指南:构建高性能事件驱动应用
Libevent是一款高性能C语言事件驱动网络库,它封装了不同操作系统的I/O多路复用机制(如epoll、kqueue等),为开发者提供统一API。本文介绍了Libevent的核心概念(事件基座、事件、缓冲事件等)及其优势(单线程处理高并发、资源利用率高)。通过一个C++实现的Echo服务器示例,展示如何运用Libevent创建网络应用:包括安装配置、事件处理回调设置、连接管理等功能实现。该服务器能够高效处理客户端连接,实现数据原样返回功能,体现了Libevent简化网络编程、提升性能的特点。
2025-06-26 10:04:55
1046
原创 NanoLog:必备的高性能日志库指南
NanoLog是一款专为C++设计的高性能日志库,提供纳秒级延迟和百万级吞吐量。其核心优势包括零复制技术、延迟格式化和无堆内存分配。安装简单,只需包含头文件即可使用,支持多线程日志记录和灵活的级别管理。通过初始化配置可选择保证模式(不丢日志)或非保证模式(高吞吐),并支持多数据类型输出。典型应用场景包括服务器日志记录,通过无锁环形队列和缓存友好设计实现卓越性能。使用中需注意日志文件权限、编译模式选择等问题,内部采用CPU TSC寄存器优化时间戳记录。
2025-06-25 16:10:39
1327
原创 嵌入式通信协议全景阐述
本文系统梳理了主流嵌入式通信协议,分四类详细解析: 板级通信协议:UART、I²C、SPI,适用于电路板内设备互联。 工业现场总线:CAN、Modbus、PROFIBUS,专为工业环境设计。 网络协议:TCP/IP、MQTT、CoAP,实现远程连接和物联网应用。 无线协议:Wi-Fi、蓝牙、ZigBee、LoRa,满足不同无线场景需求。每种协议从核心特点、优势局限到典型应用全面剖析,并附速记口诀和选型建议,为嵌入式系统通信方案设计提供实用参考。
2025-06-25 13:41:26
1487
原创 深入理解UART通信:原理与C++实战应用(Linux)
本文介绍了Linux系统下C++实现UART串口通信的基本方法。主要内容包括:1) UART基础知识,解释异步通信协议、数据帧结构和波特率概念;2) Linux系统中串口设备的节点类型及其访问权限;3) C++编程步骤,详细说明如何通过termios结构体配置串口参数(波特率、数据位、校验位等);4) 提供一个完整的示例程序,演示如何打开串口设备、设置8N1参数(9600波特率、8数据位、无校验、1停止位)并进行数据读写操作。该指南为在Linux环境下开发串口通信应用提供了实用参考。
2025-06-24 10:07:45
1484
原创 C++项目的开源日志库的选择
本文对主流C++开源日志库进行结构化对比和场景化选型分析。核心维度对比显示,spdlog和NanoLog性能最优(>1M条/秒),EasyLogger最轻量,log4cplus适合企业级管理。文章从异步机制、资源占用、企业级能力等特性进行解析,并给出场景化选型矩阵:高频服务端首选spdlog,嵌入式推荐zlog,金融系统适用log4cplus。风险规避部分指出需避免同步库在高频场景使用,警惕兼容性和维护问题。最后提供五步决策树,建议根据崩溃诊断、资源限制、性能需求等关键指标选择合适方案。
2025-06-24 10:05:21
1430
原创 详解C++ 高性能日志库 spdlog
spdlog是一个高性能C++11日志库,提供极简API和丰富功能。主要特点包括:支持多线程安全、格式化灵活、异步日志(百万条/秒吞吐量)、多种输出目标(文件轮转、控制台、系统日志等)。安装简便,可通过包管理器或源码集成。核心功能涵盖日志级别管理、多记录器配置、自定义格式化、异步模式优化等。典型应用场景如同时输出控制台和文件日志,或构建高性能异步日志系统。其轻量级设计和活跃社区支持,使其成为C++项目日志管理的优选方案。
2025-06-23 16:27:01
1823
原创 全面了解 nlohmann/json:现代 C++ 的 JSON 处理利器
nlohmann/json 是一个功能强大且易用的C++ JSON库,以其极简API、零依赖和现代C++支持著称。核心优势包括直觉式语法(如链式访问)、强类型安全和高性能(速度比JsonCpp快2倍以上)。它支持多种安装方式(手动下载、包管理器、CMake),并提供丰富的功能
2025-06-23 15:28:40
3699
原创 CMake从入门到精通:构建C/C++项目的终极指南
CMake 是一个跨平台构建工具,用于简化 C/C++ 项目的构建过程。它通过 CMakeLists.txt 配置文件管理项目,支持多种操作系统和编译器。相比手动编写 Makefile,CMake 具有跨平台、语法简洁、扩展性强等优势。安装方法包括 Windows 下载安装包、Linux 使用包管理器和 macOS 使用 Homebrew。核心概念包括工程结构分离、CMakeLists.txt 配置文件和构建类型设置。基础语法涵盖变量定义、常用指令(如 include_directories 和 targe
2025-06-05 09:36:38
1641
原创 C++ 虚函数:深入理解多态的核心机制
虚函数是在基类中声明,并且能在派生类里被重写(override)的成员函数。它允许利用基类指针或引用调用派生类的函数,从而实现运行时多态(Run - time Polymorphism)。public:public:// 输出:Derived class show()delete ptr;return 0;要是show()并非虚函数,那么就会调用,而非。知识点说明虚函数通过virtual关键字定义,可在派生类中重写运行时多态使用基类指针/引用调用派生类的函数。
2025-04-11 14:31:44
1142
2
原创 在Ubuntu上使用Apache+MariaDB安装部署Nextcloud并修改默认存储路径
Nextcloud 是一款开源的私有云存储解决方案,允许用户轻松搭建自己的云服务。它不仅支持文件存储和共享,还提供了日历、联系人、任务管理、笔记等丰富的功能。本文将详细介绍如何在 Ubuntu 22.04 LTS 上使用 Apache 和 MariaDB 安装部署 Nextcloud,并修改默认存储路径为 /home/nextcloud_data。
2025-01-24 11:11:16
2091
原创 Kamailio开源核心模块
这些模块共同构成了Kamailio服务器在IMS和其他SIP应用中的核心功能。通过组合和配置这些模块,Kamailio能够满足各种复杂的通信需求,从简单的SIP代理到完整的IMS部署。Kamailio的模块化设计也意味着它可以轻松地扩展和定制,以适应不断变化的网络环境和业务需求。
2024-11-28 21:03:59
1373
原创 使用Kamailio实现VoIP通话流程详解
本文将详细介绍如何使用Kamailio开源SIP服务器实现一个基本的VoIP通话流程,包括用户注册、发起呼叫、通话建立和结束通话。通过实际操作,帮助读者掌握Kamailio在VoIP系统中的应用。在实际应用中,可以根据需求对Kamailio进行更深入的定制和优化。用户注册:通过配置usrloc.so和模块,使Kamailio能够处理用户注册请求,并在数据库中存储联系信息。发起呼叫:加载和模块,使Kamailio能够处理呼叫请求,并根据路由逻辑进行分发。通话建立:通过dialog.so和tm.so。
2024-11-28 20:50:11
2076
1
原创 基于CentOS系统利用Kamailio搭建企业级SIP服务器
Kamailio是一款开源的SIP服务器,具有高性能、可扩展、模块化等特点。它广泛应用于VoIP、即时通讯、视频会议等领域。Kamailio支持多种操作系统,如Linux、FreeBSD等,可以与其他开源项目(如 Asterisk、FreeSWITCH)无缝集成。
2024-11-28 20:16:25
1072
原创 Kamailio SIP服务器的配置与运行
Kamailio(原名OpenSER)是一款基于SIP(Session Initiation Protocol)协议的开源服务器,适用于构建VoIP(Voice over Internet Protocol)、视频会议、即时消息和 presence服务等实时通信应用。它基于 GPL 许可证发布,支持多种操作系统,如 Linux、FreeBSD 等。
2024-11-28 20:09:51
2838
1
原创 深入解析音视频流媒体SIP协议交互过程
SIP是一种应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。(1)用户端(UAC)向SIP服务器发送注册请求。(2)SIP服务器(UAS)验证用户信息,并存储在数据库中。(3)SIP服务器向用户端发送注册成功响应。
2024-11-28 19:50:53
3681
原创 深入浅出解读RTSP信令交互过程
在视频监控、流媒体传输等领域,RTSP(Real-Time Streaming Protocol,实时流传输协议)发挥着重要作用。它是一种网络协议,用于控制流媒体服务器上的多媒体数据传输。它主要应用于实时音视频流的播放、暂停、快进、快退等操作。RTSP与HTTP协议类似,都是基于TCP协议的应用层协议,但它们之间有以下区别:HTTP主要用于传输静态文件,而RTSP用于传输实时音视频流。HTTP是无状态的,而RTSP是有状态的,因为它需要维护客户端与服务器之间的会话。
2024-11-28 17:40:40
1483
原创 C++中预防变量重复定义的常见问题及解决方案
预防变量重复定义是C++编程的关键环节。通过上述分析和解决方案,我们可以更好地组织项目结构,避免此类问题。希望本文能帮助大家在项目中有效应对变量重复定义的问题。
2024-11-28 16:39:46
1303
原创 如何将WSL迁移到其他磁盘:详细指南
Windows Subsystem for Linux(WSL)为Windows用户提供了一个强大的Linux兼容环境。然而,随着时间的推移,WSL实例可能会占用大量磁盘空间,或者你可能希望将WSL环境迁移到更快的磁盘上。本文将提供详细的步骤,帮助你将WSL迁移到另一个磁盘。
2024-09-06 14:59:27
2663
原创 Linux下安装和使用SVN及常用操作命令详解
Subversion(简称SVN)是一个强大的版本控制系统,它可以帮助开发者管理和跟踪代码的变更。本文将详细介绍在Linux环境下如何安装SVN,并列出了一些常用的SVN操作命令,以便于您在日常工作中更好地使用SVN。
2024-09-06 14:50:15
4688
原创 Linux下安装使用Git及常用操作命令详解
Git是一款强大的分布式版本控制系统,广泛应用于软件开发领域。本文将详细介绍在Linux环境下安装Git,并列出一些常用的Git操作命令,帮助更好掌握这款工具。
2024-09-06 14:35:50
1811
原创 iperf3交叉编译ndk
iPerf3是一个开源的网络性能测试工具,用于测量网络带宽和网络延迟。它是iPerf工具的后续版本,主要被网络管理员、工程师以及研究人员用来诊断和调节网络。iPerf3的工作原理是通过在网络中的一台设备上运行服务器端(Server),在另一台设备上运行客户端(Client),然后客户端与服务器端建立连接,进行数据传输。传输过程中,iPerf3会记录数据传输的速度和其他相关的统计信息。
2024-09-03 19:25:59
1128
原创 VMware Workstation 与 Device/Credential Guard 及 Hyper-V 不兼容问题解决
在Windows操作系统中,VMware Workstation可能遇到与Device Guard、Credential Guard以及Hyper-V的安全特性不兼容的问题。这些特性旨在利用硬件虚拟化增强系统安全性,防止恶意代码攻击。
2024-08-31 15:16:42
2280
2
原创 /lib64/libstdc++.so.6库缺失
请注意,启用 devtoolset-8 的效果只在当前 shell 会话中生效。如果希望在每个新的 shell 会话中自动启用 devtoolset-8,请将。是因为新版本文件在/usr/local/lib64/ 内,而查找是从/usr/lib64 先的,因此需要将新文件拷贝到/usr/lib64 或创建软连接。添加到 shell 配置文件中(如 ~/.bashrc或/etc/profile)这样每次打开终端时,devtoolset-8 都会自动启用。从共享库文件中提取可读字符串查看是否有报错所缺内容。
2024-01-08 15:11:27
1798
原创 Kamailio开源代码的编译安装
Kamailio是一个开源的SIP(会话初始协议)服务器,它提供了一种灵活、可扩展和高性能的解决方案,用于构建实时通信应用程序,如VoIP(Voice over IP)和UC(统一通信)系统。
2023-12-31 11:47:41
1257
原创 C++基于Socket的网络编程IPv6
服务端代码:server.cpp。客户端代码:client.cpp。g++编译出两个可执行文件之后。查看服务端是否监听端口。
2023-12-30 19:13:20
981
原创 Vmware Linux磁盘空间扩容(so easy)
之前VMware下创建的Linux虚拟机文件给过少,项目多起来之后,磁盘就已经满了,如下如,根文件系统100%被使用,想着给扩展一下磁盘。(个人的环境是Ubuntu18.04 的server版)
2023-10-31 19:43:28
946
原创 Linux服务器之间同步时间(NTP协议)
NTP是一种用于同步计算机时钟的网络协议。它是一种客户端-服务器协议,允许计算机通过网络连接到NTP服务器,并使用精确的时间源来同步其本地时钟。这些精确的时间源可以是GPS卫星、原子钟或其他可靠的时钟源。NTP通过使用递归算法和树型结构的时间同步层次结构来提供高度可靠的时间同步服务。NTP客户端通过将时间请求发送到NTP服务器进行时间同步,NTP服务器使用其内部时钟源来回复客户端请求,并使用特殊算法来计算传输延迟并纠正时间漂移,以调整客户端时钟。
2023-09-14 17:00:26
5249
原创 gRPC库的arm交叉编译
gRPC是由 Google 开发的高性能、通用的远程过程调用(RPC)框架。它建立在 Protocol Buffers(protobuf)序列化协议之上,并使用 HTTP/2 协议进行消息传输,支持多种编程语言和平台。它适用于构建分布式系统、微服务架构和云原生应用等场景,广泛应用于各种领域的软件开发。
2023-08-31 15:47:46
1320
原创 VScode 设置Source Code Pro字体
source-code-pro是一种开源等宽字体,专为程序员和开发人员设计。它由 Adobe 公司在 SIL 开放字体许可证下发布。该字体具有清晰的字形和统一的字符间距,使得代码易于阅读和编写。Source Code Pro 字体支持多种编程语言和技术,包括 C, C++, Java, Python, HTML, CSS, JavaScript 等。它包含了广泛的字符集,包括拉丁字母、数字、标点符号以及各种编程符号和特殊字符。
2023-08-25 10:26:58
2412
原创 客户端和服务器之间基本的网络通信案例
原型:int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);原型:int socket(int domain, int type, int protocol);read()/write()//进行数据交换。listen()//等待连接请求状态。socket()//创建套接字。bind()//分配套接字地址。connect()//请求连接。accept()//允许连接。close()//断开连接。
2023-07-14 14:23:29
189
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅