我想在Qt应用程序中播放视频。这是我到目前为止的代码:
#include <QApplication>
#include <QWidget>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QUrl>
#include <iostream>
using namespace std;
const int WIDTH = 1280;
const int HEIGHT = 720;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(WIDTH, HEIGHT);
window.setWindowTitle("Video Test");
window.show();
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QUrl::fromLocalFile("/Path/To/Video.mp4"));
QVideoWidget *videoWidget = new QVideoWidget(&window);
player->setVideoOutput(videoWidget);
videoWidget->resize(WIDTH, HEIGHT);
videoWidget->show();
player->play();
return app.exec();
}问题:视频可以正常显示和播放,但无法调整大小以适应QVideoWidget。视频中比widget大的部分会被截断。
提前感谢!
编辑:我减少了代码,并注意到,当应用程序启动时,视频会被切断,但当我使用鼠标调整窗口大小时,它实际上适合大小:
#include <QApplication>
#include <QWidget>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QUrl>
#include <iostream>
using namespace std;
const int WIDTH = 1280;
const int HEIGHT = 720;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMediaPlayer *player = new QMediaPlayer();
QVideoWidget *videoWidget = new QVideoWidget();
player->setVideoOutput(videoWidget);
player->setMedia(QUrl::fromLocalFile("/Path/To/Video.mp4"));
player->play();
videoWidget->resize(WIDTH/3, HEIGHT/3);
videoWidget->show();
return app.exec();
}发布于 2016-07-14 23:58:46
经过几个小时的寻找,我认为这是OSX上Qt中的一个错误,因为我看了这个YouTube视频https://www.youtube.com/watch?v=tGKmQy-VBX0并尝试了代码。
在视频中缩放工作正常,但在我的机器上不行。
发布于 2016-08-08 10:51:02
对于2016年的任何人来说,QVideoWidget仍然是失败的。但是,使用包含场景图的QGraphicsView小部件,并将单个QGraphicsVideoItem添加到场景图中。看起来很有效。
好吧,除了它不是精确的居中。左边有一个1px的边框。而且它大部分时间都挂在全屏模式下。我得到了类似于"updateVideoFrame在没有AVPlayerLayer的情况下调用(这不应该发生)“的错误。进步!
。。哦,它也占用了大约10倍的cpu。
你知道什么是有效的,而且效果很好吗?GStreamer。谢谢,gstreamer。即使将其集成到python/qt中也能令人难以置信地工作。
发布于 2018-04-19 11:24:26
我在PyQt5中遇到了类似的问题。在播放视频之前,我将QVideoWidget的几何形状设置为当前的几何形状,从而解决了这个问题。我猜resizeEvent信号中的某些东西必须处理媒体的缩放,并且在初始化时不会触发。
https://stackoverflow.com/questions/38374158
复制相似问题