Qt音视频开发01-共享解码线程(耗时一年/性能凶残/至臻完美)
2023-09-14 09:01:41 时间
一、前言
大概在8年前就开始用ffmpeg做视频解码的显示,第一个版本就100行代码左右,功能极其简单,就是开个线程解码视频流转成图片发给主界面绘制。时间过得真快,从当初的一胎到现在二胎都上学了三胎计划中。经过了数十年的不断迭代,客户需求的不断变更,中间经历过三五个大版本的迭代,形成现在的版本,本次迭代属于大版本的迭代,所有内核代码整体架构全部重写,对于这种大版本的改动,根据以往的经验,一定是要静下心来才能完成的,每一个细节都要仔细打磨,而且尽量做到代码的复用性和耦合性平衡,能复用的就复用,能独立成组件的就独立到组件中。
本次迭代主要解决的一个问题是共享解码线程的问题,随着监控设备的增多,一个软件中可能有多个通道或者多个界面打开同一个视频流地址,比如主界面在实时预览,地图界面双击打开了某个通道预览,按照之前的做法,每次打开都是重新实例化解码线程,重新打开视频流等,理论上有点浪费资源,毕竟已经存在打开过,可以共享对应的数据,大大减轻网络压力以及设备推流的压力,现在很多的网络摄像机设备为了追求极致性价比,硬件配置做的很低减轻成本,基本上都最多支持8路推流,超过了就无法再次推流,所以我们需要在同一个软件上共享解码。早期的海康大华的客户端没有这个机制,现在的客户端都有这个机制,但是国内也是少数几个大厂实现了这个机制,大部分的视频监控客户端都没有这个机制。
为了实现这个功能,首先要做的就是将解码线程和视频控件剥离,因为需要动态共享和挂载,不剥离就根本无法实现,为此专门设计了视频解码线程基类、视频窗体控件基类等,来回架构修改了很多次ÿ
相关文章
- qt 当前窗口句柄_QT获取窗口句柄
- qt tabwidget切换_qtabwidget tab样式
- Qt各类位置信息函数
- QT多线程实战_Qt多线程开发项目
- C/C++ Qt 信号自定义槽函数
- C/C++ Qt 基础通用组件的应用
- 使用Qt提供的系统文件图标
- 获取Qt支持的所有字体
- Linux系统使用Qt开发快速入门教程(linux下qt教程)
- 使用 Qt 连接远程 MySQL 数据库(qt连接远程mysql)
- 使用Qt快速设置Linux时间(qt设置linux时间)
- linux下qt桌面环境开发实践(linuxqt桌面)
- 技术深入探索Linux下的Qt开发(基于linux的qt开发)
- Linux编译Qt库:从零开始(linux编译qt库)
- Linux下Qt实现串口通信(linux下qt串口)
- 轻松上手,Qt在Linux安装教程,让你快速掌握技巧!(qt在linux安装)
- 如何在Linux下编译Qt?(linux下编译qt)
- Qt跨平台编译MySQL驱动实践(qt编译mysql驱动)
- 集成开发Linux与Qt集成开发:实现无缝交互(linux与qt)
- 深入浅出:使用Qt连接MSSQL(qt 连接mssql)
- qt实现倒计时示例