自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Qt+FFmpeg 实现摄像头采集并录制 YUV 格式视频

本文主要记录通过 Qt 结合 FFmpeg 实现从摄像头采集视频数据,并将采集到的数据保存为 YUV 格式文件的过程。涉及 FFmpeg 设备操作、Qt 多线程编程等核心知识点,适合有一定 Qt 和 FFmpeg 基础的开发者学习参考。// 引入FFmpeg的C语言接口// Windows系统下的设备配置#define FMT_NAME "dshow" // 设备输入格式(dshow)#define DEVICE_NAME "video=Integrated Webcam" // 摄像头设备名称。

2026-03-07 20:39:18 561

原创 Qt+FFmpeg 实现 PCM 音频转 AAC 编码

音频编码的核心流程(找编码器→配参数→读数据→编码→写文件);Qt 线程的使用(避免卡界面);FFmpeg 的核心对象(编码器、上下文、帧、包)的作用。

2026-02-06 21:41:57 716

原创 Qt+FFmpeg 实现录音程序(pcm转wav)

/ 音频格式标记:1=PCM(整数),3=浮点PCM// WAV文件头(固定44字节)// 1. RIFF块:标识文件类型// 固定值"RIFF"// 文件总长度-8(RIFF块的总大小)// 2. 格式标识:固定"WAVE"// 3. fmt块:音频参数// 固定"fmt "// PCM格式固定16// 音频编码(1=PCM,3=浮点)// 声道数(1=单声道,2=立体声)// 采样率(比如44100)// 字节率=采样率×blockAlign。

2026-02-06 19:02:30 1059

原创 Qt+SDL2 实现 WAV 音频播放

本文将手把手教大家用Qt + SDL2实现 WAV 音频文件的播放功能。核心思路是:把音频播放逻辑放在 Qt 子线程中(避免阻塞 UI),通过 SDL2 的 “拉取(Pull)模式” 实现音频播放,点击主窗口的按钮就能切换 “播放 / 停止” 状态。Qt 线程:避免 UI 阻塞;SDL Pull 模式:音频设备主动拉取数据,回调函数填充 PCM;资源管理:线程和 SDL 资源的正确释放。

2026-02-03 22:04:54 923

原创 Qt+FFmpeg 实现音频重采样

本文面向编程小白,用最通俗的语言讲解如何基于 Qt+FFmpeg 实现音频重采样(简单说:把音频文件的采样率 / 采样格式 / 声道数转换成目标规格)。全程避开复杂术语,只讲核心逻辑,代码可直接运行~为啥用线程?→ 避免界面卡死,让 “界面操作” 和 “音频处理” 并行;FFmpeg 核心?→(配置参数)、swr_init(初始化)、(重采样);内存管理?→ FFmpeg 的缓冲区 / 上下文要手动释放,Qt 线程要安全退出;核心流程?→ 读原始 PCM→转格式→写新 PCM。

2026-01-31 21:35:52 1066

原创 Qt+FFmpeg 实现 PCM 转 WAV

/ 音频格式标记:1=普通PCM,3=浮点型PCM// WAV文件头(固定44字节)// 1. RIFF块:告诉播放器这是WAV文件// 固定值// 文件总大小-8字节(不用算,代码自动算)// 2. 固定标记:WAVE// 3. fmt块:描述音频格式// 固定值// PCM格式固定为16// 音频格式(PCM/浮点)// 声道数(1=单声道,2=立体声)// 采样率(比如44100Hz)// 字节率=采样率*声道数*位深度/8(代码自动算)

2026-01-26 21:47:04 447

原创 Qt 结合 SDL2 实现 PCM 音频文件播放

PCM 是原始音频数据,无需解码可直接播放,SDL2 是跨平台的音视频开发库,本文基于 Qt 框架,通过多线程(避免阻塞 UI)+ SDL2 的 Pull 模式实现 PCM 音频播放,完整代码可直接运行。

2026-01-23 17:03:28 412

原创 Qt+FFmpeg 实现 Windows 音频采集

本文实现了最基础的 Windows 音频采集功能,核心是理解 FFmpeg 的设备操作流程和 Qt 线程的安全使用。初学者可先掌握核心流程,再逐步学习音频编码、封装等进阶知识,为后续音视频开发打下基础。

2026-01-20 10:06:10 739

原创 Linux网络编程-原始套接字

原始套接字是低级网络接口,允许程序绕过传输层(TCP/UDP),直接操作网络层(IP)甚至数据链路层(以太网);必须使用root/管理员权限运行(涉及底层网络操作,存在安全风险);原始套接字(SOCK_RAW)是底层网络接口,需root权限,可绕过传输层直接解析 / 构造网络包;网络包解析核心:按协议栈分层解析(以太网头 14 字节 → IP 头最小 20 字节 → TCP 头最小 20 字节);

