当前位置: 首页 > news >正文

Qt如何实现动态背景-视频背景

前言

需求:加载视频作为视频背景,在上层可以进行图片的动画化,或是进行其他操作。

几种方法:

1、直接将视频弄成一个QDialog, 然后再上层在弄一个QDialog,背景透明即可。但遇到一个问题,QDialog没办法局部透明。

2、使用QOpenGLWidget: 这个方案没有使用。

3、使用QGraphicsVideoItem:当前使用的是这个方案,但这个方案有缺陷,有可能不支持某些mp4文件。所以,会导致显示不成功。

正文

一、QVideoWidget + QMediaPlayer

1、成功运行的代码

ui->setupUi(this);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint);//无边框

player = new QMediaPlayer;
videoWidget = new QVideoWidget();
player->setVideoOutput(videoWidget);
player->setMedia(QUrl::fromLocalFile("./product/video/test1.mp4"));

QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(videoWidget);
ui->wgtVideo->setLayout(layout);
videoWidget->show();
player->play();
show();

2、遇到的问题

3、工程代码

二、QGraphicsVideoItem + QMediaPlayer

1、成功运行的代码

#include <QApplication>
#include <QMediaPlayer>
#include <QGraphicsVideoItem>
#include <QGraphicsView>
#include <QGraphicsScene>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QGraphicsScene scene;
    QGraphicsView view(&scene);
    view.resize(1280, 720);
    QGraphicsVideoItem item;
    scene.addItem(&item);
    item.setSize(QSizeF(1280, 720));
    item.setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
    QMediaPlayer player;
    player.setVideoOutput(&item);
    player.setNotifyInterval(2000);//设置信息更新周期为2000ms
    player.setMedia(QUrl::fromLocalFile("./product/video/test2.mkv"));
    player.play();
    view.show();

    return a.exec();
}

效果:

在这里插入图片描述

2、遇到的问题

1、DirectShowPlayerService::doRender: Unknown error 0x80040200.

由于QGraphicsVideoItem支持的视频格式是有限的,所以有可能是不支持mp4文件的,转换成mkv文件就成功了。后面我又换了一个mp4文件,就没啥问题了,所以是我之前的那个测试的mp4文件时有问题的,我的测试视频是从这里下载的: https://sample-videos.com/index.php#sample-mp4-video

还有可能是驱动没装:QMediaPlayer的驱动:

链接:https://pan.baidu.com/s/13aEhts8ipAYv6TD2WFIo7Q
提取码:1111

还有可能是LAV Filter: https://blog.csdn.net/weixin_45827203/article/details/105220756

以下是错误的可能性:

  1. 视频格式:QGraphicsVideoItem 只支持某些视频格式。请确保您的视频格式是支持的。通常情况下,支持 H.264 和 MPEG-4 等常见格式。
  2. 文件路径:请确保您提供给 QGraphicsVideoItem 的视频文件路径是正确的。如果视频文件不存在或路径不正确,它将无法播放。
  3. 缺少解码器:如果您的系统上缺少适当的解码器,QGraphicsVideoItem 将无法正常播放视频。您可以尝试在您的系统上安装适当的解码器以解决此问题。
  4. 硬件加速:通常,硬件加速会加速视频播放,并减少 CPU 使用率。但有时启用硬件加速可能导致播放问题。如果您启用了硬件加速,请尝试禁用它,并查看视频是否可以成功播放。
  5. 版本兼容性:QGraphicsVideoItem 可能与某些特定版本的 Qt 或操作系统版本不兼容。请确保您使用的 Qt 版本是最新的,并且与您的操作系统兼容。另外,请确保您的操作系统已经安装了必要的更新和修补程序。
  6. 其他问题:如果视频仍然无法播放,请检查是否存在其他问题,比如媒体库文件损坏或者与播放器相关的问题。在这种情况下,您可以尝试使用其他的媒体库或播放器来测试您的视频文件。

3、工程代码

参考

一、下载测试视频的网站

1、https://www.motionplaces.com/paris/

2、https://www.videvo.net/video/raindrops-in-super-slow-motion/3313/#rs=video-box

3、4K、高清、无水印视频素材库,你要的素材来啦~

1、测试视频下载网站

二、解决该问题所遇到的比较有用的网站

2、https://cloud.tencent.com/developer/ask/sof/106854758:因为Qt不允许透明背景的小部件在视频上呈现。背景显示为黑色,而不是实际的视频。

3、Qt踩坑记001:无法在读取相机图像的取景器QVideoWidget/QGraphicsVideoItem上显示图片

4、Qt疑难杂症:无法QVideoWidget播放器上浮控件-解释原因

5、视频播放

6、QT多媒体 播放视频并显示字幕

7、使用Qt进行音视频播放

8、可以免费对视频进行切割

相关文章:

  • Hazelcast系列(八):数据结构
  • Vue整合
  • 在linux下的vim中使用内联函数时,会有未定义的引用错误解决办法
  • 如何获取standard cell各端口的作用
  • flutter StreamSubscription 订阅者 stream
  • JAVA-SpringBoot入门Demo用IDEA建立helloworld
  • LONGLORA: EFFICIENT FINE-TUNING OF LONGCONTEXT LARGE LANGUAGE MODELS
  • 机器学习:随机森林
  • Spark任务优化分析
  • css怎么实现文字描边
  • 【18】c++设计模式——>适配器模式
  • 力扣刷题 day40:10-10
  • uniapp微信小程序之分包异步化之组件分包
  • 17. 电话号码的字母组合
  • 深度学习DAY3:激活函数
  • 【RabbitMQ 实战】09 客户端连接集群生产和消费消息
  • Java架构师缓存架构设计解决方案
  • 小米、华为、iPhone、OPPO、vivo如何在手机让几张图拼成一张?
  • Qt开发学习笔记02
  • 面试之并查集
  • 构建菌株有效降解有机污染物,上海交大科研成果登上《自然》
  • 成都公积金新政征求意见:购买保障性住房最高贷款额度上浮50%
  • 2025江西跨境电子商务发展交流会召开,探索行业发展新趋势
  • 人民日报钟声:中方维护自身发展利益的决心不会改变
  • 安顺市原副市长、市公安局原局长顾长华任贵州省民委副主任
  • 巴基斯坦宣布禁止与印度的进口贸易