- 博客(8)
- 收藏
- 关注
原创 Qt + FFmpeg 播放器内核重构实战:多线程解码、精确 Seek 与 EOF 收尾
最近对 QtFFmpegPlayer 完成了第一阶段重构。这一版没有急着增加字幕、倍速或播放列表,而是先处理播放器内核中更基础的问题:线程职责混杂、播放状态不完整、数据队列无限增长、Seek 前后数据串流,以及播放结束时解码器没有正确收尾。重构后的播放器已经从“一个线程完成大部分工作”的示例代码,调整为可以继续承载字幕、网络流、硬件解码和 OpenGL 渲染的基础架构。
2026-09-14 14:17:24
197
原创 从零实现 Qt + FFmpeg 本地视频播放器
本文介绍了基于Qt 6和FFmpeg 8.1开发的本地视频播放器项目,实现了音视频解码、画面渲染、音频输出、播放控制及同步等功能。项目采用Qt Widgets构建界面,利用FFmpeg处理媒体解封装、解码和格式转换,通过QAudioSink输出音频信号。关键实现包括:工程内置FFmpeg的CMake配置、播放线程与界面的信号槽通信、音视频同步机制(以音频时钟为主时钟),以及支持Seek的进度控制。该项目适合作为Qt+FFmpeg播放器开发的入门参考,代码已开源在GitHub。
2026-07-27 16:41:41
378
原创 多线程理论
当程序员使用new关键字创建一个线程后,该线程处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。当线程对象调用了start()方法之后,该线程处于就绪状态。虚拟机会为其创建方法调用栈和程序计数器,等待调度运行。处于就绪状态的线程获得了CPU阻塞状态BLOCKED线程因为某种原因放弃了cpu使用权,也即让出了cpu timeslice,暂时 停止运行。知道线程进入可运行状态,才有机会再次获得cpu timeslice转到运行状态。线程死亡DEAD。
2026-05-11 10:06:24
366
原创 MyBatis学习笔记
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为MyBatis。2013 年 11 月迁移到 Github。iBATIS 一词来源于“internet”和“abatis”的组合,是一个基于 Java 的持久层框架。iBATIS 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)。
2023-05-22 15:57:39
411
2
原创 SSM框架
具有约束性,支撑性的架构application.xml中补充调用@Component//切面对象的创建权限依然交给spring容器@Aspect//框架注解,标识当前类是一个切面类/*** 当较多的通知增强方法使用相同的 execution 切入点表达式时,编写、维护均较为麻烦。* AspectJ 提供了@Pointcut 注解,用于定义 execution 切入点表达式。* 其用法是,将@Pointcut 注解在一个方法之上,以后所有的 execution 的 value 属性值均。
2023-04-27 15:58:27
425
1
原创 动态代理的实现
可以做到不修改目标对象的功能前提下,对目标对象功能进行扩展因为代理对象需要与目标对象实现一样的接口。所以会有很多代理类,类太多;一旦接口增加方法,目标对象和代理对象都要维护。CGLib代理,又叫做子类代理,在内存中构建一个子类对象从而实现对目标对象功能的扩展。JDK的动态代理有一个限制,就是使用动态代理 的对象必须实现一个或多个接口,如果想代理没有实现接口的类,就可以使用CGLib。CGLIB是一个强大的高性能的代码生成包,它可以在运行期扩展Java类与实现Java接口。
2023-04-27 15:56:31
184
1
原创 反射原理和运用场景
反射,通俗的说,即在程序运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能知道这个对象的所有属性和方法。这种动态获取信息及动态调用对象的方法的功能叫做Java的反射机制。
2023-04-13 12:56:33
210
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