qt 简单视频播放器

#include "videowidget.h"
#include <QGridLayout>
#include <QDebug>
#include "../TC_Common/global.h"

VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent)
{
    setWindowFlag(Qt::FramelessWindowHint);

    setAutoFillBackground(true);
    QRadialGradient radial(HDMI_WIDTH/2,HDMI_HEIGHT/2,HDMI_WIDTH/2,HDMI_WIDTH/2,HDMI_HEIGHT/2);
    radial.setColorAt(0,Qt::cyan);
    radial.setColorAt(1,Qt::black);

    QPalette qplte;
    qplte.setBrush(QPalette::Window, QBrush(radial));
    setPalette(qplte);

     m_viewplayer = new QMediaPlayer;

     m_videoWidget = new QVideoWidget;

     /*网络读取*/
     m_viewplayer->setMuted(true);
     m_viewplayer->setVideoOutput(m_videoWidget);

     //必须要有布局,没有布局视频后台运行,但不显示画面
     QGridLayout*grid = new QGridLayout(this);
     grid->setSpacing(0);
     grid->setMargin(0);
     grid->addWidget(m_videoWidget);
     setLayout(grid);

     connect(m_viewplayer, QOverload<QMediaPlayer::State>::of(&QMediaPlayer::stateChanged),
             [=](QMediaPlayer::State newState){
         qDebug()<<DEBUGINFO<<newState;
     });

     connect(m_viewplayer, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error),
             [=](QMediaPlayer::Error error){
         QString errorinfo;
         errorinfo.clear();
         switch (static_cast<int>(error))
         {
         case QMediaPlayer::Error::ResourceError:
             errorinfo = "媒体源错误,";
             break;

         case QMediaPlayer::Error::FormatError:
             errorinfo = "格式错误,播放可能会丢失音频或视频";
             break;

         case QMediaPlayer::Error::NetworkError:
             errorinfo = "网络错误";
             break;

         case QMediaPlayer::Error::AccessDeniedError:
             errorinfo = "访问权限错误";
             break;

         case QMediaPlayer::Error::ServiceMissingError:
             errorinfo = "服务丢失错误";
             break;

         default: break;
         }

         emit signal_videoError(QString("错误信息:"+QTime::currentTime().toString("hh:mm:ss")+": "+errorinfo));
     });

     connect(m_viewplayer, QOverload<QMediaPlayer::MediaStatus>::of(&QMediaPlayer::mediaStatusChanged),
             [=](QMediaPlayer::MediaStatus status){
         QString statusinfo;
         statusinfo.clear();
         switch(status)
         {
         case QMediaPlayer::UnknownMediaStatus:
             statusinfo = "媒体未知状况!";
             break;
         case QMediaPlayer::NoMedia:
             statusinfo = "没有媒体文件!";
             break;
         case QMediaPlayer::BufferingMedia:
             statusinfo = "正在缓冲媒体文件!";
             break;
         case QMediaPlayer::BufferedMedia:
             statusinfo = "媒体文件缓冲完成!";
             break;
         case QMediaPlayer::LoadingMedia:
             statusinfo = "正在加载媒体!";
             break;
         case QMediaPlayer::StalledMedia:
             statusinfo = "播放停滞!";
             break;
         case QMediaPlayer::EndOfMedia:
             statusinfo = "播放结束!";
             break;
         case QMediaPlayer::LoadedMedia:
             statusinfo = "媒体加载完成!";
             break;
         case QMediaPlayer::InvalidMedia:
             statusinfo = "不可用的媒体文件!";
             break;
         default: break;
         }

         emit signal_videoInfo(QString("播放状态:"+QTime::currentTime().toString("hh:mm:ss")+": "+statusinfo));
     });
}

VideoWidget::~VideoWidget()
{
    m_viewplayer->deleteLater();
    m_videoWidget->deleteLater();
}

void VideoWidget::play()
{
    m_viewplayer->setMedia(QMediaContent(QUrl(m_url)));
    m_viewplayer->play();
}

void VideoWidget::replay()
{
    m_viewplayer->stop();
    m_viewplayer->setMedia(QMediaContent(QUrl(m_url)));
    m_viewplayer->play();
}

void VideoWidget::stop()
{
    m_viewplayer->stop();
}

void VideoWidget::setUrl(QUrl url)
{
    m_url = url;
}
#ifndef VIDEOWIDGET_H
#define VIDEOWIDGET_H

#include <QWidget>
#include <QMediaPlayer>
#include <QVideoWidget>

class VideoWidget : public QWidget
{
    Q_OBJECT
public:
    explicit VideoWidget(QWidget *parent = nullptr);

    ~VideoWidget();

    void play();

    void replay();

    void stop();

    void setUrl(QUrl url);
signals:
    void signal_videoInfo(QString);

    void signal_videoError(QString);
public slots:

private:
    QMediaPlayer *m_viewplayer;

    QVideoWidget *m_videoWidget;

    QUrl m_url;
};

#endif // VIDEOWIDGET_H
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值