QT中怎么在一个Widget中添加视频播放的功能,就是一打开这个Widget就自动播放视频?要用啥函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT中怎么在一个Widget中添加视频播放的功能,就是一打开这个Widget就自动播放视频?要用啥函数?相关的知识,希望对你有一定的参考价值。
Qmovie 是不只能显示GIF格式的动画?
Phonon速度很慢,可别怪我,耐心等它蹦出来#include <QtGui>
#include <Phonon>
class VWidget : public QWidget
public:
VWidget (QWidget *parent = 0) : QWidget (parent)
mediaObject = new Phonon::MediaObject (this);
videoWidget = new Phonon::VideoWidget (this);
Phonon::createPath (mediaObject, videoWidget);
audioOutput = new Phonon::AudioOutput (Phonon::VideoCategory, this);
Phonon::createPath (mediaObject, audioOutput);
mediaObject->setCurrentSource (QString ("R:/temp/release/demo.avi"));
mediaObject->play();
private:
Phonon::MediaObject *mediaObject;
Phonon::VideoWidget *videoWidget;
Phonon::AudioOutput *audioOutput;
;
int main (int argc, char *argv[])
QApplication app (argc, argv);
VWidget *qWidget = new VWidget;
qWidget->setMinimumSize (640, 480);
qWidget->show();
qApp->processEvents();
return app.exec();
追问
太感谢了,但是没有图像只有声音是怎么回事,而且我播.avi格式的有声音,播.rm或者.rmvb的连声音都没了。
追答那是你的系统缺少解码器,我的测试都没问题,avi、rmvb、mp4任何格式都正常
以下两句分别确保自动识别正确的媒体类型和加载系统插件
videoWidget = new Phonon::VideoWidget (this);
Phonon::createPath (mediaObject, videoWidget);
audioOutput = new Phonon::AudioOutput (Phonon::VideoCategory, this);
Phonon::createPath (mediaObject, audioOutput);
我先后装了两个解码器,最后一个叫win7codecs,但都不行啊,郁闷。缺解码器要怎么解决呢?
追答你的播放器能播放的应该都能播放,一般装ffdshow、K-Lite Codec Pack等其他播放器带有的解码器都可以,或者你部署到别的系统运行试试了
参考技术A 是的,Qmovie只能播放gif的图片。你如果想播放视频的话,应该使用VideoPlayer类,这个类是在phonon模块,你可以继承该类,也可以像普通控件一样使用,非常简单,这个类有下面这些方法:
load (),pause (),play (),seek (),setVolume (),stop ()
很容弄明白这些方法是干什么的。。。
不懂再问我吧,祝你好运。。。追问
我用QT creator建了一个GUI应用程序,基类选的是QWidget,请问代码该怎么写?就简单到打开这个程序就播放视频,其他的功能先不用。代码应写到那个文件里,还有视频源文件应该放到哪?自己上网学了一下,可是没成功。
参考技术B 我不得不说之前的解答有误导之嫌. 我自己照着之前的代码做,也是看不到视频. 为避免后来者在这上面纠结. 回答一下. 问题在于没有把videoWidget 放到合适的位置上,而不是解码器的问题.下面这段代码是可以工作的.
#include <QApplication>
#include <QWidget>
#include <phonon>
#include <QUrl>
#include <QObject>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
int main(int argc, char *argv[])
QApplication app(argc, argv);
QWidget *mainWidget = new QWidget;
mainWidget->setWindowTitle("Prds Trial Player");
mainWidget->resize(640,480);
Phonon::MediaObject *mediaObject= new Phonon::MediaObject;
QUrl url = "C:\\Users\\Public\\Videos\\Sample Videos\\Wildlife.wmv";
mediaObject->setCurrentSource(url);
Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget;
Phonon::createPath(mediaObject, videoWidget);
videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
Phonon::AudioOutput *audioOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
Phonon::createPath(mediaObject, audioOutput);
QLabel *label = new QLabel("Volume: ");
Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
volumeSlider->setAudioOutput(audioOutput);
volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider;
seekSlider->setMediaObject(mediaObject);
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(label);
hLayout->addWidget(volumeSlider);
hLayout->addStretch();
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(videoWidget);
vLayout->addWidget(seekSlider);
vLayout->addLayout(hLayout);
mainWidget->setLayout(vLayout);
mainWidget->show();
mediaObject->play();
return app.exec();
C++ Qt实现音视频播放
由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑 避免以后踩坑 故在此记录实现过程
Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目中缺少视频播放模块的问题
1.首先创建一个新项目 并且打开.pro项目设置文件
2.在.pro文件中添加模块 如下所示 这是我们音视频播放的基础模块 其他设置根据自己的项目需求自行添加或修改 修改完成后ctrl+s保存文件
QT += multimedia multimediawidgets
//QT += core gui是新项目默认带的 不需要自己手动添加
3.接下来我们设置界面(GUI) 双击Forms文件夹下的.ui文件 打开GUI编辑页面 如下
我们目前不做太复杂的功能 当前仅需要Push Button和Widget两种控件
Push Button我们用于控制播放 Widget用于显示视频
4.将上述两个控件 左键按住不放 拖入右侧窗口界面中
对控件进行一些基础设置 为了增强可读性 我这里对控件名称做了一些修改 对准需要修改的控件单击右键并选择"改变对象名称"
左侧的按钮改名为pushButton_set 右侧按钮改名为pushButton_start
上面的框是Widget 这个控件拖进来后基本为透明状 仅有边框轮廓 我们改名为widget_video
ctrl+s保存文件
5.设置播放窗口
这里我们需要将Widget提升为QVideoWidget
类名和头文件都写为QVideoWidget 选中全局包含 然后添加并提升
6.按钮信号设置
右键第一个按钮 选择"转到槽"
此时我们会跳转到代码编辑页面
在写代码之前 我们还需要引入一些需要的头文件
#include <QMediaPlaylist>
#include <QMediaPlayer>
现在我们创建一个全局的播放器变量
QMediaPlayer *player = new QMediaPlayer();
然后编写刚刚的按钮槽函数
void MainWindow::on_pushButton_set_clicked()
player->setMedia(QMediaContent(QUrl::fromLocalFile("C:/Users/Administrator/Music/MV/test.mp4")));
//这里的文件路径是本地的视频文件全路径 根据自己的情况来设置
//player是刚刚建立的播放器变量
player->setVideoOutput(ui->widget_video);
//widget_video是我们刚刚拖入的widget控件名称
做完这些后你的源文件.cpp看起来应该是这样的
注意 这里的视频文件路径请根据你的视频存放位置填写
如果你是从windows直接复制的路径 那么应该是\\ 此时可能会跟C++的字符转义符\\冲突 那么请在\\前面再加上一个\\ 或者将\\改为/
直接复制路径:
C:\\Users\\Administrator\\Music\\MV\\test.mp4
修改为:
C:\\\\Users\\\\Administrator\\\\Music\\\\MV\\\\test.mp4
或:
C:/Users/Administrator/Music/MV/test.mp4
7.同样照上述过程 编写第二个按钮的槽函数
回到.ui文件 右键第二个按钮 并选择"转到槽" 并选择clicked()
跳转到槽函数编写位置 写入以下内容:
void MainWindow::on_pushButton_start_clicked()
player->play();
最终完成的两个槽函数应该是这样的
8.编译运行
至此主要部分已经完成 我们编译运行软件看看效果如何
编译很顺利 没有Error 软件成功运行起来了 出现我们刚刚编辑的窗口
至此基本播放功能实现完成 可以看到我下载到本地的MV已经播放出来了
9.踩坑提醒
点击开始播放没有反应并在Qt信息栏出现错误提示:DirectShowPlayerService::doRender: Unresolved error code 0x80040266
这是由于系统中不存在DirectShow解码器 因为Qt的视频播放控件是基于DirectShowPlayerService开发的
解决方案:安装一个DirectShow解码器 直接百度下载安装一个到系统 如:LAV Filters 重新编译运行
错误提示:DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()
解决方案:将视频文件放在全英文且无空格的路径下 修改路径后重新编译运行
以上是关于QT中怎么在一个Widget中添加视频播放的功能,就是一打开这个Widget就自动播放视频?要用啥函数?的主要内容,如果未能解决你的问题,请参考以下文章