先创建一个label 然后
视频将会显示在正中间 上下左右间隔为10的间隔
播放时,将label向左移动10个单位,向上移动10个单位,宽度加10,高度加10,即可显示在正确区域。
关于转码,只有转为本机识别的格式以后再打包,转到qt识别的格式,到别的机器才会通用解码播放,建议使用格式工厂,多转码,禁用解码器。
//pro文件
QT+=multimedia multimediawidgets
头文件包含
#include <QMultiMedia>
#include <QVBoxLayout>
#include <QMediaPlayer>
#include <QtMultimediaWidgets>
cpp实现
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow)
{
QMediaPlayer* videoPlayer=new QMediaPlayer(this);//实例化播放器
videoPlayer->setMedia(QUrl::fromLocalFile("./res/video/123.avi")); //打开音视频流文件
//视频需要转码为avi格式
QVideoWidget *videowidget = new QVideoWidget; //用于播放视频专用窗口 初始值:0x0
videowidget->resize(ui->label->size()); //把视频输出图像的大小重新调整为label的大小
QVBoxLayout *layout = new QVBoxLayout; //用于指定视频播放的位置
ui->label->setLayout(layout);//视频画面输出
layout->addWidget(videowidget);//指定视频播放的位置
videoPlayer->setVideoOutput(videowidget);
videoPlayer->play();
//videoPlayer.state()==0;
//播放器停止播放状态 根据枚举判断 下方是官方文档
}
enum State
{
StoppedState,
PlayingState,
PausedState
};
enum MediaStatus
{
UnknownMediaStatus,
NoMedia,
LoadingMedia,
LoadedMedia,
StalledMedia,
BufferingMedia,
BufferedMedia,
EndOfMedia,
InvalidMedia
};
enum Flag
{
LowLatency = 0x01,
StreamPlayback = 0x02,
VideoSurface = 0x04
};
Q_DECLARE_FLAGS(Flags, Flag)
enum Error
{
NoError,
ResourceError,
FormatError,
NetworkError,
AccessDeniedError,
ServiceMissingError,
MediaIsPlaylist
};