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

这篇具有很好参考价值的文章主要介绍了Qt如何实现动态背景-视频背景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

几种方法:

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

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

3、使用QGraphicsVideoItem:当前使用的是这个方案,但这个方案有缺陷,有可能不支持某些mp4文件。所以,会导致显示不成功。这个问题已经基本解决了,只要把对应的Mp4文件转变成AVC(H264)格式就可以了。

正文

一、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();

运行成功的图片:
qt 动态背景,qt,音视频,数据库

2、工程代码

二、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();
}

效果:

qt 动态背景,qt,音视频,数据库

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. 其他问题:如果视频仍然无法播放,请检查是否存在其他问题,比如媒体库文件损坏或者与播放器相关的问题。在这种情况下,您可以尝试使用其他的媒体库或播放器来测试您的视频文件。

2、DirectShowPlayerService::doRender: Unknown error 0x80040218.

出现这个问题,代表的是没有对应的解码器对其进行解码。

首先,你应该确保,你安装了:K-Lite_Codec_Pack_1785_Standard 下载链接是这个:http://www.codecguide.com/

直接下载最新的即可。

qt 动态背景,qt,音视频,数据库

然后,如果还是不行的话,就只能将你要显示的视频进行格式转换了,需要转换成AVC(H264)

qt 动态背景,qt,音视频,数据库

可以使用格式工厂进行转换,这个工具的下载链接在这里:

链接:https://pan.baidu.com/s/14XRat5EM8OLZuT8zPb4usg
提取码:1111

3、工程代码

QGraphicsVideoItem的工程测试代码

运行环境:Qt Creator 7.0.2 MSVC2015 UTF8

参考

一、下载测试视频的网站

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、可以免费对视频进行切割文章来源地址https://www.toymoban.com/news/detail-757237.html

到了这里,关于Qt如何实现动态背景-视频背景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt音视频开发45-音视频类结构体参数的设计

    视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结构体参数的获取和设置单独提供了函数,参阅海康大华等大

    2024年02月05日
    浏览(72)
  • 使用Qt进行音视频播放

      Qt对音视频的播放和控制,相机拍照,收音机等多媒体应用提供了强大的支持。Qt5使用了全新的Qt Multimedia模块来实现多媒体应用,而原来Qt4中用于实现多媒体功能的Phonon模块已经被移除。   新的Qt Multimedia模块提供了丰富的接口,使读者可以轻松地使用平台的多媒体功

    2024年02月03日
    浏览(43)
  • Qt之基于QMediaPlayer的音视频播放器(支持常见音视频格式)

    Qt自带了一个Media Player的例子,如下图所示: 但是运行这个例子机会发现,连最基本的MP4格式视频都播放不了。因为QMediaPlayer是个壳(也可以叫框架),依赖本地解码器,视频这块默认基本上就播放个MP4,甚至连MP4都不能播放,如果要支持其他格式需要下载k-lite或者LAVFilter

    2024年02月02日
    浏览(67)
  • Qt/C++音视频开发46-音视频同步保存到MP4

    用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这

    2024年02月17日
    浏览(68)
  • Qt音视频开发38-ffmpeg视频暂停录制的设计

    基本上各种播放器提供的录制视频接口,都是只有开始录制和结束录制两个,当然一般用的最多的也是这两个接口,但是实际使用过程中,还有一种可能需要中途暂停录制,暂停以后再次继续录制,将中间部分视频不需要录制,跳过这部分不需要的视频,而且录制的视频文件

    2023年04月20日
    浏览(72)
  • 音视频开发系列(10):基于qt的音频推流

    今天分享一下利用qt录制音频,然后再利用ffmpeg推流到nginx服务器,最后再利用vlc进行拉流的demo。 首先介绍一下如何利用qt来进行音频的录制,qt的音频录制主要利用qt的QAudioFormat先进行音频信息的配置。主要需要配置以下的信息: 然后使用QAudioDeviceInfo来获取是否支持改设置

    2024年02月02日
    浏览(56)
  • Qt音视频开发40-ffmpeg采集桌面并录制

    之前用ffmpeg打通了各种视频文件和视频流以及本地摄像头设备的采集,近期有个客户需求要求将整个桌面屏幕采集下来,并可以录制保存成MP4文件,以前也遇到过类似的需求,由于没有搞过,也没有精力去摸索和测试,所以也就一直耽搁着,近期刚好这个需求又来了,定下心

    2023年04月25日
    浏览(64)
  • Qt 多媒体音频模拟按钮发音(音视频启动)

    ## 项目演示 平台 :windows或者ubuntu  要求 :平台需要支持音频播放功能 文件格式 :.wav 可以使用剪映生成,音频部分,我这里是简短的音乐 # Qt 多媒体简介 Qt QSound是Qt框架中的一个类,用于播放音频文件。它可以在Qt应用程序中实现简单的音频播放功能,包括播放、暂停和停

    2024年02月03日
    浏览(51)
  • Qt/C++音视频开发24-视频显示QOpenGLWidget方式(占用GPU)

    采用painter的方式绘制解码后的图片,方式简单易懂,巨大缺点就是占CPU,一个两个通道还好,基本上CPU很低,但是到了16个64个通道的时候,会发现CPU也是很吃紧(当然强劲的电脑配置另当别论),这就需要考虑用opengl来绘制了,采用opengl走的GPU,会占用很少的CPU(一般是部

    2024年02月11日
    浏览(50)
  • Qt音视频开发37-识别鼠标按下像素坐标

    在和视频交互过程中,用户一般需要在显示视频的通道上点击对应的区域,弹出对应的操作按钮,将当前点击的区域或者绘制的多边形区域坐标或者坐标点集合,发送出去,通知其他设备进行处理。比如识别到很多人脸,用户单击某个人脸后指定对该人脸进行详细的信息查询

    2023年04月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包