2026-01-15 15:05:56 695

原创 Linux网络编程-UDP 组播原理与实战

UDP 组播是 “一对一组” 通信,相比广播能大幅节省带宽,支持局域网 / 广域网使用;组播依赖 IPv4 D 类地址(224.0.0.0~239.255.255.255),不同段地址有不同使用范围;组播接收方必须 bind 端口,且需通过加入组播组,退出需用,发送方无需 bind 仅需指定组播地址。

2026-01-13 15:00:57 422

原创 Linux网络编程-UDP 广播原理与实战

UDP 广播核心:发送方需设置属性、用广播地址,无需 bind;接收方必须 bind,地址用INADDR_ANY。广播地址分两类:受限广播(255.255.255.255)不跨路由,直接广播(如 192.168.10.255)可跨路由(需路由器放行)。虚拟机测试需修改 MAC 和 IP,避免网卡冲突,确保多主机在同一子网。

2026-01-13 13:51:12 381

原创 Linux 网络编程 - UDP 协议:无连接通信实战

你想掌握 Linux 下 UDP 协议的核心概念、专属通信接口(recvfrom/sendto),以及完整的服务端 / 客户端编程实现,这是理解无连接网络通信的基础知识点。无连接、不可靠、高速、保留数据边界,适合实时性场景;recvfrom(接收,带发送方地址)、sendto(发送,带目标地址),不使用 read/write;UDP 编程模型:服务端需 bind,客户端无需 bind,无 listen/accept/connect 流程;

2026-01-11 21:39:43 907

原创 Linux 网络编程:epoll 实现聊天室

本案例是epoll 高并发编程的标杆实践,核心是 ET 模式 + 非阻塞 IO,实现万级连接的高效处理;服务器通过list管理客户端 fd,实现消息广播,是聊天室的核心逻辑;客户端采用父子进程 + 管道分离输入和网络通信,解决 IO 阻塞问题;突破系统文件描述符限制是高并发测试的关键,需同时修改用户级和系统级配置。

2026-01-08 14:19:08 721

原创 Linux 网络编程 - epoll 多路复用

epoll 的核心头文件是,核心接口为epoll_ctlepoll_wait;epoll 的核心优势是事件驱动 + 无 fd 数量限制 + 线程安全,是高并发的首选;LT 模式(默认):新手友好,持续触发;ET 模式:效率高,需非阻塞 + 一次性读写完数据;select/poll 适合中小并发,epoll 适合万级以上高并发(如中间件、网关)。简单记:epoll 是 select/poll 的 “终极升级版”,解决了轮询效率低、fd 受限的核心问题;

2026-01-06 23:43:31 998

原创 Linux 网络编程 - Poll 多路复用

Poll 的核心头文件是<poll.h>,使用 POLLRDHUP 需定义;Poll 通过数组管理 fd,无 1024 数量限制,事件类型更丰富;Poll 仍基于轮询,中小并发场景适用,大并发需升级为 epoll;核心优势:精准检测客户端关闭(POLLRDHUP)、fd 管理更灵活。简单记:Poll 是 Select 的 “补短板” 版本,解决了数量限制和事件单一问题,但未解决轮询效率问题;实际开发中,千级以内连接用 Poll,万级连接用 epoll。

2026-01-06 20:42:21 789

原创 Linux 网络编程 - Select 多路复用

Select 是单进程处理多连接的基础方案,核心是通过 fd_set 监听多个文件描述符的状态变化;适用场景:小并发(<1000)、高实时(微秒级超时),替代多线程 / 多进程节省内存;核心痛点:1024 fd 限制、轮询效率低,大并发场景需升级为 epoll;关键操作:每次循环重新拷贝 fd 集合、及时移除无效 fd、合理设置监听范围。

2026-01-05 20:00:51 598

原创 Linux 网络编程 - 文件系统套接字 + 多客户端通信 | 解决 TCP 核心错误

文件系统套接字:本机进程通信首选,全双工、跨无关进程,接口和 TCP 套接字兼容;TCP 核心错误:bind 失败用,跨机连接失败用INADDR_ANY,字节序用;多客户端支持:入门用多进程,追求性能用多线程(注意线程安全);调试技巧:TCP 调试助手快速验证通信逻辑,减少手写测试代码的时间。本文覆盖了从本地进程通信到网络多客户端通信的核心场景,解决了开发中最常见的坑,是 Linux 网络编程进阶的核心知识点!

2026-01-03 13:03:02 651

原创 Linux 网络编程 - 第一个 TCP 通信:客户端 + 服务器

