标题:Qt/C++音视频开发64-共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步
作者:liudianwu
日期:2024-01-29 09:25
内容:
## 一、前言
共享解码线程主要是为了降低CPU占用,重复利用解码,毕竟在一个监控系统中,很可能打开了同一个地址,需要在多个不同的窗口中播放,形成多屏渲染的效果,做到真正的完全的画面同步,在主解码线程中切换了播放进度,所有关联的同一个解码线程的播放窗体也会立即同步画面,使得感官上看起来非常的舒服。
无论何种内核的解码线程,除了句柄不能重复利用以外(除非厂家提供的api接口就支持多个窗口渲染),只要是能够解码拿到的yuv数据或者image图片数据,都会以信号的形式发出来,这就给共享解码线程提供了极大的便利性,视频控件只管拿到数据绘制即可,至于源头数据,谁发信号过来就行,所以思路就是,搞一个线程队列记住新建过的解码线程,在视频控件中打开播放的时候,判断是否和之前已经打开过的线程的地址相同,如果相同,只需要增加一个关联信号槽就行,也就是同一个解码线程后面对应的信号会发给多个不同的视频控件,这就实现了解耦。可以大幅度降低资源的占用。很多著名的或者行业做的比较好的软件都是这样设计。
## 二、效果图
## 三、体验地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_demo。
5. 视频主页:[https://space.bilibili.com/687803542](https://space.bilibili.com/687803542)
## 四、功能特点
### 4.1. 基础功能
1. 支持各种音频视频文件格式,比如mp3、wav、mp4、asf、rm、rmvb、mkv等。
2. 支持本地摄像头设备和本地桌面采集,支持多设备和多屏幕。
3. 支持各种视频流格式,比如rtp、rtsp、rtmp、http、udp等。
4. 本地音视频文件和网络音视频文件,自动识别文件长度、播放进度、音量大小、静音状态等。
5. 文件可以指定播放位置、调节音量大小、设置静音状态等。
6. 支持倍速播放文件,可选0.5倍、1.0倍、2.5倍、5.0倍等速度,相当于慢放和快放。
7. 支持开始播放、 ..