- 排查内存泄漏、线程死锁、野指针
- 数据可视化开发
- 使用 Qt QCharts、QPainter、GraphicsView 实现数据可视化,开发折线图、仪表盘等图表组件,完成服务器 CPU、内存、磁盘指标实时渲染展示。
- 多线程分离数据采集与 UI 绘制,配合互斥锁保护共享数据,解决高频刷新带来的界面卡顿、数据错乱问题。
- 对接后端接口获取指标数据,驱动图表动态更新,支持历史数据回溯与异常告警可视化展示。
- 音视频同步
- init_ffmpegplay(); 初始化 std::atomic<double> *audio_clock;
- 在音频和视频解码线程传入同一个指针
- 音频线程 设置 audio_clock.store
- 在解码时,获取pts(单位:s,frame的播放时刻)
- 获取新的packet前,使用m_queue中剩余的字节数计算当前的播放时间
- double bytes = m_queue.size(); // 计算缓冲区中剩余字节数
- double byte_per_sec = 44100 *2 *2; // 计算每秒播放的字节数
- double queue_sec = bytes / byte_per_sec; // 计算剩余字节需要的播放时间
- double current_time = pts - queue_sec; // 从解码开始到当前帧所需的播放时间 - 剩余字节所需的时间 = 已经播放的时间(当前播放时间)
- 视频线程 使用audio_clock.load
- audio_clock > video_clock 音频比视频快,丢帧
- audio_clock < video_clock 视频比音频快,msleep() 等待
- 线程安全队列
- QMutex m_mutex;
- QMutexLocker locket(&m_mutex);
- 解决 seek 花屏
- 使用 AVSEEK_FLAG_ANY 跳到任意帧(P/B)导致缺失参考数据导致花屏
解决方法: 使用 AVSEEK_FLAG_BACKWARD 跳到 目标时间最近的I帧(关键帧) - 旧数据残余
解码器中有seek之前的数据
解决办法:avcodec_flush_buffers(video_codec_ctx);
avcodec_flush_buffers(audio_codec_ctx);
数据包队列有seek之前残留的数据
解决办法: packetQueue.clear(); - 音视频时钟没有重置
audio_clock.store(0.0);
video_clock.store(0.0); - 面试:
实现精准 seek 进度跳转:
seek 时使用AVSEEK_FLAG_BACKWARD回退到最近 I 关键帧,清空 PacketQueue 数据包队列,调用avcodec_flush_buffers清空音视频解码器缓存,重置音视频时钟,丢弃目标时间之前多余帧,解决 seek 花屏、时序错乱问题。
- 使用 AVSEEK_FLAG_ANY 跳到任意帧(P/B)导致缺失参考数据导致花屏
- 音画不同步
- 为什么? 音频时钟不对
- 库封装
- 库封装:把功能代码(函数、类、逻辑)打包成静态库 / 动态库 ,对外只暴露头文件,隐藏内部实现源码,实现代码复用、源码保护、模块解耦。
类型 后缀 Linux Windows 特点 静态库 .a.a.lib编译期把库代码复制进可执行文件;运行不再依赖库文件;程序体积大;更新库需要重新编译程序 动态库(共享库) .so.dll运行时加载;程序体积小;更新库不用重编译程序;发布必须附带库文件 -
封装核心思想
头文件 (.h/.hpp):对外接口,放类声明、函数声明、宏。给调用方
源文件 (.cpp/.c):内部实现,不对外分发。编译生成库文件。不给调用方
调用者只包含头文件,链接库文件,看不到内部 cpp 源码。
-
静态库封装
-
使用静态库ar工具
-
步骤
gcc a.c -o a.o -c
gcc b.c -o b.o -c
ar rcs libab.a a.o b.o
-
-
动态库封装
gcc -fPIC -shared -o liba.so a.c // -o 后放库文件
Qt 面试(一)
≮傷£≯√2026-09-06 13:34
相关推荐
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项2601_955662464 天前
短剧多人对白怎么配?2026年多角色配音工具对比慧都小项4 天前
当边缘AI上产线:QtitanDocking 如何让工业 HMI 实现多视图协同开发笔记-阿牛4 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L旺仔小馒头wang4 天前
AI 智能手机发布会:赋予人类的五种新能力Quz4 天前
QML SwipeDelegate 滑动委托纳祥科技4 天前
拆机拆到芯片级:ARC功放机里的NX7026、NX8420、NX6805youandyouyou4 天前
律所内部培训共享的内网部署方案:架构、参数与三步落地Quz4 天前
QML 列表中的四种委托:ItemDelegate、CheckDelegate、RadioDelegate、SwitchDelegate实心儿儿4 天前
Qt — 显示类控件