12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #ifndef VideoPlayer_H
- #define VideoPlayer_H
- #include <QWidget>
- #include <QThread>
- #include <QTimer>
- #include <QSemaphore>
- class DecodeVedio;
- class VideoPlayer : public QWidget
- {
- Q_OBJECT
- public:
- explicit VideoPlayer(QWidget *parent = nullptr);
- ~VideoPlayer();
- void setPlayVedio(const QString& fileName); /* 设置播放视频 */
- bool play(); /* 播放视频 */
- void pause(); /* 暂停播放 */
- void stop(); /* 停止播放 */
- bool getPlayStatus() { return m_playStatus; } /* 获取播放状态 */
- qint64 getDuration(); /* 获取视频时长 */
- qint64 getCurrentPos(); /* 获取当前播放位置 */
- void setCurrentPos(quint64 pos); /* 设置当前播放位置 */
- void setPlayVedioSize(int width,int height); /* 设置播放视频大小 */
- // void setPlayCallBack(std::function<Play_CallBack> playCallBack,void* context); /* 设置播放回调函数 */
- protected:
- void paintEvent(QPaintEvent *event) override;
- void resizeEvent(QResizeEvent *event) override;
- void refreshOneUIUntilHave(); /* 刷新一张图片,直到有图片为止 */
- /* 双击事件函数 */
- void mouseDoubleClickEvent(QMouseEvent *event) override;
- private slots:
- void do_refreshUI(); /* 取出画面,刷新UI */
- void do_refreshOneUI(); /* 通过信号刷新第一张图片 */
- void do_playCompleted(); /* 播放完成 */
- private:
- QString m_fileName;
- QTimer m_timerRefreshUI; /* 定时器,用于刷新界面 */
- int m_srcWidth = 0; /* 图片原本大小 */
- int m_srcHeight = 0;
- int m_nowWidth = 0; /* 现在大小 */
- int m_nowHeight = 0;
- int m_frameCount = 0; /* 帧数 */
- int m_interval = 0; /* 间隔 */
- DecodeVedio* m_decodeVedio = nullptr;
- QThread* m_threadDecode = nullptr; /* 解码器所在的线程 */
- QImage* m_image = nullptr; /* 画面 */
- bool m_playStatus = false; /* 是否正在播放 */
- bool isSetVedioFile = false; /* 是否设置了视频文件 */
- QSemaphore* m_semRefresh = nullptr; /* 刷新信号量 */
- // std::function<Play_CallBack> m_funcPlayCB = nullptr; /* 播放回调函数 */
- void* m_context = nullptr; /* 上下文 */
- };
- #endif /* VideoPlayer_H */
|