首页| 论坛| 消息

标题:Qt音视频开发18-不同视频打开无缝切换
作者:liudianwu
日期:2023-02-28 17:38
内容:

## 一、前言
在轮询视频的时候,通常都是需要将之前的视频全部关闭,然后打开下一组视频,在这个切换的过程中,如果是按照常规的做法,比如先关闭再打开新的视频,肯定会出现空白黑屏之类的过度空白区间,如何避免这个问题实现无感知的无缝切换,是个需要稍微懂点脑筋的问题,有一个比较好的做法就是,准备双倍的通道或者后台解码线程,在收到需要切换指令的时候,先后台打开解码线程,直到打开完成能够正常出图像,此时再去关闭之前的解码线程,这样就相当于无缝对接上了,不会说是中间等待打开解码到能正常出图像的过程空白。但是这样又存在一个问题,那就是轮询间隔时间不是非常准确,会有个1-2s的偏差,基本上这个偏差也能接受就是,所以如果是60s的轮询间隔,你可以在58s的时候就开始打开另外一组的解码线程,2s后全部正常出图像后就关联到视频控件上显示,把之前的解码线程关闭并销毁。这样处理下来,既保证了切换过程无感知,又保证了不会过度开销占用CPU,也就切换的期间刚好有双倍的解码线程,只要内存足够,这点性能牺牲还是值得的。
## 二、效果图


## 三、体验地址
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/bin_linux_video。
## 四、相关代码
```cpp
#include "frmdemovideochange.h"
#include "ui_frmdemovideochange.h"
#include "quihelper.h"
#include "videourl.h"
#include "videohelper.h"
#include "videowidgetx.h"
frmDemoVideoChange::frmDemoVideoChange(QWidget *parent) : QWidget(parent), ui(new Ui::frmDemoVideoChange)
{
ui->setupUi(this);
this->initForm();
}
frmDemoVideoChange::~frmDemoVideoChange()
{
delete ui;
}
v ..


#1 [tanyue.esec 03-03 08:48]
试试看去

回复 发表
主题 版块