socket → bind → listen → accept → 读写 → 关闭;socket → connect → 读写 → 关闭;TCP 通信的关键是地址 / 端口的一致性和字节序转换,这是入门阶段最容易踩坑的点。本文实现的是最基础的 “一问一答” 模型,后续可扩展为多线程服务器(处理多个客户端)、长连接通信(保持连接不关闭)等进阶场景。

2026-01-03 12:56:09 647 1

原创 Linux 线程编程 - 线程取消:取消状态 + 取消类型

若线程执行无系统取消点的逻辑(如纯计算循环),可通过// 子线程循环中插入自定义取消点i++) {// 纯计算逻辑,无系统取消点// 手动取消点:检查是否有取消请求,有则终止取消请求是 “通知”,目标线程需配置ENABLE状态才会响应;延迟取消(DEFERRED)是安全选择,仅在取消点响应,便于资源清理;立即取消(ASYNCHRONOUS)慎用,易导致资源泄漏;发送取消请求后,必须通过回收线程资源。

2026-01-02 21:17:53 880

原创 Linux 线程编程 - 线程属性:脱离状态 + 调度策略

线程属性是 “线程配置的统一模板”,核心价值在于批量、灵活配置线程特征脱离状态:解决 “僵尸线程” 问题,批量创建线程时优先使用 DETACHED;调度策略:普通场景用 SCHED_OTHER,实时场景(如工控、音视频)用 SCHED_FIFO/RR;核心原则:属性仅影响创建时的线程,销毁不影响已运行线程,需配合互斥锁 / 条件变量完成复杂同步。对比直接传 NULL 给 pthread_create(默认属性),线程属性让线程配置更清晰、可维护,是 Linux 线程进阶编程的必备知识点。

2026-01-02 21:09:28 900

原创 Linux线程编程-条件变量:多消费者、多生产者

互斥锁:保护共享资源(临界区);条件变量:处理 “等待条件成立” 的逻辑,避免线程忙等(消耗 CPU)。对比信号量(全能但语义模糊)、互斥锁(仅互斥),条件变量在 “多生产者 / 多消费者” 场景下更灵活,是线程同步的核心组合。

2025-12-04 19:51:50 416

原创 Linux线程编程-互斥锁:线程互斥访问的专属工具

互斥量是线程互斥访问的 “专属工具”,相比初值 1 的信号量,语义更清晰、接口更简洁,适合纯互斥场景(如共享变量操作)。临界区最小化:仅对操作共享资源的代码加锁,避免影响并发效率;加解锁成对出现:加锁后必须解锁(哪怕中途出错,可用保证);避免死锁:线程不要同时持有多个锁,或按固定顺序加锁。

2025-12-04 19:45:45 342

原创 Linux线程编程-信号量:解决线程同步与互斥问题

需几个信号量?—— 按 “资源类型” 或 “同步关系” 设计(如生产 - 消费需 2 个);初值设多少?—— 互斥 = 1,同步 = 0,计数 = 并发数;哪里 P/V?—— P 操作在 “申请资源 / 等待事件” 前,V 操作在 “释放资源 / 触发事件” 后。对比之前的线程并发 bug,信号量通过原子操作避免了竞争问题,比手动标志位更可靠。

2025-12-02 16:35:58 843

原创 Linux线程编程:创建与并发问题

线程是 “轻量级进程”,核心优势是共享进程资源、开销小,但多线程操作共享资源时,会因 “并发竞争” 出现 bug。本次示例暴露了同步问题,后续将学习线程同步方案(互斥锁、信号量等),解决共享资源竞争问题。

2025-12-02 09:10:55 326

原创 Linux进程通信-消息队列

消息必须以开头(类型 > 0),后续为消息体。消息队列是 “灵活且省心” 的 IPC 方式:自带同步、支持按类型筛选,适合需要分类传输消息的场景。对比共享内存(快但需手动同步)、命名管道(简单但无类型筛选),消息队列平衡了灵活性和易用性。

2025-12-01 23:42:13 377

原创 Linux进程通信-共享内存

共享内存是最快的 IPC 方式,但需手动处理同步。

2025-12-01 23:33:52 307

原创 234. 回文链表

给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。

2025-03-31 14:50:48 390

原创 力扣题目--344. 反转字符串

在这道题目中的疑惑:有一个疑问,s[i] = s[len-1-i];这一句为什么len-1之后还要减去i。当进行反转操作时,要将第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,以此类推。增加时,就会始终指向最后一个元素,无法正确地与前面的元素依次对应交换。对应的反向位置的元素,以确保反转操作的正确性。是为了在循环过程中正确地找到与当前位置。代表当前要处理的前面位置的元素,而。开始逐步增加,在每次循环中,则代表对应的后面位置的元素。在这个反转字符串的操作中,个元素,其索引范围是从。

2024-09-18 22:11:04 451

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除